高性能瀏覽器網絡 --> 第三部分 HTTP --> 第9章 HTTP簡史
HTTP 0.9: 單行協議(The One-Line Protocol)
- 客戶端請求是一個單一的ASCII字符串
- 客戶端請求由一個回車符號結束
- 服務器響應是一個ASCII字符流
- 服務器響應是一個HTML
- 文檔傳輸完成後連接即終止
- C-S,請求響應協議
- ASCII協議,運行在TCP/IP鏈路上
- 用戶傳輸超文本
- 每個請求之後關閉服務器與客戶端之間的連接
一些流行的web服務器,比如Apache, Nginx,仍然部分支持HTTP 0.9協議,因爲與現在的版本相比沒有多大不同!你可以打開一個Telnet會話並試着通過HTTP 0.9 訪問google.com,或者你喜歡的站點,以堅持這一早期協議的行爲和限制。
HTTP 1.0: 快速增長以及非正式RFC(Rapid Growth and Informational RFC)
- 請求可能包括多行,每一行是一個頭域
- 響應對象以一個響應狀態行開始
- 響應對象有它自己的由換行符分割的頭域
- 響應對象不只限於超文本
- 在每個請求之後端口服務器與客戶端連接
HTTP 1.1:因特網標準
$> telnet website.org 80 Connected to xxx.xxx.xxx.xxx GET /index.html HTTP/1.1 Host: website.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4)... (snip) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: __qca=P0-800083390... (snip) HTTP/1.1 200 OK Server: nginx/1.0.11 Connection: keep-alive Content-Type: text/html; charset=utf-8 Via: HTTP/1.1 GWA Date: Wed, 25 Jul 2012 20:23:35 GMT Expires: Wed, 25 Jul 2012 20:23:35 GMT Cache-Control: max-age=0, no-cache Transfer-Encoding: chunked 100 <!doctype html> (snip) 100 (snip) 0 GET /favicon.ico HTTP/1.1 Host: www.website.org User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4)... (snip) Accept: */* Referer: http://website.org/ Connection: close Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 Cookie: __qca=P0-800083390... (snip) HTTP/1.1 200 OK Server: nginx/1.0.11 Content-Type: image/x-icon Content-Length: 3638 Connection: close Last-Modified: Thu, 19 Jul 2012 17:51:44 GMT Cache-Control: max-age=315360000 Accept-Ranges: bytes Via: HTTP/1.1 GWA Date: Sat, 21 Jul 2012 21:35:22 GMT Expires: Thu, 31 Dec 2037 23:55:55 GMT Etag: W/PSA-GAu26oXbDi (icon data) (connection closed)
請求HTML文件, 並指明編碼,字符集以及cookie元數據 |
以Chunked方式響應之前的HTML請求 |
|
一個16進制字符數字表示的chuank字節數 |
|
chunked流響應結束 |
|
通過同一個TCP連接請求一個icon文件 |
|
通知服務器不重用連接 |
|
響應icon文件,接着關閉連接 |
HTTP 1.1改變了HTTP協議的語義,默認使用連接keepalive。意思是,除非說明(通過Connection:close頭),服務器應該默認保持連接打開。然而,這個功能是向後兼容HTTP 1.0的,即通過Connection: Keep-Alive頭。因此,如果你正在使用HTTP 1.1,技術上你不需要Connection: Keep-Alive頭,儘管如此,許多客戶端仍然選擇提供它。
原文:http://chimera.labs.oreilly.com/books/1230000000545/ch09.html