HTTP(HyperText Transfer Protocol)超文本傳輸協議。其最初的設計目的是爲了提供一種發佈和接收HTML頁面的方法
。 HTTP是一個客戶端(用戶)
和服務端
之間請求和應答的標準。html
Web瀏覽器
或其它軟件工具
,向指定服務器的指定端口(默認端口爲80)
發起一個HTTP請求。 請求獲取該服務器上存儲的一些資源,好比:HTML文件、圖片、文檔 等;HTTP服務器
則在指定端口(默認端口爲80)
監聽客戶端的請求。 一旦收到客戶端請求,服務器會向客戶端返回一個狀態,好比HTTP/1.1 200 OK
;並返回請求內容,如文件、圖片等;或對應請求的錯誤信息。HTTP請求由三部分組成,分別是:請求行、request-header、request-body
android
請求行格式:Method Request-URI HTTP-Version CRLF
請求行舉例:GET /form.html HTTP/1.1 /r/n
web
Method HTTP/1.1協議中共定義了八種Method方法
來以不一樣方式操做指定的資源:json
Method | 方法說明 |
---|---|
GET | 請求獲取由Request-URI所標識的資源 |
POST | 向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件) |
HEAD | 請求獲取由Request-URI所標識的資源的響應消息報頭 |
PUT | 向指定資源位置上傳其最新內容 |
DELETE | 請求服務器刪除由Request-URI所標識的資源 |
TRACE | 請求服務器回送收到的請求信息,主要用語測試或診斷 |
OPTIONS | 這個方法可以使服務器傳回該資源所支持的全部HTTP請求方法。向Web服務器發送OPTIONS請求,能夠測試服務器功能是否正常運做 |
CONNECT | 保留未來使用 |
Request-URI 統一資源標識。例:www.baidu.com/ HTTP-Version HTTP的版本。例:HTTP/1.1
CRLF 回車換行。例:/r/n
瀏覽器
request-header舉例:緩存
mob-token: iammobtokeniammobtokeniammobtoken
User-Agent: Demo_Android
Cookie:
client_i=android#v1.0.0#deviceid#android6.0.1;
client_ursid=xiaxveliang@163.com;
client_urstoken=iamtokeniamtokeniamtoken
Connection: Keep-Alive
Host: demo.com
複製代碼
request-header關鍵詞含義以下表所示:服務器
request-header | 含義說明 | 舉例 |
---|---|---|
User-Agent | User-Agent的內容包含發出請求的用戶信息 | User-Agent: Mozilla/5.0 (Linux; X11) |
Host | 指定請求的服務器的域名和端口號 | Host: www.zcmhi.com |
Cookie | HTTP請求發送時,會把保存在該請求域名下的全部cookie值一塊兒發送給web服務器。 | Cookie: $Version=1; Skin=new; |
Content-Length | 請求的內容長度 | Content-Length: 348 |
Content-Type | 請求的與實體對應的MIME信息 | Content-Type: application/x-www-form-urlencoded |
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: BasicQWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Connection | 表示是否須要持久鏈接。(HTTP 1.1默認進行持久鏈接) | Connection: close |
Date | 請求發送的日期和時間 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
From | 發出請求的用戶的Email | From: user@email.com |
Expect | 請求的特定的服務器行爲 | Expect: 100-continue |
Cache-Control | 指定請求和響應遵循的緩存機制 | Cache-Control: no-cache |
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: www.zcmhi.com/archives/71… |
TE | 客戶端願意接受的傳輸編碼,並通知服務器接受接受尾加頭信息 | TE: trailers,deflate;q=0.5 |
Upgrade | 向服務器指定某種傳輸協議以便服務器進行轉換(若是支持) | Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11 |
Via | 通知中間網關或代理服務器地址,通訊協議 | Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1) |
Warning | 關於消息實體的警告信息 | Warn: 199 Miscellaneous warning |
服務端
處理客戶端
的請求後,會返回一個HTTP響應消息。與HTTP請求相似,HTTP響應也是三個部分組成,分別是: 狀態行、response-header、response-body
。cookie
狀態行格式: HTTP-Version Status-Code Reason-Phrase CRLF
狀態行舉例: HTTP/1.1 200 OK /r/n
網絡
Status-Code狀態碼: 狀態代碼由3位數字組成,表示請求是否被理解或被知足。 狀態代碼的第一個數字定義了響應的類別,後面兩位沒有具體的分類
。app
第一個數字有五種可能的取值:
狀態碼 | 含義 |
---|---|
1xx: | 指示信息—表示請求已接收,繼續處理 |
2xx | 成功—表示請求已經被成功接收、理解、接受 |
3xx | 重定向—要完成請求必須進行更進一步的操做 |
4xx | 客戶端錯誤—請求有語法錯誤或請求沒法實現 |
5xx | 服務器端錯誤—服務器未能實現合法的請求 |
狀態碼舉例:
狀態碼舉例 | 狀態描述 | 詳情說明 |
---|---|---|
200 | OK | 客戶端請求成功 |
400 | Bad Request | 因爲客戶端請求有語法錯誤,不能被服務器所理解。 |
401 | Unauthonzed | 請求未經受權。這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用 |
403 | Forbidden | 服務器收到請求,可是拒絕提供服務。服務器一般會在響應正文中給出不提供服務的緣由 |
404 | Not Found | 請求的資源不存在,例如,輸入了錯誤的URL |
500 | Internal Server Error | 服務器發生不可預期的錯誤,致使沒法完成客戶端的請求 |
503 | Service Unavailable | 服務器當前不可以處理客戶端的請求,在一段時間以後,服務器可能會恢復正常 |
response-header舉例:
Server: xiaxl
Date: Thu, 29 Aug 2019 06:10:55 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: XIAXL=xiaxl; Domain=demo.com; Path=/
複製代碼
response-header關鍵詞含義以下表所示:
response-header | 解釋 | 示例 |
---|---|---|
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 |
Accept-Ranges | 代表服務器是否支持指定範圍請求及哪一種類型的分段請求 | Accept-Ranges: bytes |
Age | 從原始服務器到代理緩存造成的估算時間(以秒計,非負) | Age: 12 |
Allow | 對某網絡資源的有效的請求行爲,不容許則返回405 | Allow: GET, HEAD |
Date | 原始服務器消息發出的時間 | Date: Tue, 15 Nov 2010 08:12:31 GMT |
Cache-Control | 告訴全部的緩存機制是否能夠緩存及哪一種類型 | Cache-Control: no-cache |
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: www.zcmhi.com/archives/94… |
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 get 請求抓包數據以下:
GET /demo/getData.do?deviceId=123&userId=xiaxl HTTP/1.1 // 請求行
mob-token: iammobtokeniammobtokeniammobtoken // request-header
User-Agent: Demo_Android
Cookie:
client_i=android#v1.0.0#deviceid#android6.0.1;
client_ursid=xiaxveliang@163.com;
client_urstoken=iamtokeniamtokeniamtoken
Connection: Keep-Alive
Host: demo.com
複製代碼
http get 響應抓包數據以下:
HTTP/1.1 200 OK // 響應 狀態行
Server: xiaxl // response-header Date: Thu, 29 Aug 2019 06:10:55 GMT Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Set-Cookie: XIAXL=xiaxl; Domain=demo.com; Path=/ {"code":200} // response-body 複製代碼
Http post請求抓包數據以下所示:
POST /demo/postData.do?sign=abc HTTP/1.1 // 請求行
mob-token: iammobtokeniammobtokeniammobtoken // request-header
User-Agent: Demo_Android
Cookie:
client_i=android#v1.0.0#deviceid#android6.0.1;
client_ursid=xiaxveliang@163.com;
client_urstoken=iamtokeniamtokeniamtoken
Content-Length: 371
Content-Type:
application/x-www-form-urlencoded;
charset=utf-8
Connection: Keep-Alive
Host: demo.com
[{"deviceId":"123","userId":"xiaxl"}] // request-body
複製代碼
http post 響應抓包數據以下:
HTTP/1.1 200 OK // 響應 狀態行
Server: xiaxueliang // response-header Date: Thu, 29 Aug 2019 06:09:41 GMT Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Set-Cookie: XIAXL=xiaxl; Domain=demo.com; Path=/ {"code":200} // response-body 複製代碼
Http post文件上傳請求,抓包數據以下所示:
POST /demo/photoUpload.do HTTP/1.1 // 請求行
mob-token: iammobtokeniammobtokeniammobtoken // request-header
User-Agent: Demo_Android
Cookie:
client_i=android#v1.0.0#deviceid#android6.0.1;
client_ursid=xiaxveliang@163.com;
client_urstoken=iamtokeniamtokeniamtoken
Content-Length: 12345
Content-Type:
multipart/form-data;
boundary=f9817fcb-6ad7-4445-9f7b-2ab30578c4ac
Connection: Keep-Alive
Host: demo.com
// body 文件數據 省略... // request-body
複製代碼
Http post文件上傳, 響應抓包數據以下:
HTTP/1.1 200 OK // 響應 狀態行
Server: xiaxl // response-header Date: Thu, 29 Aug 2019 06:10:55 GMT Content-Type: application/json;charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding Set-Cookie: XIAXL=xiaxl; Domain=demo.com; Path=/ {"code":200} // response-body 複製代碼
發現部分知名網站Reponse Header中包含 客戶端IP
查看其Response Header數據
維基百科:超文本傳輸協議 zh.wikipedia.org/wiki/超文本傳輸協…
HTTP請求和MIME介紹 www.cnblogs.com/Dev0ps/p/80…
HTTP Header 詳解 kb.cnblogs.com/page/92320/