- 客户端与服务端之间的通信
- 介绍:HTTP协议和TCP/IP协议簇内的其他协议一样,用于客户端和服务端之间的通信。请求访问资源的一方称为客户端,而提供资源的一方称为服务端。当然在实际情况下,通信双方的角色身份可能会随着响应的需要而动态变换。
- 通过请求和响应达成通信
- 准确地说两端之间的通信是通过客户端的主动发起请求和服务端的被动响应。当然也存在一些特例,比如说:客户端订阅了服务端的群推送消息,在服务端更新群推送信息的时候会主动发送数据到客户端,而这时客户端就是被动接收消息。
- 解析请求报文结构和响应报文结构
-
- 请求报文:是从客户端发送给某个 HTTP 服务器端的请求报文中的内容。
-
-
- GET:表示请求访问服务器的类型,称为请求方法。
- /index.htm:指明了请求访问的资源对象,也叫做URI
- HTTP/1.1:HTTP的版本号,用来提示客户端发送请求使用的HTTP的版本号。
- Host:请求服务器的域名,可用IP地址代替。
-
Connection:请求连接方式。
- Content-Type:请求内容发送的格式
- Content-length:请求内容的长度
- 响应报文:
-
-
- HTTP/1.1:HTTP的版本号,用来表示服务器使用的HTTP的版本号。
- 200:处理结果的状态码(正常)
- OK:处理结果的原因短语
- Date:记录响应体创建的时间
- Content-Length:响应内容的长度
- Content-Type:响应内容的类型
- 主体:具体的响应内容
- HTTP的请求方法
- GET:用来请求访问已被 URI 识别的资源。指定的资源经服务器端解析后返回响应内容。也就是说,如果请求的资源是文本,那就保持原样返回;如果是像 CGI(Common Gateway Interface,通用网关接口)那样的程序,则返回经过执行后的输出结果。一般用作获取资源的请求,如查询请求。但是会把请求参数暴露在URI后面。
-
- POST:用来传输实体主体,一般用作数据新增的请求。会把请求参数放到body里面进行传输。
-
- PUT:用来传输文件。就像 FTP 协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。 一般用作更新数据的请求。也是把请求参数放到body里面进行传输。
-
- HEAD:和GET 方法一样,只是不返回报文主体部分。用于确认URI 的有效性及资源更新的日期时间等。
-
- DELETE: 用来删除文件,是与 PUT 相反的方法。DELETE 方法按请求 URI 删除指定的资源。
-
- OPTIONS:用来查询针对请求 URI 指定的资源支持的方法。
-
- TRACE:让 Web 服务器端将之前的请求通信环回给客户端的方法。发送请求时,在 Max-Forwards 首部字段中填入数值,每经过一个服务器端就将该数字减 1,当数值刚好减到 0 时,就停止继续传输,最后接收到请求的服务器端则返回状态码 200 OK 的响应。客户端通过 TRACE 方法可以查询发送出去的请求是怎样被加工修改/ 篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理中转,TRACE 方法就是用来确认连接过程中发生的一系列操作。
-
- CONNECT:要求在与代理服务器通信时建立隧道,实现用隧道协议进行 TCP 通信。主要使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加 密后经网络隧道传输。
-
- HTTP/1.0 和 HTTP/1.1支持的方法
- 持久性连接
- 产生原因:因为HTTP之前的版本都是没有发送一次请求都要进行TCP的连接和断开操作。如果一个页面同时存在很多的资源请求时,每次的请求都会造成无谓的 TCP 连接建立和断开,增加通信量的开销。所以为了解决TCP 连接的问题,HTTP/1.1 和一部分的 HTTP/1.0 想出了持久连接(HTTP Persistent Connections,也称为 HTTP keep-alive 或HTTP connection reuse)的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。
- 线管化:
- 产生原因:持久连接使得多数请求以管线化(pipelining)方式发送成为可能。从前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术出现后,不用等待响应亦可直接发送下一个请求。这样就能够做到同时并行发送多个请求,而不需要一个接一个地等待响应了。