一、HTTP請求
HTTP請求由三部分組成,請求行,消息報頭,請求正文
http請求行以一個方法開頭,以空格開頭,後面跟着URI以及http協議版本,每行結尾使用回車和換行,CRLF標識回車換行
1、請求方法:
GET:請求獲取URI所標識的資源(指定的頁面信息),並返回實體主體。
POST:請求服務器接受所指定的文檔作爲對所標識的URI的新的從屬實體
HEAD:請求獲取由URI所標識的的資源的響應頭信息,只請求頁面的首部。
PUT:從客戶端向服務器傳送的數據取代指定的文檔的內容。
DELETE:請求服務器刪除URI所表示的資源
TRACE:請求服務器在響應中的實體主體部分返回所得到的內容,用於測試或診斷。
PATCH: 實體中包含一個表,表中說明與該URI所表示的原內容的區別。
MOVE: 請求服務器將指定的頁面移至另一個網絡地址。
COPY: 請求服務器將指定的頁面拷貝至另一個網絡地址。
LINK: 請求服務器建立鏈接關係。
UNLINK: 斷開鏈接關係。
WRAPPED: 允許客戶端發送經過封裝的請求。
CONNECT:
OPTIONS: 允許客戶端查看服務器的性能。
eg:GET http://www.baidu.com/ HTTP1.0(CRLF)
2、完整請求實例:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/;q=0.8(CRLF)
Accept-Encoding:gzip, deflate, sdch(CRLF)
Accept-Language:zh-CN,zh;q=0.8(CRLF)
Connection:keep-alive(CRLF)
Cookie:(CRLF)
Host:www.baidu.com(CRLF)
Upgrade-Insecure-Requests:1(CRLF)
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36(CRLF)
二、請求報頭:
允許客戶端向服務器端傳遞附加信息
Accept:請求報頭域用於指定客戶端接收哪些類型的信息。如:Accept:image/gif,text/html
具體一點的類型查看http://tool.oschina.net/commonsAccept-Charset:請求報頭域用於指定客戶端接受的字符集,缺省表示任何字符集都可以接受
Accetpt-Encoding:指定瀏覽器可以支持的web服務器返回內容壓縮編碼類型。如:Accept-Encoding:gzip.deflate
Accept-Language:指定客戶端可以接受的語言。 如:Accept-Language:zh-cn
Authorization:用於證明證明客戶端有權查看某個資源
Cache-Control:指定所有緩存機制在整個 請求/響應鏈中必須服從的指令。
Cache-Control值:
Connection:表示是否需要持久連接,(HTTP1.1默認進行持久連接)。如:Connection:close,Connection:keep-Alive,表示持久連接
Cookie:HTTP請求發送時,會把保存在該請求域名下的所有cookie值一起發給web服務器
Content-Length:請求的內容長度
Content-Type:請求與實體對應的MIME信息
Date:請求發送的時間和日期
Host:指定請求的服務器的域名和端口號
Except:請求特定的服務器行爲
If-Match:請求內容與實體相匹配纔有效
If-Modified-Since:如果請求的部分在指定時間之後被修改則請求成功,未被修改則返回304代碼
Pragma:用來包含特定的指令。如:Pragma: no-cache
Referer:包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面。
User-Agent:允許客戶端將它的操作系統、瀏覽器和其它屬性告訴服務器
三、響應報頭
Location:用於重定向接受者到一個新的位置
Accept-Charset:表明服務器是否支持指定範圍請求及哪種類型的分段請求
Age:從原始服務器到代理緩存形成的估算時間(以秒計,非負
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-Range:在整個返回體中本部分的字節位置。如:Content-Range: bytes 21010-47021/47022
Content-Type:返回內容的MIME類型。如:Content-Type: text/html; charset=utf-8
Date:原始服務器消息發出的時間
Expires:響應過期的日期和時間。
Pragma:包括實現特定的指令,它可應用到響應鏈上的任何接收方。如:Pragma: no-cache
Proxy-Authenticate:它指出認證方案和可應用到代理的該URL上的參數。如:Proxy-Authenticate: Basic
refresh:表示瀏覽器應該在多少時間之後刷新文檔,以秒記。如:response.setHeader(“refresh”,“3”),實現頁面每3s刷新一次;
response.setHeader(“refresh”,“3;url=’/a/index.html’”),實現3s刷新並跳轉到指定的URl
Retry-After:如果實體暫時不可取,通知客戶端在指定時間之後再次嘗試。如:Retry-After: 120
Server:web服務器軟件名稱。如:Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)
Set-Cookie:設置Http Cookie
WWW-Authenticate:表明客戶端請求實體應該使用的授權方案。如:WWW-Authenticate: Basic
四、返回碼大全
1xx消息:請求已被接受,需要繼續處理。HTTP/1.0協議中沒有定義任何1xx狀態碼。
- 100 Continue 客戶端應當繼續發送剩餘請求。
- 101 Switching Protocols 服務器已經理解了客戶端的請求,並將通過Upgrade消息頭通知客戶端採用不同的協議來完成這個請求。
- 102 Processing 處理將被繼續執行。
2xx成功:請求已成功被服務器接收、理解並接受。
- 200 OK 請求已成功,請求所希望的響應頭或數據體將隨此響應返回。
- 201 Created 請求已被實現,且有一個新的資源已經依請求的需要而創建。
- 202 Accepted 服務器已經接受請求,但尚未處理。
- 203 Non-Authoritative Information服務器已經成功處理了請求,但返回的實體頭部元信息不是在原始服務器上有效的確定集合,而是來自本地或者第三方的拷貝。
- 204 No Content 服務器成功處理了請求,但不需要返回任何實體內容,並且希望返回更新了的元信息。
- 205 Reset Content 服務器成功處理了請求,且沒有返回任何內容。與204相應不同,此狀態碼的響應要求請求者重置文檔視圖。
- 206 Partial Content 服務器已成功處理了部分GET請求。可以實現斷點續傳。
- 207 Multi-Status代表之後的消息體將是一個XML消息。
3xx重定向:
- 300 Multiple Choices被請求的資源有一系列可供選擇的回饋信息,用戶自行選擇一個進行重定向。
- 301 Moved Permanently被請求的資源已永久移動到新的位置。
- 302 Found請求的資源現在臨時從不同的URI響應請求。
- 303 See Other對應當前請求的響應可以在另一個URI上被找到而且客戶端應該採用GET方式訪問那個資源。
- 304 Not Modified文檔的內容沒有發生改變。且304響應禁止包含消息體,因此始終以消息頭後第一個空行結尾。
- 305 Use Proxy被請求的資源必須通過指定的代理才能訪問。
- 306 Switch Proxy已棄用
- 307 Temporary Redirect請求的資源現在臨時從不同的URI響應請求。
4xx:客戶端錯誤
- 400 Bad Request請求包含語法錯誤。
- 401 Unauthorized當前請求需要用戶驗證。
- 402 Payment Required保留。
- 403 Forbidden服務器已理解請求,但拒絕執行它。
- 404 Not Found請求所需要的資源爲在服務器上被發現。
- 405 Method Not Allowed請求行中指定的方法不能用於請求相應的資源。
- 406 Not Acceptable請求的資源的內容特性無法滿足請求頭中的條件,因而無法生成響應實體。
- 407 Proxy Authentication Required與401響應類似,只不過客戶端必須在代理服務器上進行身份驗證。
- 408 Request Timeout請求超時。
- 409 Conflict由於被請求的資源的當前狀態之間存在衝突,請求無法完成。
- 410 Gone被請求的資源在服務器上已經不再可用,而且沒有任何已知的轉發地址。
- 411 Length Required服務器拒絕在沒有定義Content-Length頭的情況下接受請求。
- 412 Precondition Failed服務器在驗證在請求的頭字段中給出先決條件時,沒能滿足其中的一個或多個。
- 413 Request Entity Too Large服務器拒絕處理當前請求,因爲該請求提交的實體數據大小超過了服務器願意或者能夠處理的範圍。
- 414 Request-URI Too Long請求的URI長度超過了服務器能夠解釋的長度,因此服務器拒絕對該請求提供服務。
- 415 Unsupported Media Type對於當前請求的方法和所請求的資源,請求中提交的實體並不是服務器中所支持的格式,因此請求被拒絕。
- 416 Requested Range Not Satisfiable如果請求中包含了Range請求頭,並且Range中指定的任何數據範圍都與當前資源的可用範圍不重合,同時請求中又沒有定義If-Range請求頭,那麼服務器就應當返回416狀態碼。
- 417 Expectation Failed在請求頭Expect中指定的預期內容無法被服務器滿足,或者這個服務器是一個代理服務器,它有明顯的證據證明在當前路由的下一個節點上,Expect的內容無法被滿足。
- 418 I’m a teapot
- 421 There are too many connections from your internet address從當前客戶端所在的IP地址到服務器的連接數超過了服務器許可的最大範圍。
- 422 Unprocessable Entity請求格式正確,但是由於含有語義錯誤,無法響應。
- 423 Locked當前資源被鎖定。
- 424 Failed Dependency由於之前的某個請求發生的錯誤,導致當前請求失敗,例如PROPPATCH。
- 425 Unordered Collection
- 426 Upgrade Required客戶端應當切換到TLS/1.0。
- 449 Retry With由微軟擴展,代表請求應當在執行完適當的操作後進行重試。
- 451 Unavailable For Legal Reasons由IETF覈准,代表該訪問因法律的要求而被拒絕。
5xx:服務器錯誤
- 500 Internal Server Error服務器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。
- 501 Not Implemented服務器不支持當前請求所需要的某個功能。**
- 502 Bad Gateway作爲網關或者代理工作的服務器嘗試執行請求時,從上游服務器接收到無效的響應。
- 503 Service Unavailable由於臨時的服務器維護或者過載,服務器當前無法處理請求。
- 504 Gateway Timeout作爲網關或者代理工作的服務器嘗試執行請求時,未能及時從上游服務器(URI標識出的服務器,例如HTTP、FTP、LDAP)或者輔助服務器(例如DNS)收到響應。
- 505 HTTP Version Not Supported服務器不支持,或者拒絕支持在請求中使用的HTTP版本。
- 506 Variant Also Negotiates代表服務器存在內部配置錯誤
- 507 Insufficient Storage服務器無法存儲完成請求所必須的內容。這個狀況被認爲是臨時的。
- 509 Bandwidth Limit Exceeded服務器達到帶寬限制。這不是一個官方的狀態碼,但是仍被廣泛使用。
- 510 Not Extended獲取資源所需要的策略並沒有被滿足。