2424 * [ 响应首部字段] ( #响应首部字段 )
2525 * [ 实体首部字段] ( #实体首部字段 )
2626* [ 五、具体应用] ( #五具体应用 )
27+ * [ 连接管理] ( #连接管理 )
2728 * [ Cookie] ( #cookie )
2829 * [ 缓存] ( #缓存 )
29- * [ 连接管理] ( #连接管理 )
3030 * [ 内容协商] ( #内容协商 )
3131 * [ 内容编码] ( #内容编码 )
3232 * [ 范围请求] ( #范围请求 )
4444 * [ 二进制分帧层] ( #二进制分帧层 )
4545 * [ 服务端推送] ( #服务端推送 )
4646 * [ 首部压缩] ( #首部压缩 )
47- * [ 八、GET 和 POST 比较] ( #八get-和-post-比较 )
47+ * [ 八、HTTP/1.1 新特性] ( #八http11-新特性 )
48+ * [ 九、GET 和 POST 比较] ( #九get-和-post-比较 )
4849 * [ 作用] ( #作用 )
4950 * [ 参数] ( #参数 )
5051 * [ 安全] ( #安全 )
5152 * [ 幂等性] ( #幂等性 )
5253 * [ 可缓存] ( #可缓存 )
5354 * [ XMLHttpRequest] ( #xmlhttprequest )
54- * [ 九、HTTP/1.0 与 HTTP/1.1 的区别] ( #九http10-与-http11-的区别 )
5555* [ 参考资料] ( #参考资料 )
5656<!-- GFM-TOC -->
5757
@@ -102,7 +102,7 @@ URI 包含 URL 和 URN,目前 WEB 只有 URL 比较流行,所以见到的基
102102
103103POST 主要用来传输数据,而 GET 主要用来获取资源。
104104
105- 更多 POST 与 GET 的比较请见第八章 。
105+ 更多 POST 与 GET 的比较请见第九章 。
106106
107107## PUT
108108
@@ -303,6 +303,25 @@ CONNECT www.example.com:443 HTTP/1.1
303303
304304# 五、具体应用
305305
306+ ## 连接管理
307+
308+ <div align =" center " > <img src =" ../pics//HTTP1_x_Connections.png " width =" 800 " /> </div ><br >
309+
310+ ### 1. 短连接与长连接
311+
312+ 当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。
313+
314+ 长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。
315+
316+ - 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 ` Connection : close ` ;
317+ - 在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 ` Connection : Keep-Alive ` 。
318+
319+ ### 2. 流水线
320+
321+ 默认情况下,HTTP 请求是按顺序发出的,下一个请求只有在当前请求收到响应之后才会被发出。由于会受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能需要等待很长时间。
322+
323+ 流水线是在同一条长连接上发出连续的请求,而不用等待响应返回,这样可以避免连接延迟。
324+
306325## Cookie
307326
308327HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务。HTTP/1.1 引入 Cookie 来保存状态信息。
@@ -420,23 +439,23 @@ Session 可以存储在服务器上的文件、数据库或者内存中。也可
420439
421440HTTP/1.1 通过 Cache-Control 首部字段来控制缓存。
422441
423- ** (一) 禁止进行缓存**
442+ ** 3.1 禁止进行缓存**
424443
425444no-store 指令规定不能对请求或响应的任何一部分进行缓存。
426445
427446``` html
428447Cache-Control: no-store
429448```
430449
431- ** (二) 强制确认缓存**
450+ ** 3.2 强制确认缓存**
432451
433452no-cache 指令规定缓存服务器需要先向源服务器验证缓存资源的有效性,只有当缓存资源有效才将能使用该缓存对客户端的请求进行响应。
434453
435454``` html
436455Cache-Control: no-cache
437456```
438457
439- ** (三) 私有缓存和公共缓存**
458+ ** 3.3 私有缓存和公共缓存**
440459
441460private 指令规定了将资源作为私有缓存,只能被单独用户所使用,一般存储在用户浏览器中。
442461
@@ -450,7 +469,7 @@ public 指令规定了将资源作为公共缓存,可以被多个用户所使
450469Cache-Control: public
451470```
452471
453- ** (四) 缓存过期机制**
472+ ** 3.4 缓存过期机制**
454473
455474max-age 指令出现在请求报文中,并且缓存资源的缓存时间小于该指令指定的时间,那么就能接受该缓存。
456475
@@ -493,32 +512,13 @@ Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
493512If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
494513```
495514
496- ## 连接管理
497-
498- <div align =" center " > <img src =" ../pics//HTTP1_x_Connections.png " width =" 800 " /> </div ><br >
499-
500- ### 1. 短连接与长连接
501-
502- 当浏览器访问一个包含多张图片的 HTML 页面时,除了请求访问 HTML 页面资源,还会请求图片资源。如果每进行一次 HTTP 通信就要新建一个 TCP 连接,那么开销会很大。
503-
504- 长连接只需要建立一次 TCP 连接就能进行多次 HTTP 通信。
505-
506- - 从 HTTP/1.1 开始默认是长连接的,如果要断开连接,需要由客户端或者服务器端提出断开,使用 ` Connection : close ` ;
507- - 在 HTTP/1.1 之前默认是短连接的,如果需要使用长连接,则使用 ` Connection : Keep-Alive ` 。
508-
509- ### 2. 流水线
510-
511- 默认情况下,HTTP 请求是按顺序发出的,下一个请求只有在当前请求收到响应之后才会被发出。由于会受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能需要等待很长时间。
512-
513- 流水线是在同一条长连接上发出连续的请求,而不用等待响应返回,这样可以避免连接延迟。
514-
515515## 内容协商
516516
517517通过内容协商返回最合适的内容,例如根据浏览器的默认语言选择返回中文界面还是英文界面。
518518
519519### 1. 类型
520520
521- ** (一) 服务端驱动型**
521+ ** 1.1 服务端驱动型**
522522
523523客户端设置特定的 HTTP 首部字段,例如 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Languag,服务器根据这些字段返回特定的资源。
524524
@@ -528,7 +528,7 @@ If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
528528- 客户端提供的信息相当冗长(HTTP/2 协议的首部压缩机制缓解了这个问题),并且存在隐私风险(HTTP 指纹识别技术);
529529- 给定的资源需要返回不同的展现形式,共享缓存的效率会降低,而服务器端的实现会越来越复杂。
530530
531- ** (二) 代理驱动型**
531+ ** 1.2 代理驱动型**
532532
533533服务器返回 300 Multiple Choices 或者 406 Not Acceptable,客户端从中选出最合适的那个资源。
534534
@@ -758,7 +758,25 @@ HTTP/2.0 要求客户端和服务器同时维护和更新一个包含之前见
758758
759759<div align =" center " > <img src =" ../pics//_u4E0B_u8F7D.png " width =" 600 " /> </div ><br >
760760
761- # 八、GET 和 POST 比较
761+ # 八、HTTP/1.1 新特性
762+
763+ 详细内容请见上文
764+
765+ - 默认是长连接
766+
767+ - 支持管线化处理
768+
769+ - 支持同时打开多个 TCP 连接
770+
771+ - 支持虚拟主机
772+
773+ - 新增状态码 100
774+
775+ - 支持分块传输编码
776+
777+ - 新增缓存处理指令 max-age
778+
779+ # 九、GET 和 POST 比较
762780
763781## 作用
764782
@@ -840,23 +858,6 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404
840858- 在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。
841859- 而 GET 方法 Header 和 Data 会一起发送。
842860
843- # 九、HTTP/1.0 与 HTTP/1.1 的区别
844-
845- 详细内容请见上文
846-
847- - HTTP/1.1 默认是长连接
848-
849- - HTTP/1.1 支持管线化处理
850-
851- - HTTP/1.1 支持同时打开多个 TCP 连接
852-
853- - HTTP/1.1 支持虚拟主机
854-
855- - HTTP/1.1 新增状态码 100
856-
857- - HTTP/1.1 支持分块传输编码
858-
859- - HTTP/1.1 新增缓存处理指令 max-age
860861
861862
862863# 参考资料
0 commit comments