HTTP是一個簡單的請求-響應協議,屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。它一般運行在TCP之上。它指定了客戶端發送給服務器什麼樣的消息獲得什麼樣的響應。ajax
一、B/S結構(Browser/Server,瀏覽器/服務器模式),這種模式統一了客戶端,將系統功能實現的核心部分集中到服務器上,簡化了系統的開發、維護和使用。客戶機上只要安裝一個瀏覽器就能夠訪問服務器。瀏覽器
二、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。緩存
三、靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。服務器
四、無鏈接:每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。併發
五、無狀態:HTTP無狀態協議,是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。分佈式
http請求由三部分組成,分別是:請求行、消息報頭(請求頭)、請求正文(請求內容)。post
一、請求行以一個方法符號開頭,以空格分開,後面跟着請求的URI和協議的版本。性能
格式以下:Method Request-URI HTTP-Version CRLF
Method:表示請求方法如GET,POST等;測試
Request-URI:是一個統一資源標識符如www.baidu.com;ui
HTTP-Version:表示請求的HTTP協議版本如/ HTTP/1.1 ;
CRLF:表示回車和換行(\r\n 除了做爲結尾的CRLF外,不容許出現單獨的CR或LF字符)。
二、請求頭
accept:瀏覽器經過這個頭告訴服務器,它所支持的數據類型。
Accept-Charset:瀏覽器經過這個頭告訴服務器,它支持哪一種字符集。
Accept-Encoding:瀏覽器經過這個頭告訴服務器,支持的壓縮格式。
Accept-Language:瀏覽器經過這個頭告訴服務器,它的語言環境。
Host:瀏覽器經過這個頭告訴服務器,想訪問哪臺主機。
If-Modified-Since:瀏覽器經過這個頭告訴服務器,緩存數據的時間。
Referer:瀏覽器經過這個頭告訴服務器,客戶機是哪一個頁面來的 防盜鏈。
Connection:瀏覽器經過這個頭告訴服務器,請求完後是斷開連接仍是何持連接。
X-Requested-With:XMLHttpRequest 表明經過ajax方式進行訪問。
User-Agent:請求載體的身份標識。
三、請求方法(全部方法全爲大寫)有多種,各個方法的解釋以下:
方法 | 描述 |
---|---|
GET | 請求獲取Request-URI所標識的資源(請求指定的頁面信息),並返回實體主體。 |
HEAD | 相似於 GET 請求,只不過返回的響應中沒有具體的內容,響應消息報頭,用於獲取報頭 |
POST | 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST 請求可能會致使新的資源的創建和/或已有資源的修改。 |
PUT | 請求服務器存儲一個資源,從客戶端向服務器傳送的數據取代指定的文檔的內容。 |
DELETE | 請求服務器刪除指定的頁面。 |
CONNECT | HTTP/1.1 協議中預留給可以將鏈接改成管道方式的代理服務器。 |
OPTIONS | 請求查詢服務器的性能,或者查詢與資源相關的選項和需求,容許客戶端查看服務器的性能。 |
TRACE | 請求服務器回顯服務器收到的請求,主要用於測試或診斷。 |
PATCH | 是對 PUT 方法的補充,用來對已知資源進行局部更新 。 |
在接收和解釋請求消息後,服務器返回一個HTTP響應消息。HTTP響應也是由三個部分組成,分別是:狀態行、消息報頭(響應頭)、響應正文。
一、狀態行
狀態行格式:HTTP-Version Status-Code Reason-Phrase CRLF
HTTP-Version:表示請求的HTTP協議版本如/ HTTP/1.1;
Status-Code:表示服務器發回的響應狀態代碼,如200表示請求響應成功;
Reason-Phrase:表示狀態代碼的文本描述。
狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值,以下列表所示:
1xx
消息
|
描述
|
---|---|
100 Continue
|
服務器僅接收到部分請求,可是一旦服務器並無拒絕該請求,客戶端應該繼續發送其他的請求。
|
101 Switching Protocols
|
服務器轉換協議:服務器將聽從客戶的請求轉換到另一種協議。
|
2xx
消息
|
描述
|
---|---|
200 OK
|
請求成功(其後是對GET和POST請求的應答文檔。)
|
201 Created
|
請求被建立完成,同時新的資源被建立。
|
202 Accepted
|
供處理的請求已被接受,可是處理未完成。
|
203 Non-authoritative Information
|
文檔已經正常地返回,但一些應答頭可能不正確,由於使用的是文檔的拷貝。
|
204 No Content
|
沒有新文檔。瀏覽器應該繼續顯示原來的文檔。若是用戶按期地刷新頁面,而Servlet能夠肯定用戶文檔足夠新,這個狀態代碼是頗有用的。
|
205 Reset Content
|
沒有新文檔。但瀏覽器應該重置它所顯示的內容。用來強制瀏覽器清除表單輸入內容。
|
206 Partial Content
|
客戶發送了一個帶有Range頭的GET請求,服務器完成了它。
|
3xx
消息
|
描述
|
---|---|
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。
|
4xx
消息
|
描述
|
---|---|
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
|
鎖定的錯誤。
|
5xx
消息
|
描述
|
---|---|
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協議版本。
|
二、消息報頭(常見響應頭)
Location:服務器經過這個頭,來告訴瀏覽器跳到哪裏
Server:服務器經過這個頭,告訴瀏覽器服務器的型號
Content-Encoding:服務器經過這個頭,告訴瀏覽器,數據的壓縮格式
Content-Length:服務器經過這個頭,告訴瀏覽器回送數據的長度
Content-Language:服務器經過這個頭,告訴瀏覽器語言環境
Content-Type:服務器經過這個頭,告訴瀏覽器回送數據的類型
Refresh:服務器經過這個頭,告訴瀏覽器定時刷新
Content-Disposition:服務器經過這個頭,告訴瀏覽器如下載方式打數據
Transfer-Encoding:服務器經過這個頭,告訴瀏覽器數據是以分塊方式回送的
Expires:-1 控制瀏覽器不要緩存
Cache-Control:no-cache
Pragma:no-cache
三、響應體:根據客戶端指定的請求信息,發送給客戶端的指定數據