簡述HTTP報文請求方法和狀態響應碼

来源:https://www.cnblogs.com/jzbgltb/archive/2018/12/03/10059384.html
-Advertisement-
Play Games

1. Method 請求方法,表明客戶端希望伺服器對資源執行的動作; 1.1 GET 向伺服器請求資源。 1.2 HEAD 和GET方法的行為類似,但伺服器在響應中只返迴首部,不會返回實體的主體部分。這就允許客戶端在未獲取實際資源的情況下,對資源的首部進行檢查。 可以做到: 不獲取資源的情況下瞭解資 ...


1. Method

請求方法,表明客戶端希望伺服器對資源執行的動作;

1.1 GET

向伺服器請求資源。

和GET方法的行為類似,但伺服器在響應中只返迴首部,不會返回實體的主體部分。這就允許客戶端在未獲取實際資源的情況下,對資源的首部進行檢查。
可以做到:

  • 不獲取資源的情況下瞭解資源的情況(比如,判斷器類型)
  • 通過查看響應中的狀態碼,看看某個對象是否存在;
  • 通過查看首部,測試資源是否被修改了;

1.3 PUT

與GET從伺服器讀取文件相反,PUT方法迴向伺服器寫入文件。有些發佈系統允許用戶創建WEB頁面,並用PUT直接將其安裝到WEB伺服器上;
PUT方法的語義就是讓伺服器用請求的主體部分來創建一個由所請求的URL命令的新文檔,或者如果那個URL已經存在的話,就用這個主體來代替它;
因為PUT允許用戶對內容進行修改,所以很多WEB伺服器都要求在執行PUT之前,用密碼登錄。

1.4 POST

向伺服器發送要處理的數據;
一般伺服器通常提供一個表單,客戶端填入數據後點擊提交(提交是數據都會放在請求報文的實體部分當中),然後由伺服器將其發送到它要去的地方(比如,送到一個伺服器的網關程式中,然後由這個程式對其進行處理);

1.5 TRACE

客戶端發起一個請求時,這個請求可能要穿過防火牆、代理、網關或其他一些應用程式。每個中間節點都可能會修改原始的HTTP請求。TRACE方法允許客戶端在最終將請求發給伺服器時,看看它變成了什麼樣子;
TRACE請求會在目的伺服器發起一個“環回”針對。行程最後一站的伺服器會彈出一條TRACE響應,併在響應主體中攜帶它收到的原始請求報文。這樣客戶端就可以查看所有中間HTTP應用程式組成的請求/響應鏈上,原始包文是否,以及如何被毀壞或修改過;

TRACE方法主要用於診斷;也就是說,用於驗證請求是否如願的穿過了請求/響應鏈。它是一種很好的工具,可以用來查看代理和其他應用程式對用戶請求所產生的效果。
儘管TRACE可以很方便的用於診斷,但是它確實也有缺點,它假定中間應用程式對各種不同類型請求(GET、HEAD、POST等)的處理是相同的。很多HTTP應用程式會根據方法的不同做出不同的事情,比如,代理可能會將POST請求直接發給伺服器,而將GET請求發送給另一個HTTP應用程式(比如WEB緩存)。TRACE並不提供區分這些方法的機制。通常,中間應用程式會自行決定對TRACE請求的處理方式。
TRACE請求中不能帶有實體的主體部分。TRACE響應的實體主體部分包含了響應伺服器收到的請求的精確副本。

1.6 DELETE

DELETE方法所做的事情就是請求伺服器刪除請求URL所指定的資源。但是客戶端應用程式無法保證刪除操作一定會被執行。因為HTTP規範允許伺服器在不通知客戶端的情況下撤銷請求。

1.7 擴展方法

2 狀態返回碼

1xx:100-101, (額外)信息提示類的狀態碼;
2xx:200-206, 成功類的狀態碼;
3xx:300-305, 重定向類的狀態碼;沒有把請求的頁面響應給客戶端,而是重定向到其它地方,或是無需獲取此資源;
4xx:400-415, 錯誤類信息,客戶端的錯誤類的狀態碼;例如請求不存在的資源;
5xx:500-505, 錯誤類信息,伺服器端錯誤類的狀態碼;例如伺服器內部的問題,因為資源有語法錯誤運行部成功,無法響應,不是資源不存在;

2.1 200~299--成功狀態碼

200:OK
成功,請求的所有數據通過響應報文的entity-body部分發送;原因短語為OK;

201:Created
用於創建伺服器對象的請求(比如,PUT)。響應實體主體部分中應該包含各種引用了已創建的資源的URL。Location首部包含的則是最具體的引用。伺服器必須在發送這個狀態碼之前創建好對象;

202:Accepted
請求已被接受,但伺服器還未對其執行任何動作。不能保證伺服器會完成這個請求;這隻是意味著接受請求時,他看起來是有效的。伺服器應該在實體的主體部分包含對請求狀態的描述,或許還應該有對請求完成時間的估計(或者包含一個指針,指向可以獲取此信息的位置);

203:Non-Authoritative Information
實體首部包含的信息不是來自於源端伺服器,而是來自資源的一份副本。如果中間節點上有一份資源副本,但無法或者沒有對它所發送的與資源有關的原信息(首部)進行驗證,就會出現這種情況;
這種響應嗎並不是非用不可的;如果實體首部來自源端伺服器,相應為200狀態的應用程式就可以將其作為一種可選項使用;

204:No Content
響應報文中包含若幹首部和一個狀態行,但沒有實體的主體部分。主要用於在瀏覽器不轉為顯示新文檔的情況下,對其進行更新(比如刷新一個表單頁面);

205:Rest Content
另一個主要用於瀏覽器的代碼。負責告知瀏覽器清除當前頁面中的所有HTML表單元素;

206:Partial Content
成功執行了一個部分或Range(範圍)請求。客戶端可以通過一些特殊的首部來獲取部分或某個範圍內的文檔--這個狀態碼就說明範文請求成功了;
206相應中必須包含Content-Range、Date以及ETag或Content-Location首部;

2.2 300~399--重定向狀態碼

可以通過某些重定向狀態碼對瀏覽器本地緩存的資源副本與遠端伺服器上的資源進行驗證。比如:用來查看本地的副本是否仍為最新的,或者遠端伺服器上的資源是否被修改過;
下圖是客戶端發送了一個特殊的if-Modified-Since首部,說明會讀取1997年10月之後修改過的文檔。因為這個日期之後,此文檔並未修改過,因此,伺服器回送了一個304狀態碼,而不是文檔的內容;

300:Multiple Choices
客戶端請求一個實際指向多個資源的URL時就會返回這個狀態碼,比如伺服器上有某個HTML文檔的英語和法語版本。返回這個代碼時會帶有一個選項列表;這樣用戶就可以選擇他希望使用的那一項了。

301:Move Permanently
請求的URL指向的資源已經被刪除(移動到其它位置)是永久重定向,資源被永久刪除;但在響應報文中通過首部Location指明瞭資源現在所處的新位置;原因短語為Moved Permanently;

302:Found
與301相似,但在響應報文中通過Location指明資源現在所處臨時新位置,資源不是永久刪除,是臨時重定向; 原因短語為Found;

303:See Other
告知客戶端應該用另一個URL來獲取資源。新的URL位於響應報文的Location首部。其主要目的是允許POST請求的響應將客戶端定向到某個資源上去;

304:Not Modified
客戶端發出了條件式請求,但伺服器上的資源未曾發生改變,則通過通過此響應狀態碼通知客戶端(帶有這個狀態碼的響應不應該包含實體的主體部分),客戶端可繼續使用本地網頁緩存;原因短語為Not Modified;

305:Use Proxy
用來說明必須通過一個代理來訪問資源;代理的位置有Location首部給出。
很重要的一點是,客戶端只是對某個特定資源來解析這條響應的;而不是對所有請求,甚至所有具有相同資源的伺服器都通過這個代理進行;如果客戶端錯誤的讓代理介入了某個請求,可能會引發破壞性的行為,而且會造成安全漏洞;

306:未使用

307:Temporary Redirect
與301代碼類似;但客戶端應該使用Location首部給出URL來臨時定位資源。將來的請求還使用老的URL;

註意:
302、303、307狀態碼之間存在一些交叉。這些狀態碼的用法有細微的區別,大部分區別都源於HTTP/1.0和HTTP/1.1應用程式對這些狀態碼處理方式的不同。
當HTTP/1.0客戶端發起一個POST請求,併在響應中收到302重定向狀態碼時,它會接受Location首部的重定向URL,並向那個URL發起一個GET請求(而不會向原始請求中那樣發起POST請求)。
HTTP/1.0伺服器希望HTTP/1.0客戶端這麼做---如果HTTP/1.0伺服器收到來自HTTP/1.0客戶端的POST請求之後發送了302狀態碼,伺服器就期望客戶端能夠接受重定向URL,並向重定向的URL發送一個GET請求;

問題出在HTTP/1.1。HTTP/1.1規範您使用了303狀態碼來實現同樣的行為(伺服器發送303狀態碼來重定向客戶端的POST請求,在它後面跟上一個GET請求)。
為避開這個問題,HTTP/1.1規範指出,對於HTTP/1.1客戶端,用307狀態碼取代302狀態碼來進行臨時重定向。這樣伺服器就可以將302狀態碼保留起來,為HTTP/1.0客戶端使用。
這樣一來,伺服器要選擇適當的重定向狀態碼放入重定向響應中發送,就需要查看客戶端的HTTP版本了。

2.3 400~499--客戶端錯誤狀態碼

400:Bad Request
告知客戶端它發送了一個錯誤的請求;

401:Unauthorized
與適當的首部一同返回,在這些首部中要求客戶端在訪問資源之前,需要進行認證(如基於basic認證時就是401)。

402:Payment Required
保留

403:Forbidden
用於說明請求被伺服器拒絕了。如果伺服器想說明為什麼拒絕請求,可以在包含請求實體的主體部分來對原因進行描述。但這個狀態碼通常是在伺服器不想說明拒絕原因的時候使用的;

404:Not Found
用於說明伺服器無法找到所請求的URL。通常會包含一個實體,以便客戶端應用程式顯示給用戶看;

405:Methord Not Allowed
發起的請求中帶有所請求的URL不支持的方法時,使用此狀態嗎。應該在響應中包含Allow首部,已告知客戶端對所請求資源可以使用哪些方法。

406:Not Acceptable
客戶端可以指定參數來說明它們願意接受什麼類型的實體。伺服器沒有與客戶端可接受的URL相匹配的資源時,使用此代碼。通常,伺服器會包含一些首部,以便客戶端弄清楚為什麼請求無法滿足。

407:Porxy Authentication Required
與401狀態碼類似,但用於要求對資源進行認證的代理伺服器;

408:Request Timeout
如果客戶端完成請求所花的時間太長,伺服器可以回送此狀態碼,並關閉連接。超時時長隨著伺服器的不同有所不同,但通常對所有的合法請求來說,都是夠長的;

409:Conflict
用於說明請求可能在資源上引發的一些衝突。伺服器擔心請求會引發衝突時,可以發送此狀態碼。響應中應該包含描述衝突的主體;

410:Gone
與404類似,只是伺服器曾經擁有過此資源。主要用於WEB站點的維護,這樣伺服器的管理員就可以在資源被移除的情況下通知客戶端了;

412:Precondition Failed
客戶端發起了條件請求,且其中一個條件失敗了的時候使用。客戶端包含了Expect首部時就是條件請求。

413:Request Entity Too Large
客戶端發送的實體主體部分比伺服器能夠或希望處理的要大時,使用此狀態;

414:Request URI Too Long
客戶端所發送的請求中請求的URL比伺服器能夠或者希望處理的要長時,使用此狀態碼;

415:Unsupported Media Type
伺服器無法理解或無法支持客戶端所發實體的內容類型時,使用此狀態碼;

416:Requested Range Not Satisfiable
請求報文所請求的是指定資源的某個範圍,而此範圍無效或無法滿足時,使用此狀態碼;

417:Expectation Failed
請求的Expect請求首部包含了一個期望,但伺服器無法滿足此期望時,使用此狀態碼。
如果代理或其他中間應用程式有確切證據說明源端伺服器會為其請求產生一個失敗的期望,就可以發送這個響應狀態碼

2.4 500~599--伺服器錯誤狀態碼

500:Internal Server Error
伺服器內部錯誤。

501:Not Implemented
客戶端發起的請求超出了伺服器的能力範圍(比如,使用了伺服器不支持到的請求方法)。

502:Bad Gateway
作為代理或網關使用的伺服器從請求相應鏈的下一跳鏈路上收到了一條偽相應(比如,它無法連接到其父網關)。

503:Service Unavailable
用來說明伺服器現在無法為請求提供服務,但撿來可以。如果伺服器知道什麼時候資源會變為可用的,可用在響應中包含一個Retry-After首部。

504:Gateway Timout
與狀態碼408類似,只是這裡的響應來自一個網關或代理,他們在等待另一個伺服器對其請求的進行響應時超時了。

505:HTTP Version Not Supported
伺服器收到了請求,是它無法或不願支持的協議版本時,使用此狀態碼(有些伺服器應用程式會選擇不支持協議的早期版本)。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • asp.net core很大的方便了跨平臺的開發者,linux的開發者可以使用apache和nginx來做反向代理,windows上可以用IIS進行反向代理。 反向代理可以提供很多特性,固然很好。但是還有複雜性,我們也可以使用windows service來直接啟動kestrel。 asp.net ...
  • 對於開發人員來說,編寫介面文檔需要消耗大量的時間,並且,手動編寫的文檔介面會由於需求的頻繁變動變得難以維護,這就需要一個在介面開發階段可以自動監測介面輸入參數,自動生成文檔的功能;由於 Swagger 插件的出現,這項工作幾乎可以實現完全的自動化。 ...
  • 我們都知道ORM全稱叫做Object Relationship Mapper,也就是可以用object來map我們的db,而且市面上的orm框架有很多,其中有一個框架 叫做dapper,而且被稱為the king of ORM。 一:為什麼選擇Dapper 1. 性能優越: 其實在各大網站上,我們大 ...
  • ASP.NET -- WebForm: ScriptManager 類 ...
  • [root@localhost ~]# ifconfig bond0:0 10.0.0.202 netmask 255.255.255.255 broadcast 10.0.0.255 up 摘自:http://www.wangxuejin.cn/post-247.html ...
  • 1.打開任務管理器切換到啟動Tab,在需要刪除的項目上點擊右鍵,點擊打開文件所在位置,這樣就找到了啟動項所在磁碟位置,可以根據需要決定是否刪除。 2.從註冊表中刪除在啟動中的註冊信息。 regedit 打開註冊表後,將註冊表定位於 \HKEY_LOCAL_MACHINE\SOFTWARE\Wow64 ...
  • 最近瀏覽博客的時候,經常會看到博主展示出自己的公鑰,於是對 GPG/PGP 產生興趣。下麵簡單記錄相關文章的鏈接,方便以後瞭解。 簡介: 1991年,程式員Phil Zimmermann為了避開政府的監視,開發了加密軟體PGP。因為這個軟體非常好用,迅速流傳開來成為許多程式員的必備工具。但是,它是商 ...
  • 1、定義方式:在[]內用逗號分隔開多個任意類型的值l l=['a','b','c'] l=list(['a','b','c']) ​ 類型轉換 l=list('hello') l=list({'x':1,'y':2}) print(l) ​ 2,常用操作+內置的方法 同字元串相似 ​ (1),追加& ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...