1. 程式人生 > 實用技巧 >Http頭部和狀態碼

Http頭部和狀態碼


URL

由三部分組成:資源型別、存放資源的主機域名、資原始檔名

一般語法格式為:protocol://hostname[:port]/path


HTTP頭域包括:通用頭、請求頭、響應頭和實體頭四部分,

每個頭域由一個域名(大小寫無關)、冒號和域值(前面可以新增任何數量的空格符)三部分組成。

頭域可被擴充套件為多行,在每行開始處,使用至少一個空格或製表符


通用頭域

HTTP通用頭域包含請求和響應訊息都支援的頭域

通用頭域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。對通用頭域的擴充套件要求通訊雙方都支援此擴充套件,如果存在不支援的通用頭域,一般將會作為實體頭域處理。

Date: 表示訊息傳送的時間

Pragma: 包含實現的特定指令,最常用的是Pragma: no-cache,表示禁止快取

Cache-Control: 控制快取的行為

請求頭域

If-Match: 比較ETag是否一致

If-None-Match: 比較ETag是否不一致

If-Modified-Since: 比較資源最後更新的時間是否一致

If-Unmodified-Since: 比較資源最後更新的時間是否不一致

響應頭域

ETag: 資源的匹配資訊


實體頭域包含關於實體的原資訊,實體頭包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header

體頭

Expires:實體主體過期的時間

Last-Modefied: 資源最後一次修改的時間

Content-Type:Content-Type表明資訊型別,預設值為" text/plain"

它包含了主要型別(primary type)和次要型別(subtype)兩個部分,兩者之間用"/"分割。主要型別有9種,分別是application、audio、example、p_w_picpath、message、model、multipart、text、video。每一種主要型別下面又有許多種次要型別,常見的有:

  • text/plain:純文字,副檔名.txt

  • text/html:HTML文字,副檔名.htm和.html

  • p_w_picpath/jpeg:jpeg格式的圖片,副檔名.jpg

  • p_w_picpath/gif:GIF格式的圖片,副檔名.gif

  • audio/x-wave:WAVE格式的音訊,副檔名.wav

  • audio/mpeg:MP3格式的音訊,副檔名.mp3

  • video/mpeg:MPEG格式的視訊,副檔名.mpg

  • application/zip:PK-ZIP格式的壓縮檔案,副檔名.zip

Content-Length:

Content-Encoding:由於傳送的資料可以是任何格式,因此可以把資料壓縮後再發送。Content-Encoding欄位說明資料的壓縮方法。(Content-Encoding: gzip compress deflate)

客戶端在請求時,用Accept-Encoding欄位說明自己可以接受哪些壓縮方法。

(Accept-Encoding: gzip,deflate)



發展

HTTP/0.9:GET 伺服器只能迴應HTML格式的字串,不能迴應別的格式

HTTP/1.0:GET POST HEAD 任何格式都可以傳送,不僅可以傳輸文字,還能傳輸影象、視訊、二進位制檔案

HTTP/1.1:GET POST PUT DELETE PATCH HEAD OPTIONS TRACE(8種)(只有加粗三個方法會包含請求體)

持久連線

管道機制:以前是瀏覽器先發出A請求後等待伺服器做出迴應,收到後在發出B請求,管道則

允許瀏覽器同時發出A請求和B請求,伺服器按照順序先回A請求再回B請求

分塊傳輸編碼:是HTTP中的一種資料傳輸機制,允許HTTP由應用伺服器傳送給客戶端應用

( 通常是網頁瀏覽器)的資料可以分成多個部分。

使用分塊傳輸編碼,資料分解成一系列資料塊,並以一個或多個塊傳送,

這樣伺服器可以傳送資料而不需要預先知道傳送內容的總大小。通常資料

塊的大小是一致的,但也不總是這種情況。

一般情況HTTP的Header包含Content-Length域來指明報文體的長度。

有時候服務生成HTTP迴應是無法確定訊息大小的,比如大檔案的下載,或

者後臺需要複雜的邏輯才能全部處理頁面的請求,這時用需要實時生成消

息長度,伺服器一般使用chunked編碼。在進行Chunked編碼傳輸時,在回

復訊息的Headers有transfer-coding域值為chunked,表示將用chunked編

碼傳輸內容


HTTP分塊傳輸編碼允許伺服器為動態生成的內容維持HTTP持久連線。

分塊傳輸編碼允許伺服器在最後傳送訊息頭欄位。

HTTP伺服器有時使用壓縮 (gzip或deflate)以縮短傳輸花費的時間。

HTTP/2

HTTP/1.1 版的頭資訊肯定是文字(ASCII編碼),資料體可以是文字,也可以是二進

制。HTTP/2 則是一個徹底的二進位制協議,頭資訊和資料體都是二進位制,

並且統稱為"幀"(frame):頭資訊幀和資料幀。


響應訊息和狀態碼

目前HTTP狀態碼主要分為如下幾類:

1xx:資訊響應類,表示接收到請求並且繼續處理

2xx:處理成功響應類,表示動作被成功接收、理解和接受

3xx:重定向響應類,為了完成指定的動作,必須接受進一步處理

4xx:客戶端錯誤,客戶請求包含語法錯誤或者是不能正確執行

5xx:服務端錯誤,伺服器不能正確執行一個正確的請求

wKiom1e9VobS-2tjAAJUWCeoXR8355.png

1XX:

100:客戶端應當繼續傳送請求的剩餘部分,或者如果請求已經完成,忽略這個響應。

101:

102:

2XX:

200:請求已成功,請求所希望的響應頭或資料將隨此響應返回

201:請求已經被實現,而且有一個新的資源已經依據請求的需要而簡歷,且其URL已經隨Location頭資訊返回。

假如需要的資源無法及時建立的話,應當返回‘202 Accepted’

202:伺服器已接受請求,但尚未處理,最終該請求可能會也可能不會被執行(在非同步操作的場合下發送此狀態碼)

返回202狀態碼的目的是允許伺服器接受其他過程的請求

203:伺服器成功處理了請求,但返回的實體頭部元資訊不是在原始伺服器上有效的確定集合

204:伺服器成功處理了請求,但不需要返回任何實體內容,並且希望返回更新了的元資訊

205:伺服器成功處理了請求,且沒有返回任何實體內容

206:伺服器成功處理了部分GET請求

3XX:

300:被請求的資源有一系列可供選擇的回饋資訊,每個都有自己特定的地址和瀏覽器驅動的商議資訊。

使用者或瀏覽器能夠自行選擇一個首選的地址進行重定向

Content-Type定義的格式決定這個實體的格式,瀏覽器也可根據Location值(指明URL)作為自動重定向的地址

301:被請求的資源已經永久移動到新的位置,並且將來任何對此資源的引用都應該使用本響應返回的若干URL之一

302:請求的資源現在臨時從不同的URL響應請求,由於這樣的重定向是臨時的,客戶端應繼續向原有地址傳送以後

的請求

303:對應當前請求的響應可以在另一個URL上被找到,而且客戶端應當採用GET方式訪問那個資源

304:如果客戶端傳送了一個帶條件的GET請求且該請求已被允許,而文件的內容(自上次訪問以來)並沒有改變

該響應禁止包含訊息體

305:被請求的資源必須通過制定的代理才能被訪問

307:

308:

4XX:

400:語義有誤,當前請求無法被伺服器理解;請求引數有誤

401:當前請求需要使用者驗證

402:預留

403:伺服器已理解請求,但是拒絕執行它

404:請求失敗,請求所希望得到的資源未在伺服器上被發現

405:請求行中制定的請求方法不能被用於請求響應的伺服器。必須返回Allow頭資訊表示當前資源能夠接受的請求方

法列表

406:請求的資源內容特性無法滿足請求投中的條件,因而無法生成響應實體

407:與401類似,客戶端必須在代理伺服器上進行身份驗證

408:請求超時。客戶端沒有在伺服器預備等待的時間內完成一個請求的傳送

409:

410:被請求的資源在伺服器上已經不可用,而且沒有任何已知的轉發地址

411:伺服器拒絕在沒有定義Content-Length頭的情況下接受請求

412:伺服器在驗證請求的頭欄位中給出先決條件時,沒能滿足其中的一個或多個

413:伺服器拒絕處理當前請求,因為該請求提交的實體資料大小超過了伺服器願意或者能夠處理的範圍

414:請求的URL長度超過了伺服器能夠解釋的長度

415:對於當前請求的方法和所請求的資源,請求中提交的實體並不是伺服器中所支援的格式

416:

417:

421:從當前客戶端所在的IP地址到伺服器的連線數超過了伺服器許可的最大範圍

422:請求格式正確,但含有語義錯誤

424:

425:

426:

449:

5XX:

500:伺服器遇到了一個未曾預料的狀況,無法完成請求

501:

502:作為閘道器或者代理工作的伺服器嘗試執行請求時,從上游伺服器接受到無效的響應

503:由於臨時的伺服器維護或者過載,無法處理請求

504:作為閘道器或者代理工作的伺服器嘗試執行請求時,未能及時從上游伺服器收到響應

505:伺服器不支援或拒絕支援在請求中使用的HTTP版本

506:

507:伺服器無法儲存完成請求所必須的內容

509:伺服器達到頻寬限制

510:


《內容來自開發者頭條》


轉載於:https://blog.51cto.com/lingdandan/1842060