轉載自:http://www.cnblogs.com/klguang/p/4618526.html
資源推薦
1.HTTP權威指南。
《HTTP權威指南》由古爾利所著,《HTTP權威指南》詳細解釋了HTTP協議,包括HTTP是如何工作的,如何用HTTP來開發基於Web的應用程序,核心的因特網協議如何與架構構建塊交互,如何正確實現因特網客戶和服務器等。
這個pdf高清無碼的(非掃描版),是我在網上購買的,特來分享。連接如下:
HTTP權威指南下載 http://pan.baidu.com/s/1bnz1dMn
2.網絡基礎系列博客。
http協議分析工具 http://www.cnblogs.com/klguang/p/4624333.html
http報文詳解 http://www.cnblogs.com/klguang/p/4618526.html
URL與資源 http://www.cnblogs.com/klguang/p/4595599.html
http協議概述 http://www.cnblogs.com/klguang/p/4594910.html
報文流
· HTTP 報文是在HTTP 應用程序之間發送的數據塊。這些數據塊以一些文本形式的元信息(meta-information)開頭,這些信息描述了報文的內容及含義,後面跟着可選的數據部分。這些報文在客戶端、服務器和代理之間流動。
· HTTP 使用術語流入(inbound)和流出(outbound)來描述事務處理(transaction)的方向
· 不管是請求報文還是響應報文,所有報文都會向下遊(downstream)流動
報文組成
HTTP 報文的三個部分
· 起始行
報文的第一行就是起始行,在請求報文中用來說明要做些什麼,在響應報文中說明出現了什麼情況。
· 首部字段
起始行後面有零個或多個首部字段。每個首部字段都包含一個名字和一個值,爲了便於解析,兩者之間用冒號(:)來分隔。首部以一個空行結束。添加一個首部字段和添加新行一樣簡單。
· 主體
空行之後就是可選的報文主體了,其中包含了所有類型的數據。請求主體中包括了要發送給Web 服務器的數據;響應主體中裝載了要返回給客戶端的數據。起始行和首部都是文本形式且都是結構化的,而主體則不同,主體中可以包含任意的二進制數據(比如圖片、視頻、音軌、軟件程序)。當然,主體中也可以包含文本。
MIME 類型是一種文本標記,表示一種主要的對象類型和一個特定的子類型,中間由一條斜槓來分隔。
• HTML 格式的文本文檔由 text/html 類型來標記。
•普通的 ASCII 文本文檔由 text/plain 類型來標記。
• JPEG 格式的圖片爲 image/jpeg 類型。
• GIF 格式的圖片爲 image/gif 類型。
• Apple 的 QuickTime 電影爲 video/quicktime 類型。
•微軟的 PowerPoint 演示文件爲 application/vnd.ms-powerpoint 類型。
常見的MIME 類型有數百個,實驗性或用途有限的MIME 類型則更多。
報文的語法
· 這是請求報文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
· 這是響應報文的格式(注意,只有起始行的語法有所不同):
<version> <status> <reason-phrase>
<headers>
<entity-body>
起始行(start line)
a.請求行
請求報文請求服務器對資源進行一些操作。請求報文的起始行,或稱爲請求行,包含了一個方法和一個請求URL,這個方法描述了服務器應該執行的操作,請求URL描述了要對哪個資源執行這個方法。請求行中還包含HTTP 的版本,用來告知服務器,客戶端使用的是哪種HTTP。所有這些字段都由空格符分隔。
例如:POST /infoNewsAction_uploadxheditorfile.action?immediate=1 HTTP/1.1
b.響應行
響應報文承載了狀態信息和操作產生的所有結果數據,將其返回給客戶端。響應報文的起始行,或稱爲響應行,包含了響應報文使用的HTTP 版本、數字狀態碼,以及描述操作狀態的文本形式的原因短語。 所有這些字段都由空格符進行分隔。
例如:HTTP/1.1 200 OK
首部(header)
1.每個HTTP 首部都有一種簡單的語法:名字後面跟着冒號(:),然後跟上可選的空格,再跟上字段值,最後是一個CRLF。(或者換行符)
常見的首部實例
首部實例 |
描述 |
Date:Tue,3Oct 1997 02:16:03 GMT |
服務器產生響應的日期 |
Content-length:15040 |
實體的主體部分包含了15 040 字節的數據 |
Content-type:image/gif |
實體的主體部分是一個GIF 圖片 |
Accept: image/gif, image/jpeg, text/html |
客戶端可以接收GIF 圖片和JPEG 圖片以及HTML |
2. 首部延續行
將長的首部行分爲多行可以提高可讀性,多出來的每行前面至少要有一個空格或製表符(tab)。
HTTP/1.0 200 OK
Content-Type: image/gif
Content-Length: 8572
Server: Test Server
Version 1.0
• 通用首部
這些是客戶端和服務器都可以使用的通用首部。可以在客戶端、服務器和其他應
用程序之間提供一些非常有用的通用功能。比如,Date 首部就是一個通用首部,
每一端都可以用它來說明構建報文的時間和日期:
Date: Tue, 3 Oct 1974 02:16:00 GMT
• 請求首部
從名字中就可以看出,請求首部是請求報文特有的。它們爲服務器提供了一些額
外信息,比如客戶端希望接收什麼類型的數據。例如,下面的Accept 首部就用
來告知服務器客戶端會接受與其請求相符的任意媒體類型:
Accept: */*
Accept首部
首 部 |
描 述 |
Accept |
告訴服務器能夠發送哪些媒體類型 |
Accept-Charset |
告訴服務器能夠發送哪些字符集 |
Accept-Encoding |
告訴服務器能夠發送哪些編碼方式 |
Accept-Language |
告訴服務器能夠發送哪些語言 |
TE11 |
告訴服務器可以使用哪些擴展傳輸編碼 |
安全請求首部
首 部 |
描 述 |
Authorization |
包含了客戶端提供給服務器,以便對其自身進行認證的數據 |
Cookie |
客戶端用它向服務器傳送一個令牌——它並不是真正的安全首部,但確實隱含了安全功能14 |
Cookie2 |
用來說明請求端支持的cookie 版本,參見11.6.7 節 |
• 響應首部
響應報文有自己的首部集,以便爲客戶端提供信息(比如,客戶端在與哪種類型
的服務器進行交互)。例如,下列Server 首部就用來告知客戶端它在與一個版
本1.0 的Tiki-Hut 服務器進行交互:
Server: Tiki-Hut/1.0
• 實體首部
實體首部指的是用於應對實體主體部分的首部。比如,可以用實體首部來說明實
體主體部分的數據類型。例如,可以通過下列Content-Type 首部告知應用程
序,數據是以iso-latin-1 字符集表示的HTML 文檔:
Content-Type: text/html; charset=iso-latin-1
• 內容首部
首 部 |
描 述 |
Content-Encoding |
對主體執行的任意編碼方式 |
Content-Length |
主體的長度或尺寸 |
Content-Type |
這個主體的對象類型 |
• 擴展首部
擴展首部是非標準的首部,由應用程序開發者創建,但還未添加到已批准的
HTTP 規範中去。即使不知道這些擴展首部的含義,HTTP 程序也要接受它們並
對其進行轉發。
方法
常見的http方法
本人最常接觸的方法是HEAD GET POST。
1.GET
通常用於請求服務器發送某個資源。
2.HEAD
HEAD 方法與GET 方法的行爲很類似,但服務器在響應中只返回首部。不會返回實體的主體部分。這就允許客戶端在未獲取實際資源的情況下,對資源的首部進行檢查。
使用HEAD,可以:在不獲取資源的情況下
· 瞭解資源的情況(比如,判斷其類型);
· 通過查看響應中的狀態碼,看看某個對象是否存在;
· 通過查看首部,測試資源是否被修改了。
3.post
通常用於向服務器提交數據。表單提交常常用到post。
狀態碼
100~199——信息性狀態碼
200~299——成功狀態碼
300~399——重定向狀態碼 <p65>
400~499——客戶端錯誤狀態碼
500~599——服務器錯誤狀態碼
參考
1.GET 和 POST 的區別
http://www.cnblogs.com/ldp615/archive/2012/07/27/http-get-post.html