HTTP协议相关基础备忘
概况
HTTP协议(HyperText Transfer Protocol),是Web的核心协议之一,它主要由两个程序实现:客户程序和服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换HTTP报文进行会话。HTTP协议规范了客户程序和服务器程序之间交流的规则和形式。
HTTP协议是以TCP协议作为其支撑运输协议。也就是说客户端想要发起一个HTTP请求,就必须与服务器端建立起一个TCP连接。连接一旦建立,就意味着,客户的浏览器可以通过套接字接口访问TCP。一旦客户端向其套接字接口发送了一个HTTP请求报文,该报文就脱离客户端的控制从而进入TCP的控制。HTTP服务器不保存关于客户的任何信息,因此HTTP也被称为是一种无状态协议。
非持续连接和持续连接
HTTP协议的支撑运输协议是TCP协议,所以HTTP请求响应过程中就必须有TCP连接建立的过程,那么就存在着两种请求响应的方式,非持续连接和持续连接,前一种方式就是每一个请求/响应对都是经过一个单独的TCP连接发送,后一种方式则是所有的请求/响应都经过同一个TCP进行发送。
HTTP报文格式
HTTP报文分有两种:请求报文和响应报文。
- HTTP请求报文
示例:
GET /index.html HTTP/1.1
Host: ......
Connection: ......
User-agent: ......
请求报文的第一行叫做请求行,其中包含三个字段:方法字段、URL字段、HTTP版本字段,方法字段包括:GET、POST、PUT、HEAD、DELETE。第二行及之后的行都被称为首部行,包含有发出的请求所在的主机、连接管理策略、浏览器类型等等。在首部行之后还存在一个实体体,即请求体,作用是在发送POST请求时,会将请求的数据放入到该实体体中
2. HTTP响应报文
HTTP/1.1 200 OK
Connection: ...
Date: ......
Server: ......
Last_Modified: ......
Content-Length: ......
Content-Type: ......
(data data data data data ...)
响应报文的第一行叫做状态行,其中包含三个字段:HTTP版本号、状态码、状态信息,然后剩下的两个部分是首部行和实体体。
常见的状态码:
- 200 OK:请求成功,信息在返回的响应报文中
- 301 Moved Permanently:请求对象被永久转移
- 400 Bad Request:一个通用的差错代码
- 404 Not Found:请求的资源不在服务器上
- 505 HTTP Version Not Supported:服务器不支持请求报文使用的HTTP协议版本
Cookie
Cookie是一种能够让服务器识别用户的手段,通过这种方法,服务器可以限制用户的访问或者把响应的内容与用户特定关联起来。
Cookie主要有4个组件
- HTTP响应报文中的一个cookie首部行
- HTTP请求报文中的一个cookie首部行
- 用户端系统中保留有一个cookie文件,并由用户的浏览器尽心个管理
- 位于Web站点的一个后端数据库
Cookie可以用来标识一个用户。用户首次访问一个站点时,也许会需要提供一个用户标识。在后继会话中,浏览器向服务器传递一个cookie首部,从而服务器能够标识用户。因此cookie可以在无状态的HTTP之上建立一个用户会话层。
Web缓存
Web缓存即代理服务器,它能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存有自己的磁盘存储空间,并在存储空间中保存有最近请求过的对象的副本。一旦一个Web缓存被配置,那么一个请求就有可能会是下面的过程
- 浏览器创建一个到Web缓存的TCP连接,并向Web缓存发送一个HTTP请求
- Web缓存进行检查,看看本地是否存储了该请求的对象副本,若有,则向客户端返回该对象
- 若没有该对象,就会打开一个与存在对象的初始服务器的TCP连接,初始服务器会将对象响应给Web缓存
- Web缓存收到响应对象后,会将其复制一份作为副本保存,将另一份响应给客户浏览器
条件GET方法
该方法主要是Web缓存为了检查缓存在本地的对象资源是否过期(即原始服务器端该对象资源是否被修改)
HTTP协议版本差异
HTTP0.9
HTTP协议的第一个版本
- 只支持GET请求
- 没有请求头部,只能传送获取纯文本
- 不支持持续连接
HTTP1.0
- 支持GET、POST、PUT、HEADER、DELETE请求方式
- 报文中增加了头部
- 增加了传送内容的格式,包括文本、图片、视频等
HTTP1.1
- 头部新增Connection字段,支持持续连接
- 管道化,这个功能是基于持续连接的,就是发送第一个请求后可以不关闭TCP连接,接着发送第二个请求,但是响应顺序和发送顺序是一致的
- 支持断点传输
- 增加了缓存控制,也就是支持代理服务器。
HTTP2.0
当前HTTP的最新版本(但是该版本只会被用于https://开头的网址,http:// 开头的网址依然使用HTTP1.x版本)
- 二进制分帧:将信息分割为更小的帧,并采取二进制编码,提高传输效率
- 多路复用:一个TCP连接上可以对应多个流(Stream),信息分割成帧后乱序传输,服务端根据其标识符和首部将其重组
- 头部压缩:有一些报文传送的头部信息是重复的,这样每次传输报文时都要传输头部,也会消耗资源,HTTP 2可以维护一个头部字典,实现对头部信息的差量更新
- 服务器推送:服务器通过预测可以向客户端推送额外的信息,而无需客户端明确的请求。例如:请求index.html,服务器可以额外推送css和js文件到客户端

浙公网安备 33010602011771号