24
24
* [ 响应首部字段] ( #响应首部字段 )
25
25
* [ 实体首部字段] ( #实体首部字段 )
26
26
* [ 五、具体应用] ( #五具体应用 )
27
+ * [ 连接管理] ( #连接管理 )
27
28
* [ Cookie] ( #cookie )
28
29
* [ 缓存] ( #缓存 )
29
- * [ 连接管理] ( #连接管理 )
30
30
* [ 内容协商] ( #内容协商 )
31
31
* [ 内容编码] ( #内容编码 )
32
32
* [ 范围请求] ( #范围请求 )
44
44
* [ 二进制分帧层] ( #二进制分帧层 )
45
45
* [ 服务端推送] ( #服务端推送 )
46
46
* [ 首部压缩] ( #首部压缩 )
47
- * [ 八、GET 和 POST 比较] ( #八get-和-post-比较 )
47
+ * [ 八、HTTP/1.1 新特性] ( #八http11-新特性 )
48
+ * [ 九、GET 和 POST 比较] ( #九get-和-post-比较 )
48
49
* [ 作用] ( #作用 )
49
50
* [ 参数] ( #参数 )
50
51
* [ 安全] ( #安全 )
51
52
* [ 幂等性] ( #幂等性 )
52
53
* [ 可缓存] ( #可缓存 )
53
54
* [ XMLHttpRequest] ( #xmlhttprequest )
54
- * [ 九、HTTP/1.0 与 HTTP/1.1 的区别] ( #九http10-与-http11-的区别 )
55
55
* [ 参考资料] ( #参考资料 )
56
56
<!-- GFM-TOC -->
57
57
@@ -102,7 +102,7 @@ URI 包含 URL 和 URN,目前 WEB 只有 URL 比较流行,所以见到的基
102
102
103
103
POST 主要用来传输数据,而 GET 主要用来获取资源。
104
104
105
- 更多 POST 与 GET 的比较请见第八章 。
105
+ 更多 POST 与 GET 的比较请见第九章 。
106
106
107
107
## PUT
108
108
@@ -303,6 +303,25 @@ CONNECT www.example.com:443 HTTP/1.1
303
303
304
304
# 五、具体应用
305
305
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
+
306
325
## Cookie
307
326
308
327
HTTP 协议是无状态的,主要是为了让 HTTP 协议尽可能简单,使得它能够处理大量事务。HTTP/1.1 引入 Cookie 来保存状态信息。
@@ -420,23 +439,23 @@ Session 可以存储在服务器上的文件、数据库或者内存中。也可
420
439
421
440
HTTP/1.1 通过 Cache-Control 首部字段来控制缓存。
422
441
423
- ** (一) 禁止进行缓存**
442
+ ** 3.1 禁止进行缓存**
424
443
425
444
no-store 指令规定不能对请求或响应的任何一部分进行缓存。
426
445
427
446
``` html
428
447
Cache-Control: no-store
429
448
```
430
449
431
- ** (二) 强制确认缓存**
450
+ ** 3.2 强制确认缓存**
432
451
433
452
no-cache 指令规定缓存服务器需要先向源服务器验证缓存资源的有效性,只有当缓存资源有效才将能使用该缓存对客户端的请求进行响应。
434
453
435
454
``` html
436
455
Cache-Control: no-cache
437
456
```
438
457
439
- ** (三) 私有缓存和公共缓存**
458
+ ** 3.3 私有缓存和公共缓存**
440
459
441
460
private 指令规定了将资源作为私有缓存,只能被单独用户所使用,一般存储在用户浏览器中。
442
461
@@ -450,7 +469,7 @@ public 指令规定了将资源作为公共缓存,可以被多个用户所使
450
469
Cache-Control: public
451
470
```
452
471
453
- ** (四) 缓存过期机制**
472
+ ** 3.4 缓存过期机制**
454
473
455
474
max-age 指令出现在请求报文中,并且缓存资源的缓存时间小于该指令指定的时间,那么就能接受该缓存。
456
475
@@ -493,32 +512,13 @@ Last-Modified: Wed, 21 Oct 2015 07:28:00 GMT
493
512
If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
494
513
```
495
514
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
-
515
515
## 内容协商
516
516
517
517
通过内容协商返回最合适的内容,例如根据浏览器的默认语言选择返回中文界面还是英文界面。
518
518
519
519
### 1. 类型
520
520
521
- ** (一) 服务端驱动型**
521
+ ** 1.1 服务端驱动型**
522
522
523
523
客户端设置特定的 HTTP 首部字段,例如 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Languag,服务器根据这些字段返回特定的资源。
524
524
@@ -528,7 +528,7 @@ If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
528
528
- 客户端提供的信息相当冗长(HTTP/2 协议的首部压缩机制缓解了这个问题),并且存在隐私风险(HTTP 指纹识别技术);
529
529
- 给定的资源需要返回不同的展现形式,共享缓存的效率会降低,而服务器端的实现会越来越复杂。
530
530
531
- ** (二) 代理驱动型**
531
+ ** 1.2 代理驱动型**
532
532
533
533
服务器返回 300 Multiple Choices 或者 406 Not Acceptable,客户端从中选出最合适的那个资源。
534
534
@@ -758,7 +758,25 @@ HTTP/2.0 要求客户端和服务器同时维护和更新一个包含之前见
758
758
759
759
<div align =" center " > <img src =" ../pics//_u4E0B_u8F7D.png " width =" 600 " /> </div ><br >
760
760
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 比较
762
780
763
781
## 作用
764
782
@@ -840,23 +858,6 @@ DELETE /idX/delete HTTP/1.1 -> Returns 404
840
858
- 在使用 XMLHttpRequest 的 POST 方法时,浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。
841
859
- 而 GET 方法 Header 和 Data 会一起发送。
842
860
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
860
861
861
862
862
863
# 参考资料
0 commit comments