1. 请求方法
补充:
(2)
Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. The methods GET, HEAD, PUT and DELETE share this property. Also, the methods OPTIONS and TRACE SHOULD NOT have side effects, and so are inherently idempotent.
方法 GET,HEAD,PUT 和 DELETE 共享此属性。此外,方法 OPTIONS 和 TRACE 不应该有副作用,因此本质上是幂等的。
引用自:https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
(3) PUT 方法,也需要把请求数据包含在请求体中。
2. 报文
(1)请求报文
一个HTTP请求报文由请求行(request line)
、请求头部(header)
、空行
和请求数据(报文主体)
4个部分组成
<request-line>
<headers>
<blank line>
[<request-body>]
请求行 由请求方法字段、URL 字段和 HTTP 协议版本字段 3 个字段组成,它们用空格分隔。
例如,GET /index.html HTTP/1.1
。URL 字段(地址)和 报文头(即请求头部)的 Host 首部字段组成完整的请求 URL
请求头部由数个首部字段组成,用于附带请求服务时的附属信息。
而 首部字段 由关键字/值对组成,每行一对,关键字和值用英文冒号 :
分隔,值可能有多个,可以用 ,
分割。用于通知服务器有关于客户端请求的信息。
空行 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
报问体 用于 POST 等方法来附带数据,形式也是 key-value
(键值对)的形式,且用 &
进行分隔。
(2)响应报文
由 状态行
、首部字段
、空行
和响应正文
四部分组成
<status-line>
<headers>
<blank line>
[<response-body>]
状态行 包含表明响应结果的状态码、原因短语和 HTTP 版本,例如:HTTP/1.1 200 OK
响应头部 也是由数个首部字段组成,由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔。用于服务器告知客户端相关的响应信息。
其中,对于请求报文和响应报文的首部字段都一般包含三种首部:请求首部/响应首部、通用首部、实体首部
3. 首部字段
在中 HTTP/1.1 定义的,以及 Cookie、Set-Cookie、Content-Disposition 等在其他 RFC 中定义的,这两种中使用频率较高的。
4. MIME
在首部字段中有 content-type
字段来说明实体主体类对象的媒体类型,以及 accept
字段来讲明客户端能够接受处理的媒体类型。
5. 返回结果的状态码
- 1XX 表示临时响应并需要请求者继续执行操作的状态代码
- 2XX 请求被正常处理了
- 3XX 重定向,需要进一步的操作以完成请求
- 4XX 客户端错误,请求包含语法错误或无法完成请求
- 5XX 服务器错误,服务器在处理请求的过程中发生了错误
6. Cookie
cookie 和 token 主要都是为了验证用的。
cookie 验证准确的说是利用 cookie 来作为媒介,存储 session ID 进行验证,是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。其处于 Cookie Header 中进行传输。
token 可以附属在 cookie 中,或者将其单独的设置出来,可以存储在 Authorization Header 中进行的验证。
基于 cookie 的验证是有状态的,就是说验证或者会话信息必须同时在客户端和服务端保存。这个信息服务端一般在数据库中记录,而前端会保存在 cookie 中。
基于 token 的验证是无状态的,这也许是它相对 cookie 来说最大的优点。后端服务不需要记录 token。每个令牌都是独立的,包括检查其有效性所需的所有数据,并通过声明传达用户信息。服务器唯一的工作就是在成功的登陆请求上签署 token,并验证传入的 token 是否有效。
参考链接:cookie,token验证的区别
7. 各个版本的区别
补充说明:
SPDY 是一种协议,以会话层的形式加入,控制对数据的流动,但还是采用 HTTP 建立通信链接。使用 SPDY 后,HTTP 协议额外获得:多路复用流、赋予请求优先级、压缩 HTTP 首部、推送功能、服务器提示功能。
WebSocket 也是一种通信协议,要基于 HTTP 建立链接,通过 “握手-请求” 与 “握手-响应” 来确立 WebSocket 连接之后,就可以使用 WebSocket 独立的数据帧来通信,而不再使用 HTTP 的数据帧来了。
具体参考:
多路复用,即多工(双向的、实时的通信,就叫做多工(Multiplexing))
,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了"队头堵塞"。可以参阅:http2 – 多路复用在HTTP/2中意味着什么
补充文章: