HTTP是什么?
超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)是一個簡單的請求-響應(yīng)協(xié)議,它通常運行在TCP之上霞势。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。請求和響應(yīng)消息的頭以ASCII形式給出斑鸦;而消息內(nèi)容則具有一個類似MIME的格式愕贡。這個簡單模型是早期Web成功的有功之臣,因為它使開發(fā)和部署非常地直截了當(dāng)巷屿。
HTTP工作原理
HTTP是基于客戶/服務(wù)器模式固以,且面向連接的。典型的HTTP事務(wù)處理有如下的過程:
- 客戶與服務(wù)器建立連接攒庵;
- 客戶向服務(wù)器提出請求嘴纺;
- 服務(wù)器接受請求,并根據(jù)請求返回相應(yīng)的文件作為應(yīng)答浓冒;
- 客戶與服務(wù)器關(guān)閉連接栽渴。
HTTP報文格式
HTTP報文由從客戶機(jī)到服務(wù)器的請求和從服務(wù)器到客戶機(jī)的響應(yīng)構(gòu)成。
請求報文格式如下:
- 請求行 - 通用信息頭 - 請求頭 - 實體頭 - 報文主體
- 請求行以方法字段開始稳懒,后面分別是URL字段和HTTP協(xié)議版本字段答捕,并以CRLF結(jié)尾技健。SP是分隔符。除了在最后的CRLF序列中CF和LF是必- 需的之外,其他都可以不要樟遣。
應(yīng)答報文格式如下:
狀態(tài)行 - 通用信息頭 - 響應(yīng)頭 - 實體頭 - 報文主體
狀態(tài)碼元由3位數(shù)字組成之宿,表示請求是否被理解或被滿足浮禾。原因分析是對原文的狀態(tài)碼作簡短的描述上鞠,狀態(tài)碼用來支持自動操作,而原因分析用來供用戶使用顶岸∏徽茫客戶機(jī)無需用來檢查或顯示語法。
-
通用信息頭:
Cache-Control: 控制緩存
Connection: 管理連接
Date:報文創(chuàng)建時間
Pragma: 報文指令
Upgrade: 升級協(xié)議
Via: 代理服務(wù)器相關(guān)信息
等...
-
請求報文頭:
Accept:可接受的媒體類型
Accept-Charset: 優(yōu)先字符集
Accept-Language: 優(yōu)先的語言(比如中文辖佣、英文的)
Accept-Encoding: 優(yōu)先的內(nèi)容編碼
Authorization:web認(rèn)真信息
Host:請求資源所在服務(wù)器地址
If-Match: 比較實體標(biāo)記
If-None-Match: 比較實體標(biāo)記
If-Range: 資源未更新時發(fā)送實體Byte的范圍請求
Referer: 對請求中的URI的原始獲取方
User-Agent:HTTP客戶端程序信息
等...
-
響應(yīng)報文頭:
Accpet-Range: 是否接字節(jié)范圍請求
Age:推算資源創(chuàng)建經(jīng)過時間
ETag:資源匹配信息
Location: 令客戶端重定向至指定URI
Server:HTTP服務(wù)起的安裝信息
Vary:代理服務(wù)器的緩存管理信息
WWW-Authenticate:服務(wù)器對客戶端的認(rèn)證信息
-
實體報文頭:
Allow: 資源科支持HTTP方法
Content-Encoding: 實體應(yīng)用的編碼方式
Content-Language: 實體的使用語言
Contet-MD5:實體報文摘要
Content-Range:實體主題的位置范圍
Content-Type:實體主體的媒體類型
Expires: 實體主體過期日期時間
Last-Modified:資源最后修改日期
等等...
HTTP狀態(tài)碼:
狀態(tài)碼 | 狀態(tài)碼英文名稱 | 中文描述 |
---|---|---|
100 | Continue 繼續(xù)霹抛。 | 客戶端應(yīng)繼續(xù)其請求 |
101 | Switching Protocols | 切換協(xié)議。服務(wù)器根據(jù)客戶端的請求切換協(xié)議卷谈。只能切換到更高級的協(xié)議杯拐,例如,切換到HTTP的新版本協(xié)議 |
200 | OK | 請求成功。一般用于GET與POST請求 |
201 | Created | 已創(chuàng)建端逼。成功請求并創(chuàng)建了新的資源 |
202 | Accepted | 已接受朗兵。已經(jīng)接受請求,但未處理完成 |
203 | Non-Authoritative Information | 非授權(quán)信息顶滩。請求成功矛市。但返回的meta信息不在原始的服務(wù)器,而是一個副本 |
204 | No Content | 無內(nèi)容诲祸。服務(wù)器成功處理,但未返回內(nèi)容而昨。在未更新網(wǎng)頁的情況下救氯,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔 |
205 | Reset Content | 重置內(nèi)容。服務(wù)器處理成功歌憨,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖着憨。可通過此返回碼清除瀏覽器的表單域 |
206 | Partial Content | 部分內(nèi)容务嫡。服務(wù)器成功處理了部分GET請求 |
300 | Multiple Choices | 多種選擇甲抖。請求的資源可包括多個位置,相應(yīng)可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇 |
301 | Moved Permanently | 永久移動心铃。請求的資源已被永久的移動到新URI准谚,返回信息會包括新的URI,瀏覽器會自動定向到新URI去扣。今后任何新的請求都應(yīng)使用新的URI代替 |
302 | Found | 臨時移動柱衔。與301類似。但資源只是臨時被移動愉棱∷纛恚客戶端應(yīng)繼續(xù)使用原有URI |
303 | See Other | 查看其它地址。與301類似奔滑。使用GET和POST請求查看 |
304 | Not Modified | 未修改艾岂。所請求的資源未修改,服務(wù)器返回此狀態(tài)碼時朋其,不會返回任何資源王浴。客戶端通常會緩存訪問過的資源令宿,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 使用代理叼耙。所請求的資源必須通過代理訪問 |
306 | Unused | 已經(jīng)被廢棄的HTTP狀態(tài)碼 |
307 | Temporary Redirect | 臨時重定向。與302類似粒没。使用GET請求重定向 |
400 | Bad Request | 客戶端請求的語法錯誤筛婉,服務(wù)器無法理解 |
401 | Unauthorized | 請求要求用戶的身份認(rèn)證 |
402 | Payment Required | 保留,將來使用 |
403 | Forbidden | 服務(wù)器理解請求客戶端的請求,但是拒絕執(zhí)行此請求 |
404 | Not Found | 服務(wù)器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)爽撒。通過此代碼入蛆,網(wǎng)站設(shè)計人員可設(shè)置"您所請求的資源無法找到"的個性頁面 |
405 | Method Not Allowed | 客戶端請求中的方法被禁止 |
406 | Not Acceptable | 服務(wù)器無法根據(jù)客戶端請求的內(nèi)容特性完成請求 |
407 | Proxy Authentication Required | 請求要求代理的身份認(rèn)證,與401類似硕勿,但請求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán) |
408 | Request Time-out | 服務(wù)器等待客戶端發(fā)送的請求時間過長哨毁,超時 |
409 | Conflict | 服務(wù)器完成客戶端的 PUT 請求時可能返回此代碼,服務(wù)器處理請求時發(fā)生了沖突 |
410 | Gone | 客戶端請求的資源已經(jīng)不存在源武。410不同于404扼褪,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設(shè)計人員可通過301代碼指定資源的新位置 |
411 | Length Required | 服務(wù)器無法處理客戶端發(fā)送的不帶Content-Length的請求信息 |
412 | Precondition Failed | 客戶端請求信息的先決條件錯誤 |
413 | Request Entity Too Large | 由于請求的實體過大粱栖,服務(wù)器無法處理话浇,因此拒絕請求。為防止客戶端的連續(xù)請求闹究,服務(wù)器可能會關(guān)閉連接幔崖。如果只是服務(wù)器暫時無法處理,則會包含一個Retry-After的響應(yīng)信息 |
414 | Request-URI Too Large | 請求的URI過長(URI通常為網(wǎng)址)渣淤,服務(wù)器無法處理 |
415 | Unsupported Media Type | 服務(wù)器無法處理請求附帶的媒體格式 |
416 | Requested range not satisfiable | 客戶端請求的范圍無效 |
417 | Expectation Failed | 服務(wù)器無法滿足Expect的請求頭信息 |
500 | Internal Server Error | 服務(wù)器內(nèi)部錯誤赏寇,無法完成請求 |
501 | Not Implemented | 服務(wù)器不支持請求的功能,無法完成請求 |
502 | Bad Gateway | 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時价认,從遠(yuǎn)程服務(wù)器接收到了一個無效的響應(yīng) |
503 | Service Unavailable | 由于超載或系統(tǒng)維護(hù)嗅定,服務(wù)器暫時的無法處理客戶端的請求。延時的長度可包含在服務(wù)器的Retry-After頭信息中 |
504 | Gateway Time-out | 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器刻伊,未及時從遠(yuǎn)端服務(wù)器獲取請求 |
505 | HTTP Version not supported | 服務(wù)器不支持請求的HTTP協(xié)議的版本露戒,無法完成處理 |