http包詳解

位於應用層的http協議
什麼也不多說了,馬上放個圖看看
在這裏插入圖片描述
請求方法,主要是:
get:獲取
post:提交
請求頭:
User-Agent:產生請求的瀏覽器類型。
Accept:客戶端可識別的內容類型列表。
Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機。
Cookie:用戶正在使用的cookie值

抓個包來看看
使用wireshark抓包的request部分如下:

GET /mix/76.html?name=kelvin&password=123456 HTTP/1.1
Host: www.fishbay.cn
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Cookie=...

response,返回相應體:
在這裏插入圖片描述

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 20 Feb 2017 09:13:59 GMT
Content-Type: text/plain;charset=UTF-8
Vary: Accept-Encoding
Cache-Control: no-store
Pragrma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
Content-Encoding: gzip
Transfer-Encoding: chunked
Proxy-Connection: Keep-alive

{"code":200,"notice":0,"follow":0,"forward":0,"msg":0,"comment":0,"pushMsg":null,"friend":{"snsCount":0,"count":0,"celebrityCount":0},"lastPrivateMsg":null,"event":0,"newProgramCount":0,"createDJRadioCount":0,"newTheme":true}

其中,HTTP-Version表示服務器HTTP協議的版本;Status-Code表示服務器發回的響應狀態代碼;Reason-Phrase表示狀態代碼的文本描述。狀態代碼由三位數字組成,第一個數字定義了響應的類別,且有五種可能取值。

1xx:指示信息--表示請求已接收,繼續處理。
2xx:成功--表示請求已被成功接收、理解、接受。
3xx:重定向--要完成請求必須進行更進一步的操作。
4xx:客戶端錯誤--請求有語法錯誤或請求無法實現。
5xx:服務器端錯誤--服務器未能實現合法的請求。

常見狀態代碼、狀態描述的說明如下。

200 OK:客戶端請求成功。
400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解。
401 Unauthorized:請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用。
403 Forbidden:服務器收到請求,但是拒絕提供服務。
404 Not Found:請求資源不存在,舉個例子:輸入了錯誤的URL。
500 Internal Server Error:服務器發生不可預期的錯誤。
503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常,舉個例子:HTTP/1.1 200 OK(CRLF)。

http常用標準請求頭:
Accept 設置接受的內容類型

Accept: text/plain

Accept-Charset 設置接受的字符編碼

Accept-Charset: utf-8

Accept-Encoding 設置接受的編碼格式

Accept-Encoding: gzip, deflate

Accept-Datetime 設置接受的版本時間

Accept-Datetime: Thu, 31 May 2007 20:35:00 GMT

Accept-Language 設置接受的語言

Accept-Language: en-US

Authorization 設置HTTP身份驗證的憑證

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Cache-Control 設置請求響應鏈上所有的緩存機制必須遵守的指令

Cache-Control: no-cache

Connection 設置當前連接和hop-by-hop協議請求字段列表的控制選項

Connection: keep-alive
Connection: Upgrade

Content-Length 設置請求體的字節長度

Content-Length: 348

Content-MD5 設置基於MD5算法對請求體內容進行Base64二進制編碼

Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Type 設置請求體的MIME類型(適用POST和PUT請求)

Content-Type: application/x-www-form-urlencoded

Cookie 設置服務器使用Set-Cookie發送的http cookie

Cookie: $Version=1; Skin=new;

Date 設置消息發送的日期和時間

Date: Tue, 15 Nov 1994 08:12:31 GMT

Expect 標識客戶端需要的特殊瀏覽器行爲

Expect: 100-continue

Forwarded 披露客戶端通過http代理連接web服務的源信息

Forwarded: for=192.0.2.60;proto=http;by=203.0.113.43
Forwarded: for=192.0.2.43, for=198.51.100.17

From 設置發送請求的用戶的email地址

From: [email protected]

Host 設置服務器域名和TCP端口號,如果使用的是服務請求標準端口號,端口號可以省略

Host: en.wikipedia.org:8080
Host: en.wikipedia.org

If-Match 設置客戶端的ETag,當時客戶端ETag和服務器生成的ETag一致才執行,適用於更新自從上次更新之後沒有改變的資源

If-Match: "737060cd8c284d8af7ad3082f209582d

If-Modified-Since 設置更新時間,從更新時間到服務端接受請求這段時間內如果資源沒有改變,允許服務端返回304 Not Modified

If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT

If-None-Match 設置客戶端ETag,如果和服務端接受請求生成的ETage相同,允許服務端返回304 Not Modified

If-None-Match: "737060cd8c284d8af7ad3082f209582d"

If-Range 設置客戶端ETag,如果和服務端接受請求生成的ETage相同,返回缺失的實體部分;否則返回整個新的實體

If-Range: "737060cd8c284d8af7ad3082f209582d"

If-Unmodified-Since 設置更新時間,只有從更新時間到服務端接受請求這段時間內實體沒有改變,服務端纔會發送響應

If-Unmodified-Since: Sat, 29 Oct 1994 19:43:31 GMT

Max-Forwards 限制代理或網關轉發消息的次數

Max-Forwards: 10

Origin 標識跨域資源請求(請求服務端設置Access-Control-Allow-Origin響應字段)

Origin: http://www.example-social-network.com

Pragma 設置特殊實現字段,可能會對請求響應鏈有多種影響

Pragma: no-cache

Proxy-Authorization 爲連接代理授權認證信息

Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Range 請求部分實體,設置請求實體的字節數範圍,具體可以參見HTTP/1.1中的Byte serving

Range: bytes=500-999

Referer 設置前一個頁面的地址,並且前一個頁面中的連接指向當前請求,意思就是如果當前請求是在A頁面中發送的,那麼referer就是A頁面的url地址(軼事:這個單詞正確的拼法應該是"referrer",但是在很多規範中都拼成了"referer",所以這個單詞也就成爲標準用法)

Referer: http://en.wikipedia.org/wiki/Main_Page

TE 設置用戶代理期望接受的傳輸編碼格式,和響應頭中的Transfer-Encoding字段一樣

TE: trailers, deflate

Upgrade 請求服務端升級協議

Upgrade: HTTP/2.0, HTTPS/1.3, IRC/6.9, RTA/x11, websocket

User-Agent 用戶代理的字符串值

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0

Via 通知服務器代理請求

Via: 1.0 fred, 1.1 example.com (Apache/1.1)

Warning 實體可能會發生的問題的通用警告

Warning: 199 Miscellaneous warning

http常用標準響應頭:
Access-Control-Allow-Origin 指定哪些站點可以參與跨站資源共享

Access-Control-Allow-Origin: *

Accept-Patch 指定服務器支持的補丁文檔格式,適用於http的patch方法

Accept-Patch: text/example;charset=utf-8

Accept-Ranges 服務器通過byte serving支持的部分內容範圍類型

Accept-Ranges: bytes

Age 對象在代理緩存中暫存的秒數

Age: 12

Allow 設置特定資源的有效行爲,適用方法不被允許的http 405錯誤

Allow: GET, HEAD

Alt-Svc 服務器使用"Alt-Svc"(Alternative Servicesde的縮寫)頭標識資源可以通過不同的網絡位置或者不同的網絡協議獲取

Alt-Svc: h2="http2.example.com:443"; ma=7200

Cache-Control 告訴服務端到客戶端所有的緩存機制是否可以緩存這個對象,單位是秒

Cache-Control: max-age=3600

Connection 設置當前連接和hop-by-hop協議請求字段列表的控制選項

Connection: close

Content-Disposition 告訴客戶端彈出一個文件下載框,並且可以指定下載文件名

Content-Disposition: attachment; filename="fname.ext"

Content-Encoding 設置數據使用的編碼類型

Content-Encoding: gzip

Content-Language 爲封閉內容設置自然語言或者目標用戶語言

Content-Language: en

Content-Length 響應體的字節長度

Content-Length: 348

Content-Location 設置返回數據的另一個位置

Content-Location: /index.htm

Content-MD5 設置基於MD5算法對響應體內容進行Base64二進制編碼

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 1994 08:12:31 GMT

ETag 特定版本資源的標識符,通常是消息摘要

ETag: "737060cd8c284d8af7ad3082f209582d"

Expires 設置響應體的過期時間

Expires: Thu, 01 Dec 1994 16:00:00 GMT

Last-Modified 設置請求對象最後一次的修改日期

Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT

Link 設置與其他資源的類型關係

Link: </feed>; rel="alternate"

Location 在重定向中或者創建新資源時使用

Location: http://www.w3.org/pub/WWW/People.html

P3P 以P3P:CP="your_compact_policy"的格式設置支持P3P(Platform for Privacy Preferences Project)策略,大部分瀏覽器沒有完全支持P3P策略,許多站點設置假的策略內容欺騙支持P3P策略的瀏覽器以獲取第三方cookie的授權

P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."

Pragma 設置特殊實現字段,可能會對請求響應鏈有多種影響

Pragma: no-cache

Proxy-Authenticate 設置訪問代理的請求權限

Proxy-Authenticate: Basic

Public-Key-Pins 設置站點的授權TLS證書

Public-Key-Pins: max-age=2592000; pin-sha256="E9CZ9INDbd+2eRQozYqqbQ2yXLVKB9+xcprMF+44U1g=";

Refresh "重定向或者新資源創建時使用,在頁面的頭部有個擴展可以實現相似的功能,並且大部分瀏覽器都支持

Refresh: 5; url=http://www.w3.org/pub/WWW/People.html

Retry-After 如果實體暫時不可用,可以設置這個值讓客戶端重試,可以使用時間段(單位是秒)或者HTTP時間

Example 1: Retry-After: 120
Example 2: Retry-After: Fri, 07 Nov 2014 23:59:59 GMT

Server 服務器名稱

Server: Apache/2.4.1 (Unix)

Set-Cookie 設置HTTP Cookie

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

Status 設置HTTP響應狀態

Status: 200 OK

Strict-Transport-Security 一種HSTS策略通知HTTP客戶端緩存HTTPS策略多長時間以及是否應用到子域

Strict-Transport-Security: max-age=16070400; includeSubDomains

Trailer 標識給定的header字段將展示在後續的chunked編碼的消息中

Trailer: Max-Forwards

Transfer-Encoding 設置傳輸實體的編碼格式,目前支持的格式: chunked, compress, deflate, gzip, identity

Transfer-Encoding: chunked

TSV Tracking Status Value,在響應中設置給DNT(do-not-track),可能的取值
   “!” — under construction
   “?” — dynamic
   “G” — gateway to multiple parties
   “N” — not tracking
   “T” — tracking
   “C” — tracking with consent
   “P” — tracking only if consented
   “D” — disregarding DNT
   “U” — updated

TSV: ?

Upgrade 請求客戶端升級協議

Upgrade: HTTP/2.0, HTTPS/1.3, IRC/6.9, RTA/x11, websocket

Vary 通知下級代理如何匹配未來的請求頭已讓其決定緩存的響應是否可用而不是重新從源主機請求新的

Example 1: Vary: *
Example 2: Vary: Accept-Language

Via 通知客戶端代理,通過其要發送什麼響應

Via: 1.0 fred, 1.1 example.com (Apache/1.1)

Warning 實體可能會發生的問題的通用警告

Warning: 199 Miscellaneous warning

WWW-Authenticate 標識訪問請求實體的身份驗證方案

WWW-Authenticate: Basic

X-Frame-Options 點擊劫持保護:
   deny frame中不渲染
   sameorigin 如果源不匹配不渲染
   allow-from 允許指定位置訪問
   allowall 不標準,允許任意位置訪問

X-Frame-Options: deny
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章