一、HTTP协议
1、什么是协议
- 为计算机网络中进行数据交换而建立的规则、标准或约定的集合。说的简单点,就是机器之间的“语言”
协议由三个要素组成:
- 语义:表示要做什么
- 语法:表示要怎么做
- 时序:表示做的顺序
常见的应用层协议:
- HTTP、Web Service 、TCP/IP、FTP、POP3等
2、HTTP协议
协议所在层级
- http是基于TCPi协议之上的。在TCP/IP协议模型参考的各层对应的协议如下图,其中http是应用层http,中文名:超文本传输协议,用来实现客户端浏览器或其他程序与web服务器之间的通信,是互联网上应用最为广泛的一种网络协议。所有的www文件都必须遵守这个协议。设计http最初的目的是为了提供一种发和接收html页面的方法。
http请求模型
http工作原理
请求-->响应完整流程
- 客户机发起一次请求的时候:客户机会将请求封装成http数据包-->封装成tcp数据包-->封装层ip数据包-->封装成数据帧-->硬件将帧转换成bit流(二进制数据)-->最后通过物理硬件(网卡芯片)发送到指定地点。
- 服务器硬件首先收到bit流,然后转换成ip数据包。于是通过ip协议解析ip数据包,然后又发现里面是tcp数据包,就通过tcp协议解析tcp数据包,接着发现是http数据包通过http协议再解析http数据包得到数据。
http的请求与响应
http与loadrunner
- http请求和loadrunner函数:
- get----web_url
- post----web_submit_data
- 任意类型----web_custom_request
- http请求报文格式--请求行、请求头、请求体(请求正文):
- http响应格式--响应头、响应体(请求正文):
http请求与报文格式:
- xml
- json
http与报文格式
http1.0存在的问题
- 连接无法复用,每次请求都经历三次握手和慢启动。三次握手在高延迟的场景下比较明显,慢启动则对文件类大请求影响较大。目前的解决方案:长链接、web_secket等
- head of line blocking(1.0/1.1缺陷),线头阻塞,导致带宽无法被充分利用,以及后续健康请求被阻塞,解决方案:pipelining管道技术(存在较大的缺陷),http1.x有个问题叫线头阻塞(head of line blocking)它是指一个连接(connection)一次只提交一个请求的效率会比较高,多了就会变慢。http1.1试过用流水线来解决这个问题,但是效果不太理想(数据量较大或者速度较慢的响应,会阻碍它后面的请求)此外,由于网络媒介和服务器不能很好的支持流水线,导致部署起来困难重重。而多路传输(Multiplexing)能很好的解决这些问题,因为它能同时处理多个消息的请求和响应;甚至可以在传输过程中将一个消息跟另外一个掺杂在一起。所以客户端只需要一个连接就能加载一个页面。
http1.1存在的问题
- HTTP Pipelining其实是把多个http请求放到一个TCP连接中发送,而在发送过程中不需要等待服务器对前一个请求的响应;只不过,客户端还是要按照发送请求的顺序来接受响应。
http2.0
- HTTP2.0最大的特点:不会改动HTTP1.1的语义,http方法,状态码,url及首部字段等等,这些核心概念上一如往常,保持了很好的向下兼容能力,又能致力于突破上一代标准的性能限制,改进传输性能,实现低延迟和高吞吐量。
- 几个基础概念:
- 帧(frame)二进制数据格式而非文本格式,比起像http1.1这样的文本协议,二进制协议解析起来更高效、线上更紧凑、更重要的错误更少。
- 流(Stream)流是个抽象概念,是对输入输出设备的抽象,具有方向性
- 连接共享(Connection)一个request对应一个stream并分配一个id,这样一个连接上可以有多个stream,每个stream的frame可以随机的混杂在一起,接收方可以根据stream id将frame再归属到各自不同的request里面。
http1.1VShttp2.0
http与https的区别
- http协议传输的数据都是未加密的,于是网景公司设计了SSL(Secure Sockect Layer)协议用于对http协议传输的数据进行加密,从而就诞生了https。
- https协议需要到ca申请证书,一般免费证书较少,因而需要某些费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
常用的http协议测试工具
- 各浏览器的开发者工具
- Firebug
- HTTPWATCH
- Fiddler
- Wireshark