有興趣關注一下個人我的公衆號,專一dotNet開發,謝謝jquery
這個問題幾乎面試的時候都會問到,是一個老生常談的話題,然而隨着不斷的學習,對於之前的認識有不少誤區,因此仍是須要不斷地總結的,學而時習之,不亦說乎。web
這裏只是簡單概述一下,更多詳情能夠參見:面試
服務端響應response也由四個部分組成,分別是:狀態行、消息報頭、空行、響應正文ajax
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。chrome
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。瀏覽器
序號 | 方法 | 描述 |
---|---|---|
1 | GET | 請求指定的頁面信息,並返回實體主體。 |
2 | HEAD | 相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭 |
3 | POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。 |
4 | PUT | 從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
5 | DELETE | 請求服務器刪除指定的頁面。 |
6 | CONNECT | HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。 |
7 | OPTIONS | 容許客戶端查看服務器的性能。 |
8 | TRACE | 回顯服務器收到的請求,主要用於測試或診斷。 |
http協議最多見的兩種方法GET和POST緩存
請求緩存:GET 會被緩存,而post不會安全
收藏書籤:GET能夠,而POST不能服務器
保留瀏覽器歷史記錄:GET能夠,而POST不能網絡
用處:get經常使用於取回數據,post用於提交數據
安全性:post比get安全
請求參數:querystring 是url的一部分get、post均可以帶上。 get的querystring(僅支持urlencode編碼),post的參數是放在body(支持多種編碼)
請求參數長度限制:get請求長度最多1024kb,post對請求數據沒有限制
針對上面常見的區別,若是面試的時候這麼說,確定是有很大的毛病,剛在學校面試的時候也曾經囫圇吞棗地這樣說過,如今想一想,真的是:
誤區一:「用處:get經常使用於取回數據,post用於提交數據」
曾聽到過這樣一種說法:get替換post來優化網站性能,雖然這種說法沒錯,也的確get常被用於取回數據,可是post也被一些ui框架使用於取回數據,好比kendo ui中的grid,就是用post來接受數據的。因此結論是get、post用途也是因地制宜。若是你有使用過kendo UI,會發現分頁、過濾、自定義的參數都包含在form data裏面。
誤區二:「請求參數長度限制:get請求長度最多1024kb,post對請求數據沒有限制」
這句話看上去實在沒毛病啊,菜鳥教程也是這樣說的啊。雖然字面意思上沒有錯誤,可是理解必定要正確。我想說的是GET方法提交的url參數數據大小沒有限制,在http協議中沒有對url長度進行限制(不只僅是querystring的長度),這個限制是特定的瀏覽器及服務器對他的限制
下面就是對各類瀏覽器和服務器的最大處理能力作一些說明.
因此爲了符合全部標準,url的最好很差超過最低標準的2083個字符(2k+35)。固然在作客戶端程序時,url並不展現給用戶,只是個程序調用,這時長度只收web服務器的影響了。對於中文的傳遞,一個漢字最終編碼後的字符長度是9個字符。
最多見的form表單,瀏覽器默認的form表單,默認的content-type是application/x-www-form-urlencoded,提交的數據會按照key value的方式,jquery的ajax默認的也是這種content-type。固然在post方式中添加querystring必定是能夠接收的到,可是在get方式中加body參數就不必定能成功接收到了。
誤區三:「post比get安全性要高」
這裏的安全是相對性,並非真正意義上的安全,經過get提交的數據都將顯示到url上,頁面會被瀏覽器緩存,其餘人查看歷史記錄會看到提交的數據,而post不會。另外get提交數據還可能會形成CSRF攻擊。
誤區四:「GET產生一個TCP數據包;POST產生兩個TCP數據包。」
這一點理解起來仍是有必定難度的,這個觀點來自於 99%的人都理解錯了HTTP中GET與POST的區別,反轉來自
據說『99% 的人都理解錯了 HTTP 中 GET 與 POST 的區別』??.
消息
|
描述
|
---|---|
100 Continue
|
服務器僅接收到部分請求,可是一旦服務器並無拒絕該請求,客戶端應該繼續發送其他的請求。
|
101 Switching Protocols
|
服務器轉換協議:服務器將聽從客戶的請求轉換到另一種協議。
|
消息
|
描述
|
---|---|
200 OK
|
請求成功(其後是對GET和POST請求的應答文檔。)
|
201 Created
|
請求被建立完成,同時新的資源被建立。
|
202 Accepted
|
供處理的請求已被接受,可是處理未完成。
|
203 Non-authoritative Information
|
文檔已經正常地返回,但一些應答頭可能不正確,由於使用的是文檔的拷貝。
|
204 No Content
|
沒有新文檔。瀏覽器應該繼續顯示原來的文檔。若是用戶按期地刷新頁面,而Servlet能夠肯定用戶文檔足夠新,這個狀態代碼是頗有用的。
|
205 Reset Content
|
沒有新文檔。但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容。
|
206 Partial Content
|
客戶發送了一個帶有Range頭的GET請求,服務器完成了它。
|
消息
|
描述
|
---|---|
300 Multiple Choices
|
多重選擇。連接列表。用戶能夠選擇某連接到達目的地。最多容許五個地址。
|
301 Moved Permanently
|
所請求的頁面已經轉移至新的url。
|
302 Found
|
所請求的頁面已經臨時轉移至新的url。
|
303 See Other
|
所請求的頁面可在別的url下被找到。
|
304 Not Modified
|
未按預期修改文檔。客戶端有緩衝的文檔併發出了一個條件性的請求(通常是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩衝的文檔還能夠繼續使用。
|
305 Use Proxy
|
客戶請求的文檔應該經過Location頭所指明的代理服務器提取。
|
306
Unused
|
此代碼被用於前一版本。目前已再也不使用,可是代碼依然被保留。
|
307 Temporary Redirect
|
被請求的頁面已經臨時移至新的url。
|
消息
|
描述
|
---|---|
400 Bad Request
|
服務器未能理解請求。
|
401 Unauthorized
|
被請求的頁面須要用戶名和密碼。
|
401.1
|
登陸失敗。
|
401.2
|
服務器配置致使登陸失敗。
|
401.3
|
因爲 ACL 對資源的限制而未得到受權。
|
401.4
|
篩選器受權失敗。
|
401.5
|
ISAPI/CGI 應用程序受權失敗。
|
401.7
|
訪問被 Web 服務器上的 URL 受權策略拒絕。這個錯誤代碼爲 IIS 6.0 所專用。
|
402 Payment Required
|
此代碼尚沒法使用。
|
403 Forbidden
|
對被請求頁面的訪問被禁止。
|
403.1
|
執行訪問被禁止。
|
403.2
|
讀訪問被禁止。
|
403.3
|
寫訪問被禁止。
|
403.4
|
要求 SSL。
|
403.5
|
要求 SSL 128。
|
403.6
|
IP 地址被拒絕。
|
403.7
|
要求客戶端證書。
|
403.8
|
站點訪問被拒絕。
|
403.9
|
用戶數過多。
|
403.10
|
配置無效。
|
403.11
|
密碼更改。
|
403.12
|
拒絕訪問映射表。
|
403.13
|
客戶端證書被吊銷。
|
403.14
|
拒絕目錄列表。
|
403.15
|
超出客戶端訪問許可。
|
403.16
|
客戶端證書不受信任或無效。
|
403.17
|
客戶端證書已過時或還沒有生效。
|
403.18
|
在當前的應用程序池中不能執行所請求的 URL。這個錯誤代碼爲 IIS 6.0 所專用。
|
403.19
|
不能爲這個應用程序池中的客戶端執行 CGI。這個錯誤代碼爲 IIS 6.0 所專用。
|
403.20
|
Passport 登陸失敗。這個錯誤代碼爲 IIS 6.0 所專用。
|
404 Not Found
|
服務器沒法找到被請求的頁面。
|
404.0
|
(無)–沒有找到文件或目錄。
|
404.1
|
沒法在所請求的端口上訪問 Web 站點。
|
404.2
|
Web 服務擴展鎖定策略阻止本請求。
|
404.3
|
MIME 映射策略阻止本請求。
|
405 Method Not Allowed
|
請求中指定的方法不被容許。
|
406 Not Acceptable
|
服務器生成的響應沒法被客戶端所接受。
|
407 Proxy Authentication Required
|
用戶必須首先使用代理服務器進行驗證,這樣請求才會被處理。
|
408 Request Timeout
|
請求超出了服務器的等待時間。
|
409 Conflict
|
因爲衝突,請求沒法被完成。
|
410 Gone
|
被請求的頁面不可用。
|
411 Length Required
|
"Content-Length" 未被定義。若是無此內容,服務器不會接受請求。
|
412 Precondition Failed
|
請求中的前提條件被服務器評估爲失敗。
|
413 Request Entity Too Large
|
因爲所請求的實體的太大,服務器不會接受請求。
|
414 Request-url Too Long
|
因爲url太長,服務器不會接受請求。當post請求被轉換爲帶有很長的查詢信息的get請求時,就會發生這種狀況。
|
415 Unsupported Media Type
|
因爲媒介類型不被支持,服務器不會接受請求。
|
416 Requested Range Not Satisfiable
|
服務器不能知足客戶在請求中指定的Range頭。
|
417 Expectation Failed
|
執行失敗。
|
423
|
鎖定的錯誤。
|
消息
|
描述
|
---|---|
500 Internal Server Error
|
請求未完成。服務器遇到不可預知的狀況。
|
500.12
|
應用程序正忙於在 Web 服務器上從新啓動。
|
500.13
|
Web 服務器太忙。
|
500.15
|
不容許直接請求 Global.asa。
|
500.16
|
UNC 受權憑據不正確。這個錯誤代碼爲 IIS 6.0 所專用。
|
500.18
|
URL 受權存儲不能打開。這個錯誤代碼爲 IIS 6.0 所專用。
|
500.100
|
內部 ASP 錯誤。
|
501 Not Implemented
|
請求未完成。服務器不支持所請求的功能。
|
502 Bad Gateway
|
請求未完成。服務器從上游服務器收到一個無效的響應。
|
502.1
|
CGI 應用程序超時。 ·
|
502.2
|
CGI 應用程序出錯。
|
503 Service Unavailable
|
請求未完成。服務器臨時過載或當機。
|
504 Gateway Timeout
|
網關超時。
|
505 HTTP Version Not Supported
|
服務器不支持請求中指明的HTTP協議版本。
|
ds