http協(xié)議學(xué)習(xí)
Http 協(xié)議學(xué)習(xí)定義: SP代表空格 CR代表回車 即r LF代表換行 即n CRLF代表rn 請求行 消息報(bào)頭 空行(CRLF) 消息體一、請求行請求行組成格式:1、請求方法常用
Http 協(xié)議學(xué)習(xí)
定義: SP代表空格 CR代表回車 即r LF代表換行 即n CRLF代表rn 請求行 消息報(bào)頭 空行(CRLF) 消息體
一、請求行
請求行組成格式:
1、請求方法
常用請求方法有(大寫):
OPTIONS GET HEAD POST PUT DELETE
,OPTIONS 方法:
該方法允許客戶端判斷與某個(gè)資源相關(guān)的選項(xiàng)或需求或者服務(wù)器的能力 (1) 如果Request-URI 不是星號,OPTIONS 請求只應(yīng)用于與該資源通迅時(shí)的 有效選項(xiàng) (2) 如果Request-URI 是星號(“*”),OPTIONS 請求通常試圖應(yīng)用于服 務(wù)器而不是特定的資源。
GET 方法:
GET 方法即獲取由Request-URI 標(biāo)識的任何信息(以實(shí)體的形式)。如果Request-URI 引用某個(gè)數(shù)據(jù)處理過程,則應(yīng)該以它產(chǎn)生的數(shù)據(jù)作為在響應(yīng)中的實(shí)體,而不是該過程的源代碼文本,除非該過程碰巧輸出該文本。
如果請求消息包括If-Modified-Since 、
If-Unmodified-Since , If-MatchIf-None-Match 或者If-Range 頭部域,則GET 方法的語義變?yōu)椤皸l件GET ”。條件GET 方法請只傳輸在條件頭部域描述情形下的實(shí)體。條件GET 方法試圖通過允許刷新緩存的實(shí)體而不需要多次請求或傳輸客戶端已經(jīng)擁有的數(shù)據(jù)來減少非必要的網(wǎng)絡(luò)使用。
如果請求消息包括Range 頭部域,則GET 方法的語義變?yōu)椤熬植縂ET ”。局部GET 請求只需傳輸實(shí)體的某部分.
Head 方法:
除了服務(wù)器不能在響應(yīng)中返回消息體,HEAD 方法與GET 相同。HEAD 請求的響應(yīng)中的HTTP 頭部中包含的元信息應(yīng)該與GET 請求發(fā)送的響應(yīng)中的信息相同。該方法可用來獲取請求暗示實(shí)體的元信息,而不需要傳輸實(shí)體本身。該方法常用來測試超文本鏈接的有效性、可用性和最近的修改。
,POST 方法:
POST 方法用來請求原始服務(wù)器接受請求中封裝的實(shí)體作為從屬于請求行中的Request-URI 標(biāo)識的副屬。
POST 設(shè)計(jì)允許完成下列功能的統(tǒng)一方法: * 上傳消息到論壇、新聞組或相似的討論組; * 向數(shù)據(jù)處理過程提供數(shù)據(jù)塊,如遞交表單的結(jié)果; * 通過追加操作來擴(kuò)展數(shù)據(jù)庫。
PUT 方法:
PUT 方法請求以提供的Request-URI 存儲封裝的實(shí)體。如果Request-URI 引用已經(jīng)存在的資源,該封裝實(shí)體應(yīng)該被認(rèn)作原始服務(wù)器存儲的修改版本。如果Request-URI 沒有指向已存在的資源,且該URI 可以被請求的用戶代理定義為新的資源,則原始服務(wù)器可以用該URI 創(chuàng)建資源。
DELETE 方法:
DELETE 方法請求原始服務(wù)器刪除Request-URI 標(biāo)識的資源。原始服務(wù)器可在人為干涉 下(或其它意思)屏閉該方法
2、Request-URI
Request-URI 是統(tǒng)一資源標(biāo)識符,標(biāo)識應(yīng)用到請求上的資源。
Request-URI = "*" | absoluteURI | abs_path | authority
Request-URI 的4 個(gè)選擇取決于請求的特性。星號“*”意思是請求不應(yīng)用到特定的資源,而是服務(wù)器自己,例如
當(dāng)Request-URI 為*時(shí): OPTIONS * HTTP/1.1 當(dāng)Request-URI 為absoluteURI 時(shí): GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1
,Request-URI 最通用的形式用于標(biāo)識原始服務(wù)器或網(wǎng)關(guān)上的資源。在這種情況下,URI 的絕對路徑為abs_path,URI 的網(wǎng)絡(luò)地址(authority )在Host 頭部域中傳送。
例如,客戶端希望直接從原始服務(wù)器上獲取資源,可以創(chuàng)建端口號80的TCP 連接到主機(jī)“www.w3.org ”并發(fā)送消息行:
GET /pub/WWW/TheProject.html HTTP/1.1 Host: www.w3.org
3、http 版本
常用的的http 版本為 http/1.0 和 http/1.1
二、消息報(bào)頭
報(bào)頭的格式如下: 報(bào)頭域名: 值CRLF 報(bào)頭域名大小寫不敏感 通用報(bào)頭 請求報(bào)頭 實(shí)體報(bào)頭 :后面有一個(gè)空格,報(bào)頭類似于一個(gè)key/value對 每個(gè)報(bào)頭域結(jié)束后有一個(gè)CRLF(rn) 例如: Host: 127.0.0.1:8080 代表服務(wù)器的IP 地址和端口 Note: 可以自定義報(bào)頭域,添加到報(bào)頭中,服務(wù)器會忽略, 如下添加一行自定義的報(bào)頭域到消息報(bào)頭中: invalid: hello world
,1、通用報(bào)頭
常用的通用報(bào)頭有如下幾個(gè):
Cache-Control Connection Date Pragma
Cache-Control報(bào)頭:
Connection報(bào)頭:
用于http/1.1中資源的緩存控制 在http1.1中,client 和server 都是默認(rèn)對方支持長鏈接的, 如果client 使用 http1.1協(xié)議,但又不希望使用長鏈接,則需要在header 中指明connection 的值為close ;如果server 方也不想支持長鏈接,則在response 中也需要明確說明connection 的值為close
Date報(bào)頭:
Pragma報(bào)頭:
取值 no-cache,兼容http/1.0的緩存控制 表示http 的請求或響應(yīng)的生成日期 如: Connection: close
,2、請求報(bào)頭
常用的請求報(bào)頭有如下這些: Accept Accept-Charset Accept-Encoding Accept-Language Host If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since Max-Forwards Proxy-Authorization Range Referer TE User-Agent
,Accept 報(bào)頭: Accept-Charset 報(bào)頭: Accept 域用來指定響應(yīng)可接受的確定媒體類型 例如: Accept: text/html 表示客戶端可接受文本類型文件中的html 類型的文件 表示客戶端可接受的字符集 Accept-Encoding 報(bào)頭:
表示客戶端可接受的編碼內(nèi)容
Accept-Language 報(bào)頭 表示客戶端可接受的語言種類 Host 報(bào)頭 表示web 服務(wù)器的主機(jī)和端口 例如: Host: 127.0.0.1:8080 代表服務(wù)器在本機(jī)的8080端口監(jiān)聽 Host: www.baidu.com 代表服務(wù)器為百度,端口默認(rèn)是80端口 If-Match 報(bào)頭: If-Range 報(bào)頭: If-Range 頭部允許客戶端“短路”第二次請求。非正式地,其意思是,客戶端請求的實(shí)體標(biāo)簽在服務(wù)器中是否匹配 If-Match: entity tag “若實(shí)體沒有修改,給我發(fā)送我缺少的部分,否則,給我發(fā)送完整的新實(shí)體”。
,Max-Forwards 報(bào)頭: 代表請求被代理中轉(zhuǎn)的最大次數(shù),每被中轉(zhuǎn)一次次數(shù)減一。 Range 報(bào)頭: 代表請求實(shí)體的字節(jié)范圍 例如一個(gè)實(shí)體有1000個(gè)字節(jié),則 Range: bytes=0-999 代表請求整個(gè)實(shí)體 Range: bytes=0-99 代表實(shí)體的前100個(gè)字節(jié) Range: bytes=499- 代表實(shí)體的后500個(gè)字節(jié) 可應(yīng)用于斷點(diǎn)續(xù)傳 Referer 報(bào)頭: 當(dāng)瀏覽器向web 服務(wù)器發(fā)送請求的時(shí)候,一般會帶上Referer ,告訴服 務(wù)器我是從哪個(gè)頁面鏈接過來的,服務(wù)器籍此可以獲得一些信息用于處理。比如從我主頁上鏈接到一個(gè)朋友那里,他的服務(wù)器就能夠從HTTP Referer 中統(tǒng)計(jì)出每天有多少用戶點(diǎn)擊我主頁上的鏈接訪問他的網(wǎng)站。 Referer 其實(shí)應(yīng)該是英文單詞Referrer ,不過拼錯(cuò)的人太多了,所以編 寫標(biāo)準(zhǔn)的人也就將錯(cuò)就錯(cuò)了。 TE 報(bào)頭: 可應(yīng)用于防盜鏈 TE 域指出愿意在響應(yīng)中接受任何擴(kuò)展transfer-coding
,3、實(shí)體報(bào)頭
常用的實(shí)體報(bào)頭有如下這些: Allow Content-Encoding Content-Language Content-Length Content-Location Content-MD5 Content-Range Content-Type Expires Last-Modified Allow 報(bào)頭: Allow 域列出由Request-URI 標(biāo)識的資源所支持的方法集。該域的用途是
嚴(yán)格提醒接收方與該資源相關(guān)的有效方法 用法舉例: Content-Range 報(bào)頭: Content-Range entity-header 與部分entity-body 一起發(fā)送,以指定該部分 Allow: GET, HEAD, PUT 主體應(yīng)該應(yīng)用到全部entity-body 的哪個(gè)地方。Range Expires 報(bào)頭: Expires 字段聲明了一個(gè)網(wǎng)頁或URL 地址不再被瀏覽器緩存的時(shí)間,一旦 超過了這個(gè)時(shí)間,瀏覽器就應(yīng)該聯(lián)系原始服務(wù)器
,定義: SP代表空格 CR代表回車 即r LF代表換行 即n CRLF代表rn 響應(yīng)行 消息報(bào)頭 空行(CRLF) 消息體
一 、響應(yīng)行
響應(yīng)行組成格式:
1、http 版本
常用的的http 版本為 http/1.0 和 http/1.1
2、狀態(tài)碼和狀態(tài)碼簡要描述
Status-Code 的首位數(shù)字定義響應(yīng)的類別。最后兩個(gè)數(shù)字沒有任何分類。首位數(shù)字有5個(gè)值:
1xx: 信息性——收到請求,繼續(xù)處理 2xx: 成功性——成功收到、理解并接受行動 3xx: 重定向——必須采取進(jìn)一步行動來完成請求 4xx: 客戶端錯(cuò)誤——請求包含錯(cuò)誤語法或不能完成 5xx: 服務(wù)器錯(cuò)誤——服務(wù)器沒有成功完成顯然有效的請求