1. 程式人生 > 其它 >Http以及常見狀態碼

Http以及常見狀態碼

HTTP 協議概述

  HTTP協議採用了請求/響應模型。

  客戶端向伺服器傳送一個請求,請求頭包含請求的方法、URL、協議版本、以及包含請求修飾符、客戶資訊和內容的類似於MIME的訊息結構。伺服器以一個狀態行作為響應,響應的內容包括訊息協議的版本,成功或者錯誤編碼加上伺服器資訊、實體元資訊以及可能的實體內容。
HTTP 已經演化出了很多版本,它們中的大部分都是向下相容的。
(1)HTTP/0.9:已過時。只接受 GET 一種請求方法,沒有在通訊中指定版本號,且不支援請求頭。由於該版本不支援 POST 方法,所以客戶端無法向伺服器傳遞太多資訊。
(2)HTTP/1.0:這是第一個在通訊中指定版本號的 HTTP 協議版本,至今仍被廣泛採用

,特別是在代理伺服器中。
(3)HTTP/1.1當前版本。持久連線被預設採用,並能很好地配合代理伺服器工作。還支援以管道方式同時傳送多個請求,以便降低線路負載,提高傳輸速度。

HTTP 方法

HTTP 支援幾種不同的請求命令,這些命令被稱為 HTTP 方法(HTTP method)。每條 HTTP 請求報文都包含一個方法, 告訴伺服器要執行什麼動作,包括:獲取一個頁面,執行一個閘道器程式,刪除一個檔案等。最常用的獲取資源的方法是 GET、POST

HTTP 方法 描述
GET 請求獲取 Request-URI 所標識的資源
PUT 請求伺服器儲存一個資源,並用 Request-URI 作為其標識
DELETE 請求伺服器刪除 Request-URI 所標識的資源
POST 在 Request-URI 所標識的資源後附加新的資料
HEAD

請求獲取由 Request-URI 所標識的資源的響應訊息報頭



  GET 方法採用的是 URL 字尾的形式,比如 http://www.test.com/a.php?Id=123 就是一個 GET 請求,伺服器接收後可以解析出 Id=123。而POST方法不需要在URL中顯示”?Id=123”引數作為內容進行了隱藏的提交。因此,表單類或者有使用者名稱、密碼等內容提交時建議使用 POST 方法
  GET 方法在 URL 上顯示引數,而URL是有長度限制

,故不適合提交過大的資料。GET方法可以被瀏覽器快取,當請求已經被請求過一次的 URL 時,瀏覽器不需要向伺服器再次發出請求,直接在本地快取中獲得頁面。

GET 和 POST 比較

GET 方法:(從指定的伺服器上獲得資料

  • 對資料長度的限制:URL 的長度是受限制的(URL 的最大長度是 2048 個字元
  • 快取:能被快取
  • 安全性:與 POST 相比,GET 的安全性較差,因為所傳送的資料是 URL 的一部分。在傳送密碼或其他敏感資訊時絕不要使用 GET
  • 歷史記錄引數保留在瀏覽器歷史中
  • 後退按鈕/重新整理:無害
  • 書籤可收藏為書籤


POST 方法:(提交資料給指定伺服器處理

  • 對資料長度的限制:無限制
  • 快取:不能快取
  • 安全性:POST 比 GET 更安全,因為引數不會被儲存在瀏覽器歷史或 Web 伺服器日誌中
  • 歷史記錄:引數不會儲存在瀏覽器歷史中
  • 後退按鈕/重新整理:資料會被重新提交,瀏覽器應該告知使用者資料會被重新提交
  • 書籤:不可收藏為書籤

HTTP 狀態碼分類

  • 1** 資訊,伺服器收到請求,需要請求者繼續執行操作
  • 2** 成功,操作被成功接收並處理
  • 3** 重定向,需要進一步的操作以完成請求
  • 4** 客戶端錯誤,請求包含語法錯誤或無法完成請求
  • 5** 伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

4開頭的狀態碼:

 1 400 Bad Request
 2 客戶端請求的語法錯誤,伺服器無法理解
 3 401 Unauthorized
 4 請求要求使用者的身份認證
 5 402 Payment Required
 6 保留,將來使用
 7 403 Forbidden
 8 伺服器理解請求客戶端的請求,但是拒絕執行此請求
 9 404 Not Found
10 伺服器無法根據客戶端的請求找到資源(網頁) 。通過此程式碼,網站設計人員可設定’您所請求的資源無法找到"的個性頁面
11 405 Method Not Alowed
12 客戶端請求中的方法被禁止
13 406 Not Acceptable
14 伺服器無法根據客戶端請求的內容特性完成請求
15 407 Proxy Authentication Required
16 請求要求代理的身份認證,與401類似, 但請求者應當使用代理進行授權
17 408 Request Time-out
18 伺服器等待客戶端傳送的請求時間過長,超時
19 409 Conflict
20 伺服器完成客戶端的PUT請求是可能返回此程式碼,伺服器處理請求時發生了衝突
21 410 Gone
22 客戶端請求的資源已經不存在。410不同於404, 如果資源以前有現在被永久刪除了可使用410程式碼,網站設計人員可通過301程式碼指定資源的新位置
23 411 Length Required
24 伺服器無法處理客戶端傳送的不帶Content-Length的請求資訊
25 412 Precondition Failed
26 客戶端請求資訊的先決條件錯誤
27 413 Request Entity Too Large
28 由於請求的實體過大,伺服器無法處理,因此拒絕請求。為防止客戶端的連續請求,伺服器可能會關閉連線。如果只是服務Large器暫時無法處理,則會包含-個Retry-After的響應資訊
29 414 Request-URI Too Large
30 請求的URI過長(URI通常為網址),服務 器無法處理
31 415 Unsupported Media Type
32 伺服器無法處理請求附帶的媒體格式
33 416 Requested range not satisfiable
34 客戶端請求的範圍無效
35 417 Expectation Failed
36 伺服器無法滿足Expect的請求頭資訊

5開頭的狀態碼:

 1 500 Internal Server Error
 2 伺服器內部錯誤 ,無法完成請求
 3 501 Not Implemented
 4 伺服器不支援請求的功能,無法完成請求
 5 502 Bad Gateway
 6 充當閘道器或代理的伺服器,從遠端伺服器接收到了一個無效的請求
 7 503 Service Unavailable
 8 由於超載或系統維護,伺服器暫時的無法處理客戶端的請求。延時的長度可包含在伺服器的Retry-After頭資訊中
 9 504 Gateway Time-out
10 充當閘道器或代理的伺服器,未及時從遠端伺服器獲取請求
11 505 HTTP Version not supported
12 伺服器不支援請求的HTTP協議的版本,無法完成處理

常用的狀態碼:

 1 200 OK
 2 請求成功(其後是對GET和POST請求的應答文件)
 3 301 Moved Permanently
 4 請求的永久頁面跳轉
 5 403 Forbidden
 6 禁止訪問該頁面
 7 404 Not Found
 8 伺服器無法找到被請求的頁面
 9 500 Internal Server Error
10 內部伺服器錯誤
11 502 Bad Gateway
12 無效閘道器
13 503 Service Unavailable
14 當前服務不可用
15 504 Gateway Timeout
16 閘道器請求超時

總結:

HTTP協議有多種獲得Web資源的方法,常用的方法:GET和POST

 1 GET
 2 請求獲取Request-URI所標識的資源
 3 PUT
 4 請求伺服器儲存一個資源,並用Request-URI作為其標識
 5 DELETE
 6 請求伺服器刪除Request-URI所標識的資源
 7 POST
 8 在Request-URI所標識的資源後附加新的資料
 9 HEAD
10 請求獲取由Request-URI所標識的資源的響應訊息報頭

GET

1 • GET請求能被快取
2 • GET請求會儲存在瀏覽器的瀏覽紀錄裡
3 • GET請求有長度的限制
4 • 主要用於獲取資料
5 • 查詢的字串會顯示在URL中,不安全

POST

1 • POST請求不能被快取
2 • POST請求不會儲存在瀏覽器的瀏覽紀錄裡
3 • POST請求沒有長度限制
4 • 查詢的字串不會顯示在URL中,比較安全