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 和 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中,比較安全