请求资源(文本、图像等)的一端叫做客户端,提供资源响应的一端叫服务端。而HTTP协议就是用于客户端与服务器端之间的通信。
注意:在使用HTTP协议进行通信时,必定有一端是客户端另一端是服务端,但是他们两个的角色可能会互换。
HTTP 协议规定,请求从客户端发出,最后服务端响应请求并返回。(没有请求,就不会有响应)
如果客户端想要发起请求就需要提供请求信息(也就是请求报文),而请求报文是由请求方法(get、post等)、请求URI(统一资源标识符)、协议版本、请求首部字段(可选)、内容实体(参数)构成。

接收到请求的服务器,将处理结果以响应的形式返回(也就是响应报文)。
响应报文是由状态码、状态码原因短语、响应首部字段(可选)、实体主体构成(资源、数据等)。

向请求 URI 指定的资源发送请求报文时,采用称为方法的命令。
方法的作用在于,可以指定请求的资源按期望产生某种行为。
HTTP/1.0 和 HTTP/1.1 支持的方法如下表:

注意:LINK 和 UNLINK 已被 HTTP/1.1 废弃,不 再支持。
GET
GET方法主要用来获取被 URI 识别的指定资源经服务器处理后返回的响应内容。
POST
POST 方法用来传输实体的主体。(平时开发时虽然GET也可以传输,但是大多使用POST方法请求,他们的目的不一样。)
PUT
PUT 方法用来传输文件。
在请 求报文的主体中包含文件内容,然后保存到请求 URI 指定的位置。(由于HTTP的PUT方法自身不带验证机制,所以可能会有安全问题,如需使用请配和其他验证机制)。
HEAD
获得报文首部。
和GET方法一样,只是不返回报文主体部分。主要用于确认URI 的有效性及资源更新的日期时间等。
DELETE
主要用于删除文件。
按照请求URI 删除指定的资源是与PUT相反的方法(同样不带验证机制)。
OPTIONS
用来查询针对请求 URI 指定的资源支持的方法。
TRACE
主要用来追踪路径。
有时请求想要连接到源目标服务器可能会通过代理中转、处理,TRACE 方法就是用来确认连接过程中发生的一系列操作(容易引发 XST(跨站追踪)攻击,所以不常用)。
CONNECT
CONNECT 方法要求在与代理服务器通信时建立隧道,实现用隧道协 议进行 TCP 通信。
主要使用 SSL(安全套接 层)和 TLS(传输层安全)协议把通信内容 加 密后经网络隧道传输。
HTTP 是一种不保存状态,即无状态协议。
HTTP 协议自 身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个 级别,协议对于发送过的请求或响应都不做持久化处理。
HTTP的无状态协议是为了快速处理大量事务,确保协议的可伸缩性,但是无状态也会带来其他的问题,需要使用其他技术来辅助保存状态(如cookie)。
HTTP协议是无状态的,也就是说它无法根据上一次请求的状态来处理本次请求。假如我登录一个网站后在进行页面跳转的时候,登录状态不保存那么我每次都要进行重新登录操作非常麻烦,而在项目中还会有许多此类的场景,为了解决这种问题于是引入 了 Cookie 技术。
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的 首部字段信息,通知客户端保存 Cookie。当下次客户端再往该服务器 发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出 去。
服务器端发现客户端发送过来的 Cookie 后,会去检查究竟是从哪一 个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前 的状态信息。


HTTP 协议的初始版本中,每进行一次 HTTP 通信就要断开一次 TCP 连接。
也就是说我没请求和获取响应一次,TCP就要经历三次握手建立连接和四次挥手断开链接,当数据量很小的时候几乎不会造成影响,但是当数据有大量图片或者文件资源的时候,就会造成非常大的通信开销。

为了解决上述TCP 连接的问题,HTTP想出了持久化链接方法,也就是说只要任意一端 没有明确提出断开连接,则保持 TCP 连接状态。一次连接可以进行多次请求和响应的交互。
持久连接的好处在于减少了 TCP 连接的重复建立和断开所造成的额 外开销,减轻了服务器端的负载。可以使HTTP请求和响应更快速的结束,提高请求性能。
注意:在 HTTP/1.1 中,所有的连接默认都是持久连接,但在 HTTP/1.0 内并 未标准化(只有一部分持久化)。

持久连接为请求管线化做了基础,之前发送请求后需等待并收到响应,才能发送下一个请求。管线化技术 出现后,不用等待响应亦可直接发送下一个请求。
管线化技术使得请求和响应并发进行,在面对很多次数请求的时候,交互时间更加的快。
