標籤:oca 成功 password 字元 完整 通訊 接受 pac from
前言:
之前買過一本《圖解 HTTP》這本書,作者好像是個小日本,也繼承了小日本在動漫方面的天賦,30% 的內容都是 Q 版畫圖。 之後沒有引起我的重視,書一借出去,然後,之後 .. 之後,就沒有了之後了。 先簡單瞭解一下 Web 相關的知識,現在市面上所有的瀏覽器以及伺服器都是採用的 HTTP 1.1 版本,HTTP 2.0 很快也要普及了。 其實很多瀏覽器已經支援到 2.0 了。https://www.zhihu.com/question/34074946 一、HTTP 協議基礎 Web 使用一種超文本傳輸(無狀態?)協議作為規範,完成用戶端等一系列的運作流程。而協議是指流程的規定。可以說,Web 是建立在 HTTP 協議上通訊的。 在電腦通訊中,HTTP 協議屬於應用程式層,傳輸層還是採用的 TCP/IP 來實現,在這個基礎上,還需要瞭解一下知識就是 DNS。 粗暴了類比一個在瀏覽器中輸入一個 www.baidu.com 所有經過的事情: 1、瀏覽器擷取到使用者在地址欄輸入的網域名稱後,瀏覽器將本機基本資料、瀏覽器基本資料等組成 HTTP 要求包; 2、瀏覽器將 HTTP 要求包,請求到目標網域名稱,作業系統網路通訊模組將網域名稱轉換為 IP 位址;(Windows、DNS) 3、Web 服務器擷取到用戶端請求的資訊後(與伺服器的網路層通訊跳過),做出相應的操作後返回用戶端一組資料(HTTP 標準資料) 4、瀏覽器開始解析 Web 服務器響應的 HTTP 響應內容包,將內容部分(符合 W3C 規範)解析並渲染成使用者看到的效果; HTTP通訊機制是在一次完整的HTTP通訊過程中,Web瀏覽器與Web伺服器之間將完成下列7個步驟: (1)建立TCP串連 在HTTP工作開始之前,Web瀏覽器首先要通過網路與Web伺服器建立串連,該串連是通過TCP來完成的, 該協議與IP協議共同構建Internet,即著名的 TCP/IP 協議族,因此Internet又被稱作是TCP/IP網路。 HTTP是比TCP更高層次的應用程式層協議,根據規則,只有低層協議建立之後才能,才能進行更層協議的串連, 因此,首先要建立TCP串連,一般TCP串連的連接埠號碼是 80 (2)Web瀏覽器向Web伺服器發送請求命令 一旦建立了TCP串連,Web瀏覽器就會向Web伺服器發送請求命令 例如:GET/sample/hello.jsp HTTP/1.1 (3)Web瀏覽器發送要求標頭資訊 瀏覽器發送其請求命令之後,還要以頭資訊的形式向Web伺服器發送一些別的資訊, 之後瀏覽器發送了一空白行來通知伺服器,它已經結束了該頭資訊的發送。 (4)Web伺服器應答 客戶機向伺服器發出請求後,伺服器會客戶機回送應答, HTTP/1.1 200 OK 應答的第一部分是協議的版本號碼和應答狀態代碼 (5)Web伺服器發送應答頭資訊 正如用戶端會隨同請求發送關於自身的資訊一樣,伺服器也會隨同應答向使用者發送關於它自己的資料及被請求的文檔。 (6)Web伺服器向瀏覽器發送資料 Web伺服器向瀏覽器發送頭資訊後,它會發送一個空白行來表示頭資訊的發送到此為結束, 接著,它就以Content-Type應答頭資訊所描述的格式發送使用者所請求的實際資料 (7)Web伺服器關閉TCP串連 一般情況下,一旦Web伺服器向瀏覽器發送了請求資料,它就要關閉TCP串連,然後如果瀏覽器或者伺服器在其頭資訊加入了這行代碼 Connection:keep-alive TCP 串連在發送後將仍然保持開啟狀態,於是,瀏覽器可以繼續通過相同的串連發送請求。 保持串連節省了為每個請求建立新串連所需的時間,還節約了網路頻寬。 二、HTTP Request HTTP請求格式 當瀏覽器向Web伺服器發出請求時,它向伺服器傳遞了一個資料區塊,也就是請求資訊,HTTP請求資訊由3部分組成: l 要求方法URI協議/版本 l 要求標頭(Request Header) l 請求本文 下面是一個HTTP請求的例子: [ 要求方法URI協議/版本 ] GET/sample.jspHTTP/1.1 [ 要求標頭 ] Accept:image/gif.image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:localhost User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0) Accept-Encoding:gzip,deflate [ 請求本文 ] username=jinqiao&password=1234 三、HTTP Reponse HTTP應答與HTTP請求相似,HTTP響應也由3個部分構成,分別是: l 協議狀態版本代碼描述 l 回應標頭(Response Header) l 響應本文 下面是一個HTTP響應的例子: [ 協議狀態版本代碼描述 ] HTTP/1.1 200 OK [ 回應標頭 ] Server:Apache Tomcat/5.0.12 Date:Mon,6Oct2003 13:23:42 GMT Content-Length:112 [ 響應本文 ] <html>
<head> <title>HTTP響應樣本<title> </head> <body> Hello HTTP! </body> </html> 常見 HTTP 狀態代碼: HTTP Reponse Code: 301 永久重新導向,一般作用於 baidu.com -> www.baidu.com 302 臨時重新導向,跳轉了新的 URI 地址,SEO 友好度差 400 響應內容錯誤,瀏覽器無法解析響應體的內容 403 請求的內容被服務拒絕,可能存在許可權問題 404 伺服器上未找到改連結指向的地址 500 伺服器執行請求時發生了錯誤 503 伺服器超負債或,簡稱掛了 HTTP Request Header
要求標頭
Header |
解釋 |
樣本 |
Accept |
指定用戶端能夠接收的內容類型 |
Accept: text/plain, text/html |
Accept-Charset |
瀏覽器可以接受的字元編碼集。 |
Accept-Charset: iso-8859-5 |
Accept-Encoding |
指定瀏覽器可以支援的web伺服器返回內容壓縮編碼類別型。 |
Accept-Encoding: compress, gzip |
Accept-Language |
瀏覽器可接受的語言 |
Accept-Language: en,zh |
Accept-Ranges |
可以請求網頁實體的一個或者多個子範圍欄位 |
Accept-Ranges: bytes |
Authorization |
HTTP授權的授權認證 |
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control |
指定請求和響應遵循的緩衝機制 |
Cache-Control: no-cache |
Connection |
表示是否需要持久串連。(HTTP 1.1預設進行持久串連) |
Connection: close |
Cookie |
HTTP請求發送時,會把儲存在該請求網域名稱下的所有cookie值一起發送給web伺服器。 |
Cookie: $Version=1; Skin=new; |
Content-Length |
請求的內容長度 |
Content-Length: 348 |
Content-Type |
請求的與實體對應的MIME資訊 |
Content-Type: application/x-www-form-urlencoded |
Date |
請求發送的日期和時間 |
Date: Tue, 15 Nov 2010 08:12:31 GMT |
Expect |
請求的特定的伺服器行為 |
Expect: 100-continue |
From |
發出請求的使用者的Email |
From: [email protected] |
Host |
指定請求的伺服器的網域名稱和連接埠號碼 |
Host: www.zcmhi.com |
If-Match |
只有請求內容與實體相匹配才有效 |
If-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Modified-Since |
如果請求的部分在指定時間之後被修改則請求成功,未被修改則返回304代碼 |
If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
If-None-Match |
如果內容未改變返回304代碼,參數為伺服器先前發送的Etag,與伺服器回應的Etag比較判斷是否改變 |
If-None-Match: “737060cd8c284d8af7ad3082f209582d” |
If-Range |
如果實體未改變,伺服器發送用戶端丟失的部分,否則發送整個實體。參數也為Etag |
If-Range: “737060cd8c284d8af7ad3082f209582d” |
If-Unmodified-Since |
只在實體在指定時間之後未被修改才請求成功 |
If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT |
Max-Forwards |
限制資訊通過代理和網關傳送的時間 |
Max-Forwards: 10 |
Pragma |
用來包含實現特定的指令 |
Pragma: no-cache |
Proxy-Authorization |
串連到代理的授權認證 |
Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Range |
只請求實體的一部分,指定範圍 |
Range: bytes=500-999 |
Referer |
先前網頁的地址,當前請求網頁緊隨其後,即來路 |
Referer: http://www.zcmhi.com/archives/71.html |
TE |
用戶端願意接受的傳輸編碼,並通知伺服器接受接受尾加頭資訊 |
TE: trailers,deflate;q=0.5 |
Upgrade |
向伺服器指定某種傳輸協議以便伺服器進行轉換(如果支援) |
Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
User-Agent |
User-Agent的內容包含發出請求的使用者資訊 |
User-Agent: Mozilla/5.0 (Linux; X11) |
Via |
通知中間網關或Proxy 伺服器地址,通訊協定 |
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning |
關於訊息實體的警告資訊 |
Warn: 199 Miscellaneous warning |
HTTP Responses Header
回應標頭
Header |
解釋 |
樣本 |
Accept-Ranges |
表明伺服器是否支援指定範圍請求及哪種類型的分段請求 |
Accept-Ranges: bytes |
Age |
從原始伺服器到代理緩衝形成的估算時間(以秒計,非負) |
Age: 12 |
Allow |
對某網路資源的有效請求行為,不允許則返回405 |
Allow: GET, HEAD |
Cache-Control |
告訴所有的緩衝機制是否可以緩衝及哪種類型 |
Cache-Control: no-cache |
Content-Encoding |
web伺服器支援的返回內容壓縮編碼類別型。 |
Content-Encoding: gzip |
Content-Language |
響應體的語言 |
Content-Language: en,zh |
Content-Length |
響應體的長度 |
Content-Length: 348 |
Content-Location |
請求資源可替代的備用的另一地址 |
Content-Location: /index.htm |
Content-MD5 |
返回資源的MD5校正值 |
Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ== |
Content-Range |
在整個返回體中本部分的位元組位置 |
Content-Range: bytes 21010-47021/47022 |
Content-Type |
返回內容的MIME類型 |
Content-Type: text/html; charset=utf-8 |
Date |
原始伺服器訊息發出的時間 |
Date: Tue, 15 Nov 2010 08:12:31 GMT |
ETag |
請求變數的實體標籤的當前值 |
ETag: “737060cd8c284d8af7ad3082f209582d” |
Expires |
響應到期的日期和時間 |
Expires: Thu, 01 Dec 2010 16:00:00 GMT |
Last-Modified |
請求資源的最後修改時間 |
Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT |
Location |
用來重新導向接收方到非請求URL的位置來完成請求或標識新的資源 |
Location: http://www.zcmhi.com/archives/94.html |
Pragma |
包括實現特定的指令,它可應用到響應鏈上的任何接收方 |
Pragma: no-cache |
Proxy-Authenticate |
它指出認證方案和可應用到代理的該URL上的參數 |
Proxy-Authenticate: Basic |
refresh |
應用於重新導向或一個新的資源被創造,在5秒之後重新導向(由網景提出,被大部分瀏覽器支援) |
Refresh: 5; url=http://www.zcmhi.com/archives/94.html |
Retry-After |
如果實體暫時不可取,通知用戶端在指定時間之後再次嘗試 |
Retry-After: 120 |
Server |
web伺服器軟體名稱 |
Server: Apache/1.3.27 (Unix) (Red-Hat/Linux) |
Set-Cookie |
設定Http Cookie |
Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 |
Trailer |
指出頭域在分塊傳輸編碼的尾部存在 |
Trailer: Max-Forwards |
Transfer-Encoding |
檔案傳輸編碼 |
Transfer-Encoding:chunked |
Vary |
告訴下遊代理是使用緩衝響應還是從原始伺服器請求 |
Vary: * |
Via |
告知代理用戶端響應是通過哪裡發送的 |
Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning |
警告實體可能存在的問題 |
Warning: 199 Miscellaneous warning |
WWW-Authenticate |
表明用戶端請求實體應該使用的授權方案 |
WWW-Authenticate: Basic |
部分內容轉載自:http://tools.jb51.net/table/http_headerhttp://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html
HTTP 協議詳解