瞭解一下Http常見狀態碼、Http協議的工作特點和原理、Http請求Post與Get的區別

OldBoy~發表於2018-01-04

HTTP協議常見狀態碼
狀態碼的作用
負責標記客戶端請求伺服器的返回結果,標記伺服器端的處理是否正常,通知出現的錯誤等等職責,藉助客戶端可以知道客戶端是否正常請求服務端。
五大類:
1XX(資訊類狀態碼,接收的請求正在處理)、2XX(成功狀態碼)、3XX(重定向)、4XX(客戶端錯誤)、5XX(服務端錯誤)
常見狀態碼
200:代表OK,服務端正常處理
204:伺服器接受的請求已成功處理,但在返回的響應報文中不含實體的主體部分,也就是沒有內容
206:部分的內容,如客戶端在進行範圍請求,服務端成功執行了部分GET請求
301:跳轉,永久性重定向,請求的資源已被分配了新的URI,已有應使用現在所指的URI
302: 臨時性重定向,請求的資源已經分配了新的URI,希望使用者本次用新的URI訪問
303:由於請求對應的資源存在另一個URI
304:客戶端傳送附帶條件的請求時,伺服器端允許請求訪問資源,單一發生請求未滿足條件的情況下,直接返回304
307:臨時重定向,和302有相同的含義
400:請求報文中存在語法錯誤,需要修改內容再次發請求
401:代表傳送的請求需要有HTTP人認證的認證資訊
403:對請求資源的訪問被伺服器拒絕
404:伺服器上無法找到請求的資源
500:伺服器端在執行請求發生錯誤
503:伺服器暫時處於超負載或者停機維護無法處理請求

 

HTTP協議的工作特點和工作原理
工作特點:
基於B/S模式,通訊開銷小、簡單快速、傳輸成本低,比如開啟瀏覽器就可以訪問,使用靈活、可使用超文字傳輸協議(HTML)、節省傳輸時間、無狀態
工作原理:
客戶端傳送請求給伺服器,建立一個TCP連線,指定埠號。預設80,連線到伺服器,伺服器監聽瀏覽器請求,一旦監聽到客戶端請求,分析請求後,伺服器會向客戶端返回狀態資訊和資料內容
HTTP協議常見請求/響應頭
Content-Type(請求的實體對應的資訊包括字符集)、Accept(指定客戶端能接收的內容型別)、Origin(最初的請求來源於哪裡,主要使用者post請求)、Cookie(代表http請求發起時,傳送給伺服器端cookie的值)、Cache-Control(指定請求和響應的快取機制)、User-Agent(使用者資訊)、Referrer(上級請求路徑)、X-Forwarded-For(請求端真實的IP,做代理時可以用它獲取)、Access-Control-Allow-Origin(允許特定的域名訪問,通常用於跨域)、Last-Modified(請求資源的最後響應時間)

GET和POST請求的區別

1:在瀏覽器端,反覆返回上一頁在GET請求上是沒有什麼多大變化的,而POST就會重新提交
2:GET可以被收藏為書籤,而POST不可以被收藏為書籤
3: GET請求可以被瀏覽器快取,POST不會
4:GET在歷史記錄中會儲存引數,而POST不會
5:資料長度中GET有限制,最大長度取決於瀏覽器大小,一般2048個字元,POST沒限制
6: GET在允許的資料型別也有差別,GET只允許ASC2這樣的字元,POST沒限制,也允許二進位制資料,GET只允許GB2312
7:GET的安全性差點,是URL的一部分;POST相對來說安全點兒,不會被儲存到伺服器WEB日誌中
8:效率上GET比POST快,以下是原因

①.post請求包含更多的請求頭
  因為post需要在請求的body部分包含資料,所以會多了幾個資料描述部分的首部欄位(如content-type),這其實是微乎其微的
②.post在真正接受資料之前會先將請求頭髮送給伺服器進行確認,然後才真正傳送資料
  post請求的過程:
  1.瀏覽器請求tcp連線(第一次握手)
  2.伺服器答應進行tcp連線(第二次握手)
  3.瀏覽器確認,併傳送post請求頭(第三次握手,這個報文比較小,所以http會在此時進行第一次資料傳送)
  4.伺服器返回100 continue響應
  5.瀏覽器開始傳送資料
  6.伺服器返回200 ok響應
  get請求的過程
  1.瀏覽器請求tcp連線(第一次握手)
  2.伺服器答應進行tcp連線(第二次握手)
  3.瀏覽器確認,併傳送get請求頭和資料(第三次握手,這個報文比較小,所以http會在此時進行第一次資料傳送)
  4.伺服器返回200 ok響應
  也就是說,目測get的總耗是post的2/3左右
③.get會將資料快取起來,而post不會
使用ajax採用get方式請求靜態資料(比如html頁面,圖片)的時候,如果兩次傳輸的資料相同,第二次以後耗費的時間將在10ms以內(chrome測試),而post每次耗費的時間都差不多……
  chrome下和firefox下如果檢測到get請求的是靜態資源,則會快取,如果是資料,則不快取,但是IE這個傻X啥都會快取起來

相關文章