HTTP,超文本传输协议HyperText Transfer Protocol。基于TCP,无状态。
持续连接与非持续连接
http默认使用持续连接,但是也可以配置为使用非持续连接。持续连接就是指发送请求,接收响应后,并不直接关闭TCP连接,再有下个http请求,还用这个TCP连接发送;非持续连接就是发送请求,接收响应后,直接关闭TCP连接,后续的请求自己重新创建新的TCP连接
介绍一个概念,往返时间 Round-Trip Time RTT,是指一个短分组从客户到服务器然后再返回客户端所花费的时间。RTT包括分组传播时延、分组在中间路由器和交换机上的排队时延以及分组处理时延。
对于非持续连接,TCP三次握手的前两次消耗一个RTT,第三次握手时,客户端会向该TCP连接发送一个HTTP请求报文,然后服务器在该TCP连接上发送HTML文件。因此,一次请求会消耗两个RTT加上服务器传输HTML文件的时间
对于持续连接,在第一次三次握手建立TCP连接后,后续的HTTP请求就不需要消耗额外的RTT
HTTP报文格式
请求报文
请求行有三个字段:
- 方法字段。包括GET、POST、PUT、DELETE、HEAD等
- URL字段
- HTTP版本字段
首部行有很多,每一行由key:value CRLF组成。常见的首部有: - Host:指明对象所在的主机
- Content-Type:指明发送的数据格式,如:application/json
- If-Modified-Since:条件get,如果指定的时间后并未修改,此次请求就不需要返回响应的数据了
响应报文
状态行包括:
- 版本
- 状态码及短语。代表这次请求的结果状态。常见的状态码、短语有:
- 200 OK:请求成功
- 301 Moved Permanently:原URL以转移,新的URL在响应报文的Location首部行中
- 400 Bad Request:服务器无法理解请求
- 404 Not Found:请求的地址不存在
- 500:服务端异常
cookie
我们知道,HTTP协议是无状态的。但是,很多时候,服务器需要知道请求是由谁发起的,即用户信息,或者基于别的需要,服务器需要知道一些别的信息。此时,HTTP就使用cookie对用户进行追踪。
cookie技术一般有四个组件:
- 在HTTP响应报文中有个Set-Cookie首部
- 在HTTP的请求报文中有个Cookie首部行
- 在客户端有个cookie文件,由浏览器管理
- 服务器有的地方负责将cookie与用户信息关联起来