這次的這篇文章跟大家分享了一些關於http協議前端常識問題,有興趣的朋友可以看看
#http
#介紹- :http基於tcp/ip通訊來傳遞資料注意事項
http是無連線:每次連線只處理一個請求,伺服器處理完請求後,並收到客戶端的回應後,即斷開連線;
http媒體是獨立的:只要客戶端和伺服器端知道如何處理資料類型,任何資料都可以用http傳送;
http無狀態:無狀態是指協議對於事物處理沒記憶能力;
2.http回應:狀態列、訊息標頭、空白行、回應正文
http請求方法
|
http1.0:get、post和head |
http1.1新增五種請求方式: delete、put、connect、 tarce和options
|
|
方法 | 描述 |
| get | #向特定資源發起請求
| post | 向指定資源提交資料進行資料處理。資料包含在請求體中,post請求可能用於新的資源的建立以及已有資源的修改
| #head | 類似與get請求,只不過沒有返回體,用於取得包含在回應訊息標頭中的元資訊
| put | #向指定資源上傳最新內容
| #delete | 請求伺服器刪除指定資源
| trace | 回顯伺服器收到的請求,主要用於測試或診斷
connect
http1.1中預留給能夠將連線改為管道方式的代理伺服器
options傳回伺服器對特定資源支援的http方法,用來向伺服器發送'*'的請求來測試伺服器的功能性
常見首部欄位意義介紹 |
首部和方法配合工作,共同決定客戶端和服務端能做什麼事情 |
通用首部
客戶端和服務端都可以使用的首部 |
|
首部 | 描述 |
| Connection | #允許用戶端與服務端指定與請求/回應連結相關的選項
| Date | 提供日期和時間標誌,說明訊息是什麼時間建立的
| MIME-Version | 給予傳送給端MIME版本
| Trailer | 如果封包傳輸採用分塊傳輸(chunked transfer encoding)方式,就可以用這個首部列出位於封包拖曳部分的首部集合
| Transfer-Encoding | #告訴接受端為了確保報文的可靠傳輸,對報文採用了什麼編碼方式
###Update######給出了發送端可能想要「升級」使用新版或協議############Via######顯示封包經過的中間節點(代理程式、網關)############
請求首部
請求報文特有的,為伺服器提供一些額外的信息,例如客戶端希望接收到什麼樣的資料類型
請求的資訊性首部
首部 |
描述 |
Client-Ip | 提供執行客戶端機器的IP位址 |
From |
提供客戶端使用者的E-mail位址 |
Host |
給出接收請求伺服器的位址和連接埠號碼 |
Referer |
提供包含目前請求URL的文件的URL |
UA-color |
提供客戶端顯示器的顯示顏色相關的資訊 |
UA-CPU |
#給出客戶端CPU類型和製造商 |
UA-Disp |
提供了客戶端顯示器能力相關的資訊 |
##UA -OS | 提供客客戶機器上運行的作業系統和版本 |
UA-Pixels | #提供了客戶端顯示器的像素資訊 |
User-Agent | 將發送請求的應用程式名稱告知伺服器 |
Accept首部
首部 | 描述 |
#Accept | 告訴伺服器能夠傳送哪些媒體類型 |
Accept-Charset | 告訴伺服器能夠發送哪些字元集 |
Accept-Encoding | 告訴伺服器能夠發送哪些編碼方式 |
Accept-Language | #告訴伺服器能夠傳送哪些語言 |
##TE
告訴伺服器可以使用哪些擴充傳輸編碼 |
|
條件請求首部
首部
描述 |
|
Expect
允許客戶端列出請求所要求的伺服器行為 |
| ##If -Match
如果實體標記與文件目前的實體標記相匹配,就取得這份文件 |
| If-Modify-Since
除非在某個指定的日期之後資源被修改過,否則就限制這個請求 |
| If-None-Match
如果實體標記與文檔當前的實體不相符,就取得文件 |
| If-Range
允許對文件的某個範圍就行條件請求 |
##If-Unmodified- Since |
除非在某個指定日期之後資源沒有被修改過,否則就限制這個請求
|
#Range |
如果伺服器支援範圍請求,就請求資源的指定範圍
|
| 安全請求受首部
首部
描述
|
|
Authorization
包含了用戶端提供給伺服器,以便對其自身進行資料驗證
|
Cookie |
客戶端用它想要服務端發送一個令牌--它不是真正的安全首部,確實隱含了安全功能
|
Cookie2 |
用來說明請求端支援的Cookie版本
|
| 代理程式請求首部
首部
描述
|
|
Max-Forward
在通往伺服器的的路徑上,將請求轉給其他代理程式或網關的最大次數--與TARCE方法一起使用
|
Proxy-Authorization |
與Authorization首部相同,但這個首部是在與代理進行認證時使用的
|
Proxy-Connection |
與Connection首部相同,但這個首部是與代理建立連線時所使用的
|
回應首部
回應訊息有自己的首部集,以遍為客服端提供資訊
回應的資訊性首部
首部 |
描述 |
#Age |
(從最初建立開始)回應持續時間 |
Publick |
伺服器為其資源支援的請求方法清單 |
##Retry-After | 如果資源不可用的話,在此日期或時間重試 |
Server | 伺服器應用程式軟體的名稱和版本 |
#Title | 對於html文件來說,就是HTML文件的來源端給出的標題 |
Wraning | 比原因短語中,更詳細的警告封包 |
協商首部
首部 | 描述 |
Accept-Ranges | 對此資源來說,伺服器可接受的資料型別 |
Vary | 伺服器查看其他首部列表,可能會使回應發生變化;也就是說,這是一個首部列表,伺服器會根據這些首部的內容挑選出最合適的資源版本發送給客戶端 |
安全回應首部
首部 | 描述 |
Proxy-Authenticate | 來自代理程式對客戶端的質詢清單 |
Set-Cookie | 不是真正的安全首部,但隱含安全功能;可以在客戶端設定一個安全性令牌,以遍服務端對客戶端進行標誌 |
#Set-Cookie2 | 與Set-Cookie類似 |
WWW-Authenticate | 來自伺服器對客戶端的質詢清單 |
##實體首部
|
| #實體首部用於實體主體部分的首部
內容首部
|
| 首部 ##描述
|
|
Content-Base
解析主體中相對URL時所使用的基礎URL |
|
Content-Enconding
#對主題執行的任意編碼方式 |
|
Content-Language
理解主體時最適合使用的自然語言 |
|
Content-Length
主體的長度或尺寸 |
|
Content-Location
資源實體的位置 |
|
|
|
#Content-MD5主體的MD5校驗和
- #Content-Range
在整個資源中此實體表示的資源範圍
Content-Type
這個主題的物件類型
|
| 實體快取首部 |
首部
描述 |
|
|
#ETag
與此實體相關的實體標記 |
|
Expires |
實體不在有效,要從原始的來源端再次取得此實體的日期和時間
######Last- Modified######這個實體最後一次被修改的日期和時間################狀態嗎#########狀態碼為客戶端提供一種理解事務處理結果的捷徑##################100-199###: 資訊性狀態碼############# ########狀態碼######原因片語######意思##################100###### Continue######說明收到了客戶端的請求初始部分,請客戶端繼續。發送這個狀態碼後,服務端在收到請求後必須進行回應############101######Switching Protocols######說明伺服器端正在根據客戶端的指定,將協定切換為Update首部所列的協定############
#當客戶端傳送請求時,這些請求通常都是成功的
狀態碼 |
原因片語 |
意思 |
#200 |
OK |
請求沒有問題,實體的主體部分包含請求的資源 |
201 |
Created |
用於建立伺服器的物件請求(例如PUT),在回應的實體部分中應該包含各種引用了以創建的資源的URL,Location首部包含的則是最具體的引用,伺服器必須在發送這個狀態之前會建立好物件 |
202 |
Accepted |
請求已接受,但伺服器尚未對其執行任何操作。不能保證伺服器會完成這個請求,只是意味著接受請求時,它看起來是有效的。伺服器應該在實體的主體部分包含對請求狀態的描述,或許也應該對請求完成時間的估計(或包含一個指針,指向可以取得此資訊的位置) |
##203 | Non-Authoritative Information | 實體首部包含的資訊不是來自於來源伺服器,而是來自資源的副本。如果中間節點上有一份資源副本,但無法或沒有對它所發送的資源有關的元資訊(首部)進行驗證,就會出現這種情況 |
204 | No Content | 在回應封包中包含若干首部和一個狀態行,但沒有實體的主體部分。主要用於瀏覽器不轉為新文件的情況下,對其進行更新(例如刷新一個表達頁面) |
#205 | Reset Content | 另一個主要用於瀏覽器的程式碼。負責告訴瀏覽器清除目前頁面中的所有html標籤 |
206 | Partail Content | 成功執行一個部分或Range請求。稍後我們會看到,客戶端可以透過一些特殊的首部來取得部分或範圍內的文件--這個狀態碼就說明範圍請求成功回應中必須包含Content-Range、Date和ETag或者Content-Location首部
|
|
|
|
################################################################# ##
#重定向狀態碼要麼告知客戶端使用替代位置來存取它們感興趣的資源,要么提供一個可替代的回應而不是資源的內容。如果資源已被移動,可傳送一個重定向狀態碼和一個可選的Location首部來告知用戶端資源已被移走,以及現在在哪裡可以找到它
狀態碼 |
原因片語 |
意思 |
#300 |
Multiple Choices |
客戶端請求實際上是指向多個資源的URL時會回傳這個狀態碼,例如伺服器上某個HTML文件有中文和英文版。傳回這個程式碼時會有一個選項列;這樣使用者就可以選擇他希望使用的一項 |
#301 |
Moved Permanently |
在請求URL已移出時。回應的Loaction首部包含資源所處在的URL |
302 |
Found |
與301類似;但是客戶端應該使用Location首部給出的URL取得臨時定位資源。將來的請求任使用舊資源 |
303 |
Set Ohter |
告訴客戶端應該使用另外一個URL來取得資源。新的URL資源位於回應報文Location首部。其主要目的是允許POST請求的回應將客戶端定向到某個資源上去 |
#304 |
#Not Modify |
#客戶端可以透過所包含的請求首部,使其請求變成有條件的。如果客戶端發送GET請求,而最近資源未改變的話,就可以用這個狀態碼來說明資源沒有被修改。帶有這個狀態碼的回應不應該包含實體部分 |
305 |
Use Proxy |
用來說明必須透過一個代理來存取資源。代理的位置由Location來給出。很重要的一點,客戶端是相對某個特定資源來解析這條回應的,不能假定所有請求,甚至所有對持有所請求的伺服器請求都透過這個代理進行。如果客戶端錯誤的讓代理介入某個請求,可能引發破壞性的行為,照成安全漏銅問題 |
#306 |
未使用 |
未使用 |
307 |
Temporary Redirect |
與301狀態碼類似;但客戶端應該使用Location首部給予的URL來臨時定位資源。將來的資源應該要用老的URL |
有時候客戶端會傳送一個伺服器無法處理的東西,例如格式錯誤的請求報文,或是最常見的時候一個不存在的URL
#狀態碼 |
#原因短語 |
意義 |
400 |
#Bad Request |
用於告訴客戶端發送了一個錯誤的請求 |
401 |
Unauthorized |
與適當的首部一起返回,在這個首部中請求客戶端在獲取資源的存取權之前,對自己進行認證 |
402 |
Payment Required |
狀態碼未使用 |
##403 |
|
|
|
|
|
|
|
|
|
|
| #Forbidden
用來說明請求被伺服器拒絕。如果伺服器說明為什麼拒絕請求,可以包含實體的主體部分進行描述。但這個狀態碼通常是伺服器不想說明原因的時候使用 |
| 404 | Not Found
用來說明伺服器說明無法找到請求的URL 。通常會包含一個實體,以便於客戶端應用程式給使用者看 |
| 405 | Method Not Allowed
發送的請求中帶有所請求的URL不支援的方法時,會使用此狀態碼。因該在回應中包含Allow首部,以告訴客戶端對所請求的資源可以使用哪些方法 |
| #406##Not Acceptable |
客戶端可以指定參數來說明它願意接受什麼類型的實體。伺服器沒有與客戶端接受的URL相符的資源的時,使用此代碼。通常伺服器會包含一些首部,以便客戶端弄清除為什麼請求無法滿足
|
407 |
Proxy Authentication Required |
與401相似,但使用於要求對資源進行認證的代理伺服器
|
408 |
Request Timeout |
如果客戶端請求的時間太長,伺服器可以傳回此狀態碼,並關閉連線。逾時時常隨伺服器不同而不同,但通常對所有合法伺服器來說,都是夠長的
|
#409 |
Conflict | ##用於說明請求可能在資源上引發了一些衝突。伺服器擔心會引發衝突,可以發送此狀態碼。回應中應該包含描述衝突的主體
| 410 | Gone | 與404類似,只是伺服器曾經擁有過此資源。主要用於Web網站的維護,這樣伺服器管理者就可以在資源移除的情況下通知客戶端
| #411 | Length Required | 伺服器要求請求封包中包含Content-length時使用
| 412 | Precondition Falied | 客戶端傳送請求條件,且其中一個條件失敗的時候使用。客戶端包含了Expect首部時發送的就是條件請求
| 413 | Request Entiny Too large | 客戶端發送的實體主體部分比伺服器能夠或希望處理的要大時,使用此狀態碼
| 414 | Request Url Too Long | 客戶端發送的請求中的請求URL比伺服器能夠或希望處理的要長時,使用此狀態碼
###415######Unsupported Media Type######服務端無法理解或支持當客戶端傳送實體的內容類型時,使用此狀態碼############416######Request Range Not Satisfiable######請求封包是請求資源的某個範圍,而此範圍無效或無法滿足時,使用此狀態碼############417######Expection Failed######請求的Expect請求包含了一個期望,但伺服器無法滿足此期望時,使用此狀態碼。如果代理程式或其他中間程式有確切證據說明來源服務區器端會為請求產生一個失敗期望,就可以傳送這個狀態碼############
有時候客戶端發送一個請求,伺服器本身發生錯誤時
狀態碼 |
原因短語 | ##意義 |
500 | Internal Server Error | 伺服器遇到一個妨礙它為請求提供服務的錯誤時,使用此狀態碼 |
501 | Not Inplemented | 客戶端傳送請求時超出伺服器的能力範圍,使用此狀態碼 |
502 | # Bad Gateway | 作為代理程式或網關使用伺服器從回應鏈的下一條鏈路上收到一條偽回應時,使用此狀態碼 |
503 | Service Unavailable | 用來說明伺服器現在無法為請求提供服務,但將來可以。如果伺服器知道資源何時可用,可以在回應中包含一個Retry-after首部 |
#504 | Gateway Timeout | 與狀態碼408類似,只是這裡的回應來自一個網關或代理,他們在等待另一伺服器對其請求進行回應時超時了 |
505 | HTTP Version Not Supported | 伺服器收到的請求使用了它無法或不願支援的協定版本,使用此狀態碼。有些伺服器應用程式選擇不支援協定的早期早期版本 |
在github上編輯此頁面##部落客個人部落格 參考:http協定 [http權威指南] 相關推薦:
使用http協定的流程 什麼是HTTP協定 Http協定與TCP協定有什麼差別
|
以上是http協議前端常識的詳細內容。更多資訊請關注PHP中文網其他相關文章!