第十單元 網(wǎng)絡協(xié)議

10.1 http與https
10.1.1 什么是超文本
1960年美國人Ted Nelson構思了一種通過計算機處理文本信息的方法车荔,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標準架構的發(fā)展根基颂碘。
  超文本是用超鏈接的方法洒试,將各種不同空間的文字信息組織在一起的網(wǎng)狀文本。超文本更是一種用戶界面范式球散,用以顯示文本及與文本之間相關的內(nèi)容。現(xiàn)時超文本普遍以電子文檔方式存在,其中的文字包含有可以鏈結到其他位置或者文檔的連結漫蛔,允許從當前閱讀位置直接切換到超文本連結所指向的位置。

10.1.2 http協(xié)議
HTTP(HyperText Transport Protocol)是超文本傳輸協(xié)議的縮寫旧蛾,它用于傳送WWW方式的數(shù)據(jù)莽龟。
  超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議锨天。所有的WWW文件都必須遵守這個標準毯盈。設計HTTP最初的目的
是為了提供一種發(fā)布和接收HTML頁面的方法。

10.1.3 http與https基本概念
HTTP:是互聯(lián)網(wǎng)上應用最為廣泛的一種網(wǎng)絡協(xié)議病袄,是一個客戶端和服務器端請求和應答的標準(TCP)搂赋,用于從WWW服務器傳輸超文本到本地瀏覽器的傳輸協(xié)議,它可以使瀏覽器更加高效益缠,使網(wǎng)絡傳輸減少脑奠。
HTTPS:是以安全為目標的HTTP通道,簡單講是HTTP的安全版幅慌,即HTTP下加入SSL(Secure Sockets Layer)層宋欺,HTTPS的安全基礎是SSL,因此加密的詳細內(nèi)容就需要SSL欠痴。
HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個信息安全通道迄靠,來保證數(shù)據(jù)傳輸?shù)陌踩涣硪环N就是確認網(wǎng)站的真實性喇辽。
10.1.4 http與https的區(qū)別
簡單來說掌挚,HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議菩咨,要比http協(xié)議安全吠式。區(qū)別主要如下:
  1、https協(xié)議需要到ca申請證書抽米,一般免費證書較少特占,因而需要一定費用。
  2云茸、http是超文本傳輸協(xié)議是目,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協(xié)議标捺。
  3懊纳、http和https使用的是完全不同的連接方式揉抵,用的默認端口也不一樣,前者是80嗤疯,后者是443冤今。
  4、http的連接很簡單茂缚,是無狀態(tài)的戏罢;HTTPS協(xié)議是由SSL+HTTP協(xié)議構建的可進行加密傳輸、身份認證的網(wǎng)絡協(xié)議脚囊,比http協(xié)議安全龟糕。

10.2 http請求的組成
從客戶端到服務器端的請求消息,信息由4部分組成請求行凑术、消息報頭翩蘸、空行、請求正文

10.2.1 請求行(請求方法URI協(xié)議/版本)
請求的第一行是“方法URI協(xié)議/版本”例如:GET/sample.jsp HTTP/1.1
以上代碼中“GET”代表請求方法淮逊,“/sample.jsp”表示URI催首,“HTTP/1.1代表協(xié)議和協(xié)議的版本。

10.2.2 消息報頭(請求頭Request Header)
請求頭包含許多有關的客戶端環(huán)境和請求正文的有用信息泄鹏。例如郎任,請求頭可以聲明瀏覽器所用的語言,請求正文的長度等备籽。例如:
Accept:image/gif.image/jpeg./(請求的圖片內(nèi)容格式)
Accept-Language:zh-cn(zh-CN 是表示中文舶治,fr-FR 是表示法語。 這是RFC1766定義的語言表示方式)
Connection:Keep-Alive(又稱持久連接车猬、連接重用霉猛,Keep-Alive功能使客戶端到服務器端的連接持續(xù)有效,當出現(xiàn)對服務器的后繼請求時珠闰,Keep-Alive功能避免了建立或者重新建立連接惜浅。)
Host:localhost(主機名字)
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)(客戶端身份信息)
Accept-Encoding:gzip,deflate( 以壓縮格式接收請求數(shù)據(jù))

10.2.3 空行
必須有,發(fā)送回車符和換行符伏嗜,通知服務器以下不再有請求頭

10.2.4 請求正文(body)
請求頭和請求正文之間是一個空行坛悉,這個行非常重要,它表示請求頭已經(jīng)結束承绸,接下來的是請求正文裸影。請求正文中可以包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP請求中,請求的正文只有一行內(nèi)容军熏。當然轩猩,在實際應用中,HTTP請求正文可以包含更多的內(nèi)容。

10.4 請求方法

請求方法 解釋
GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源后附加新的數(shù)據(jù)
HEAD 請求獲取由Request-URI所標識的資源的響應消息報頭
PUT 請求服務器存儲一個資源界轩,并用Request-URI作為其標識
DELETE 請求服務器刪除Request-URI所標識的資源
TRACE 請求服務器回送收到的請求信息画饥,主要用于測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢服務器的性能衔瓮,或者查詢與資源相關的選項和需求

10.5 http響應格式
從服務器端到客戶器端的響應信息浊猾,信息由4部分組成:狀態(tài)行、消息報頭热鞍、空行葫慎、響應正文。

10.5.1 狀態(tài)行
HTTP-1.1 Status-Code Reason-Phrase CRLF其中薇宠,HTTP-Version表示服務器HTTP協(xié)議的版本偷办;Status-Code表示服務器發(fā)回的響應狀態(tài)代碼;Reason-Phrase表示狀態(tài)代碼的文本描述澄港。
例如:HTTP/1.1 200 OK \r\n

狀態(tài)碼
當瀏覽者訪問一個網(wǎng)頁時椒涯,瀏覽者的瀏覽器會向網(wǎng)頁所在服務器發(fā)出請求。當瀏覽器接收并顯示網(wǎng)頁前回梧,此網(wǎng)頁所在的服務器會返回一個包含HTTP狀態(tài)碼的信息頭(server header)用以響應瀏覽器的請求废岂。

HTTP狀態(tài)碼的英文為HTTP Status Code。
下面是常見的HTTP狀態(tài)碼:

狀態(tài)碼 描述
200 請求成功
301 資源(網(wǎng)頁等)被永久轉移到其它URL
404 請求的資源(網(wǎng)頁等)不存在
500 內(nèi)部服務器錯誤

HTTP狀態(tài)碼分類
HTTP狀態(tài)碼由三個十進制數(shù)字組成狱意,第一個十進制數(shù)字定義了狀態(tài)碼的類型湖苞,后兩個數(shù)字沒有分類的作用。HTTP狀態(tài)碼共分為5種類型:
狀態(tài)碼 解釋
100-199 信息狀態(tài)碼详囤,表示成功接收請求财骨,要求客戶端繼續(xù)提交下一次請求才能完成整個處理過程。100(continue)繼續(xù)發(fā)送
200-299 成功狀態(tài)碼藏姐,表示成功接收請求并已完成整個處理過程隆箩,常用200(OK)成功接收
300-399 重定向狀態(tài)碼,例如羔杨,請求的資源已經(jīng)移動一個新地址捌臊,常用302、307和304
400-499 客戶端的請求有錯誤问畅,常用404(Not Found)娃属,403(Fobidden)
500-599 服務器端出現(xiàn)錯誤,常用 500

HTTP狀態(tài)碼列表:
<meta charset="utf-8">

狀態(tài)碼 狀態(tài)碼英文名稱 中文描述
100 Continue 繼續(xù)护姆。客戶端應繼續(xù)其請求
101 Switching Protocols 切換協(xié)議矾端。服務器根據(jù)客戶端的請求切換協(xié)議。只能切換到更高級的協(xié)議卵皂,例如秩铆,切換到HTTP的新版本協(xié)議
200 OK 請求成功。一般用于GET與POST請求
201 Created 已創(chuàng)建。成功請求并創(chuàng)建了新的資源
202 Accepted 已接受殴玛。已經(jīng)接受請求捅膘,但未處理完成
203 Non-Authoritative Information 非授權信息。請求成功滚粟。但返回的meta信息不在原始的服務器寻仗,而是一個副本
204 No Content 無內(nèi)容。服務器成功處理凡壤,但未返回內(nèi)容署尤。在未更新網(wǎng)頁的情況下,可確保瀏覽器繼續(xù)顯示當前文檔
205 Reset Content 重置內(nèi)容亚侠。服務器處理成功曹体,用戶終端(例如:瀏覽器)應重置文檔視圖∠趵茫可通過此返回碼清除瀏覽器的表單域
206 Partial Content 部分內(nèi)容箕别。服務器成功處理了部分GET請求
300 Multiple Choices 多種選擇价涝。請求的資源可包括多個位置剂桥,相應可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇
301 Moved Permanently 永久移動钾菊。請求的資源已被永久的移動到新URI瓦堵,返回信息會包括新的URI簇宽,瀏覽器會自動定向到新URI竖般。今后任何新的請求都應使用新的URI代替
302 Found 臨時移動飒赃。與301類似蜜托。但資源只是臨時被移動禾酱∥⒊辏客戶端應繼續(xù)使用原有URI
303 See Other 查看其它地址。與301類似颤陶。使用GET和POST請求查看
304 Not Modified 未修改颗管。所請求的資源未修改,服務器返回此狀態(tài)碼時滓走,不會返回任何資源垦江。客戶端通常會緩存訪問過的資源搅方,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源
305 Use Proxy 使用代理比吭。所請求的資源必須通過代理訪問
306 Unused 已經(jīng)被廢棄的HTTP狀態(tài)碼
307 Temporary Redirect 臨時重定向。與302類似姨涡。使用GET請求重定向
400 Bad Request 客戶端請求的語法錯誤衩藤,服務器無法理解
401 Unauthorized 請求要求用戶的身份認證
402 Payment Required 保留,將來使用
403 Forbidden 服務器理解請求客戶端的請求涛漂,但是拒絕執(zhí)行此請求
404 Not Found 服務器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)赏表。通過此代碼检诗,網(wǎng)站設計人員可設置"您所請求的資源無法找到"的個性頁面
405 Method Not Allowed 客戶端請求中的方法被禁止
406 Not Acceptable 服務器無法根據(jù)客戶端請求的內(nèi)容特性完成請求
407 Proxy Authentication Required 請求要求代理的身份認證,與401類似瓢剿,但請求者應當使用代理進行授權
408 Request Time-out 服務器等待客戶端發(fā)送的請求時間過長逢慌,超時
409 Conflict 服務器完成客戶端的 PUT 請求時可能返回此代碼,服務器處理請求時發(fā)生了沖突
410 Gone 客戶端請求的資源已經(jīng)不存在间狂。410不同于404攻泼,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設計人員可通過301代碼指定資源的新位置
411 Length Required 服務器無法處理客戶端發(fā)送的不帶Content-Length的請求信息
412 Precondition Failed 客戶端請求信息的先決條件錯誤
413 Request Entity Too Large 由于請求的實體過大前标,服務器無法處理坠韩,因此拒絕請求。為防止客戶端的連續(xù)請求炼列,服務器可能會關閉連接。如果只是服務器暫時無法處理音比,則會包含一個Retry-After的響應信息
414 Request-URI Too Large 請求的URI過長(URI通常為網(wǎng)址)俭尖,服務器無法處理
415 Unsupported Media Type 服務器無法處理請求附帶的媒體格式
416 Requested range not satisfiable 客戶端請求的范圍無效
417 Expectation Failed 服務器無法滿足Expect的請求頭信息
500 Internal Server Error 服務器內(nèi)部錯誤,無法完成請求
501 Not Implemented 服務器不支持請求的功能洞翩,無法完成請求
502 Bad Gateway 作為網(wǎng)關或者代理工作的服務器嘗試執(zhí)行請求時稽犁,從遠程服務器接收到了一個無效的響應
503 Service Unavailable 由于超載或系統(tǒng)維護,服務器暫時的無法處理客戶端的請求骚亿。延時的長度可包含在服務器的Retry-After頭信息中
504 Gateway Time-out 充當網(wǎng)關或代理的服務器已亥,未及時從遠端服務器獲取請求
505 HTTP Version not supported 服務器不支持請求的HTTP協(xié)議的版本,無法完成處理

10.5.2 消息報頭
服務器傳遞給客戶端用于說明服務器的一些信息来屠,以及將來繼續(xù)訪問該資源時的策略虑椎。
Location:Location響應報頭域用于重定向接受者到一個新的位置。
Server:Server響應報頭域包含了服務器用來處理請求的軟件信息俱笛。?WWW-Authenticate:WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應消息中下面是WWW-Authenticate響應報頭域的一個捆姜,例子:WWW-Authenticate: Basic realm="Basic Auth Test!“
Content-Encoding:Content-Encoding實體報頭域被使用作媒體類型的修飾符.
Content-Language:Content-Language實體報頭域描述了資源所用的自然語言。
Content-Length: Content-Length實體報頭域用于指明正文的長度.
Content-Type:Content-Type實體報頭域用語指明發(fā)送給接收者的實體正文的媒體類型迎膜。
Last-Modified:Last-Modified實體報頭域用于指示資源最后的修改日期及時間泥技。
Expires: Expires實體報頭域給出響應過期的日期和時間。

10.5.3 響應正文
服務端返回給客戶端的HTML文本內(nèi)容磕仅,或者其他格式的數(shù)據(jù)珊豹,比如:視頻流、圖片或者音頻數(shù)據(jù)榕订。
如果請求的是HTML頁面店茶,那么返回的就是HTML代碼。如果是JS就是JS代碼卸亮。

10.4 http協(xié)議的各版本
版本號 詳情
HTTP/0.9 只接受GET一種請求方法忽妒,沒有在通信中指定版本號,且不支持請求頭。由于該版本不支持POST方法段直,因此客戶端無法向服務器傳遞太多信息吃溅。
HTTP/1.0 第一個在通信中指定的版本號,至今被廣泛采用鸯檬,特別是在代理服務器中决侈。
HTTP/1.1 當前版本號,持久連接被默認采用喧务,并能很好地配合代理服務器工作赖歌。還支持以管道方式在同時發(fā)送多個請求,以便降低線路負載功茴,提高傳輸速度庐冯。
HTTP/2.0 為了解決1.1版本利用率不高的問題,提出了HTTP/2.0版本坎穿。增加雙工模式展父,增加服務器推送的功能

當前主流的協(xié)議版本還是HTTP/1.1版本。

HTTP/1.1與HTTP/1.0的區(qū)別
1玲昧、persistent connection(持久連接)
HTTP/1.0中栖茉,每對請求/ 響應都使用一個新的連接。
HTTP/1.1則支持持久連接(默認)孵延。

2吕漂、Host域
HTTP/1.1在請求消息頭多一個Host域;HTTP/1.0 則沒有這個域尘应,建立TCP連接的時候已經(jīng)指定了IP地址惶凝,而且默認一個IP地址只對應一個主機名,IP地址上只有一個host菩收。

3梨睁、.帶寬優(yōu)化
HTTP/1.1加入了一個新的狀態(tài)碼100(Continue)∧榷客戶端事先發(fā)送一個只帶頭域的請求坡贺,如果服務器因為權限拒絕了請求,就回送響應碼 401(Unauthorized)

4箱舞、請求方法和狀態(tài)碼
HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT這些Request方法遍坟。
在HTTP/1.1中新增了24個狀態(tài)響應碼,如409(Conflict)表示請求的資源與資源的當前狀態(tài)發(fā)生沖突晴股;410(Gone)表示服務器上的某個資源被永久性的刪除愿伴。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市电湘,隨后出現(xiàn)的幾起案子隔节,更是在濱河造成了極大的恐慌鹅经,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怎诫,死亡現(xiàn)場離奇詭異瘾晃,居然都是意外死亡,警方通過查閱死者的電腦和手機幻妓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門蹦误,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肉津,你說我怎么就攤上這事强胰。” “怎么了妹沙?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵偶洋,是天一觀的道長。 經(jīng)常有香客問我初烘,道長涡真,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任肾筐,我火速辦了婚禮,結果婚禮上缸剪,老公的妹妹穿的比我還像新娘吗铐。我一直安慰自己,他們只是感情好杏节,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布唬渗。 她就那樣靜靜地躺著,像睡著了一般奋渔。 火紅的嫁衣襯著肌膚如雪镊逝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天嫉鲸,我揣著相機與錄音撑蒜,去河邊找鬼。 笑死玄渗,一個胖子當著我的面吹牛座菠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播藤树,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浴滴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了岁钓?” 一聲冷哼從身側響起升略,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤微王,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后品嚣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炕倘,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年腰根,在試婚紗的時候發(fā)現(xiàn)自己被綠了激才。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡额嘿,死狀恐怖瘸恼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情册养,我是刑警寧澤东帅,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站球拦,受9級特大地震影響靠闭,放射性物質發(fā)生泄漏。R本人自食惡果不足惜坎炼,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一愧膀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谣光,春花似錦檩淋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氧敢,卻和暖如春日戈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孙乖。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工浙炼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人的圆。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓鼓拧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親越妈。 傳聞我的和親對象是個殘疾皇子季俩,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容