10.1 http與https
10.1.1 什么是超文本
1960年美國人Ted Nelson構(gòu)思了一種通過計(jì)算機(jī)處理文本信息的方法,并稱之為超文本(hypertext),這成為了HTTP超文本傳輸協(xié)議標(biāo)準(zhǔn)架構(gòu)的發(fā)展根基。
超文本是用超鏈接的方法,將各種不同空間的文字信息組織在一起的網(wǎng)狀文本。超文本更是一種用戶界面范式,用以顯示文本及與文本之間相關(guān)的內(nèi)容?,F(xiàn)時超文本普遍以電子文檔方式存在,其中的文字包含有可以鏈結(jié)到其他位置或者文檔的連結(jié),允許從當(dāng)前閱讀位置直接切換到超文本連結(jié)所指向的位置。
10.1.2 http協(xié)議
HTTP(HyperText Transport Protocol)是超文本傳輸協(xié)議的縮寫,它用于傳送WWW方式的數(shù)據(jù)。
超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初的目的
是為了提供一種發(fā)布和接收HTML頁面的方法。
10.1.3 http與https基本概念
HTTP:是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,是一個客戶端和服務(wù)器端請求和應(yīng)答的標(biāo)準(zhǔn)(TCP),用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的傳輸協(xié)議,它可以使瀏覽器更加高效,使網(wǎng)絡(luò)傳輸減少。
HTTPS:是以安全為目標(biāo)的HTTP通道,簡單講是HTTP的安全版,即HTTP下加入SSL(Secure Sockets Layer)層,HTTPS的安全基礎(chǔ)是SSL,因此加密的詳細(xì)內(nèi)容就需要SSL。
HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?;另一種就是確認(rèn)網(wǎng)站的真實(shí)性。
10.1.4 http與https的區(qū)別
簡單來說,HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,要比http協(xié)議安全。區(qū)別主要如下:
1、http是超文本傳輸協(xié)議,信息是明文傳輸,是無狀態(tài)的;HTTPS協(xié)議是由SSL+HTTP協(xié)議構(gòu)建的可進(jìn)行加密傳輸、身份認(rèn)證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。
2、http和https使用的是完全不同的連接方式,用的默認(rèn)端口也不一樣,前者是80,后者是443。
3、https協(xié)議需要到ca申請證書,一般免費(fèi)證書較少,因而需要一定費(fèi)用。
10.2 http請求的組成
從客戶端到服務(wù)器端的請求消息,信息由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)
請求頭包含許多有關(guān)的客戶端環(huán)境和請求正文的有用信息。例如,請求頭可以聲明瀏覽器所用的語言,請求正文的長度等。例如:
Accept:image/gif.image/jpeg./(請求的圖片內(nèi)容格式)
Accept-Language:zh-cn(zh-CN 是表示中文,fr-FR 是表示法語。 這是RFC1766定義的語言表示方式)
Connection:Keep-Alive(又稱持久連接、連接重用,Keep-Alive功能使客戶端到服務(wù)器端的連接持續(xù)有效,當(dāng)出現(xiàn)對服務(wù)器的后繼請求時,Keep-Alive功能避免了建立或者重新建立連接。)
Host:localhost(主機(jī)名字)
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)(客戶端身份信息)
Accept-Encoding:gzip,deflate(? 以壓縮格式接收請求數(shù)據(jù))
10.2.3 空行
必須有,發(fā)送回車符和換行符,通知服務(wù)器以下不再有請求頭
10.2.4 請求正文(body)
請求頭和請求正文之間是一個空行,這個行非常重要,它表示請求頭已經(jīng)結(jié)束,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字符串信息:
username=jinqiao&password=1234
在以上的例子的HTTP請求中,請求的正文只有一行內(nèi)容。當(dāng)然,在實(shí)際應(yīng)用中,HTTP請求正文可以包含更多的內(nèi)容。
案例

請求案例.png
10.4 請求方法
請求方法解釋
GET請求獲取Request-URI所標(biāo)識的資源
POST在Request-URI所標(biāo)識的資源后附加新的數(shù)據(jù)
HEAD請求獲取由Request-URI所標(biāo)識的資源的響應(yīng)消息報頭
PUT請求服務(wù)器存儲一個資源,并用Request-URI作為其標(biāo)識
DELETE請求服務(wù)器刪除Request-URI所標(biāo)識的資源
TRACE請求服務(wù)器回送收到的請求信息,主要用于測試或診斷
CONNECT保留將來使用
OPTIONS請求查詢服務(wù)器的性能,或者查詢與資源相關(guān)的選項(xiàng)和需求
10.5 http響應(yīng)格式
從服務(wù)器端到客戶器端的響應(yīng)信息,信息由4部分組成:狀態(tài)行、消息報頭、空行、響應(yīng)正文。

響應(yīng)格式.png
10.5.1 狀態(tài)行
HTTP-1.1 Status-Code Reason-Phrase CRLF其中,HTTP-Version表示服務(wù)器HTTP協(xié)議的版本;Status-Code表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼;Reason-Phrase表示狀態(tài)代碼的文本描述。
例如:HTTP/1.1 200 OK? \r\n
狀態(tài)碼
當(dāng)瀏覽者訪問一個網(wǎng)頁時,瀏覽者的瀏覽器會向網(wǎng)頁所在服務(wù)器發(fā)出請求。當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此網(wǎng)頁所在的服務(wù)器會返回一個包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)瀏覽器的請求。
HTTP狀態(tài)碼的英文為HTTP Status Code。
下面是常見的HTTP狀態(tài)碼:
狀態(tài)碼描述
200請求成功
301資源(網(wǎng)頁等)被永久轉(zhuǎn)移到其它URL
404請求的資源(網(wǎng)頁等)不存在
500內(nèi)部服務(wù)器錯誤
HTTP狀態(tài)碼分類
HTTP狀態(tài)碼由三個十進(jìn)制數(shù)字組成,第一個十進(jìn)制數(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服務(wù)器端出現(xiàn)錯誤,常用 500
HTTP狀態(tài)碼列表:
狀態(tài)碼狀態(tài)碼英文名稱中文描述
100Continue繼續(xù)。客戶端應(yīng)繼續(xù)其請求
101Switching Protocols切換協(xié)議。服務(wù)器根據(jù)客戶端的請求切換協(xié)議。只能切換到更高級的協(xié)議,例如,切換到HTTP的新版本協(xié)議
200OK請求成功。一般用于GET與POST請求
201Created已創(chuàng)建。成功請求并創(chuàng)建了新的資源
202Accepted已接受。已經(jīng)接受請求,但未處理完成
203Non-Authoritative Information非授權(quán)信息。請求成功。但返回的meta信息不在原始的服務(wù)器,而是一個副本
204No Content無內(nèi)容。服務(wù)器成功處理,但未返回內(nèi)容。在未更新網(wǎng)頁的情況下,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔
205Reset Content重置內(nèi)容。服務(wù)器處理成功,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖??赏ㄟ^此返回碼清除瀏覽器的表單域
206Partial Content部分內(nèi)容。服務(wù)器成功處理了部分GET請求
300Multiple Choices多種選擇。請求的資源可包括多個位置,相應(yīng)可返回一個資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇
301Moved Permanently永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI,瀏覽器會自動定向到新URI。今后任何新的請求都應(yīng)使用新的URI代替
302Found臨時移動。與301類似。但資源只是臨時被移動??蛻舳藨?yīng)繼續(xù)使用原有URI
303See Other查看其它地址。與301類似。使用GET和POST請求查看
304Not Modified未修改。所請求的資源未修改,服務(wù)器返回此狀態(tài)碼時,不會返回任何資源??蛻舳送ǔ彺嬖L問過的資源,通過提供一個頭信息指出客戶端希望只返回在指定日期之后修改的資源
305Use Proxy使用代理。所請求的資源必須通過代理訪問
306Unused已經(jīng)被廢棄的HTTP狀態(tài)碼
307Temporary Redirect臨時重定向。與302類似。使用GET請求重定向
400Bad Request客戶端請求的語法錯誤,服務(wù)器無法理解
401Unauthorized請求要求用戶的身份認(rèn)證
402Payment Required保留,將來使用
403Forbidden服務(wù)器理解請求客戶端的請求,但是拒絕執(zhí)行此請求
404Not Found服務(wù)器無法根據(jù)客戶端的請求找到資源(網(wǎng)頁)。通過此代碼,網(wǎng)站設(shè)計(jì)人員可設(shè)置"您所請求的資源無法找到"的個性頁面
405Method Not Allowed客戶端請求中的方法被禁止
406Not Acceptable服務(wù)器無法根據(jù)客戶端請求的內(nèi)容特性完成請求
407Proxy Authentication Required請求要求代理的身份認(rèn)證,與401類似,但請求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán)
408Request Time-out服務(wù)器等待客戶端發(fā)送的請求時間過長,超時
409Conflict服務(wù)器完成客戶端的 PUT 請求時可能返回此代碼,服務(wù)器處理請求時發(fā)生了沖突
410Gone客戶端請求的資源已經(jīng)不存在。410不同于404,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設(shè)計(jì)人員可通過301代碼指定資源的新位置
411Length Required服務(wù)器無法處理客戶端發(fā)送的不帶Content-Length的請求信息
412Precondition Failed客戶端請求信息的先決條件錯誤
413Request Entity Too Large由于請求的實(shí)體過大,服務(wù)器無法處理,因此拒絕請求。為防止客戶端的連續(xù)請求,服務(wù)器可能會關(guān)閉連接。如果只是服務(wù)器暫時無法處理,則會包含一個Retry-After的響應(yīng)信息
414Request-URI Too Large請求的URI過長(URI通常為網(wǎng)址),服務(wù)器無法處理
415Unsupported Media Type服務(wù)器無法處理請求附帶的媒體格式
416Requested range not satisfiable客戶端請求的范圍無效
417Expectation Failed服務(wù)器無法滿足Expect的請求頭信息
500Internal Server Error服務(wù)器內(nèi)部錯誤,無法完成請求
501Not Implemented服務(wù)器不支持請求的功能,無法完成請求
502Bad Gateway作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請求時,從遠(yuǎn)程服務(wù)器接收到了一個無效的響應(yīng)
503Service Unavailable由于超載或系統(tǒng)維護(hù),服務(wù)器暫時的無法處理客戶端的請求。延時的長度可包含在服務(wù)器的Retry-After頭信息中
504Gateway Time-out充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時從遠(yuǎn)端服務(wù)器獲取請求
505HTTP Version not supported服務(wù)器不支持請求的HTTP協(xié)議的版本,無法完成處理
10.5.2 消息報頭
服務(wù)器傳遞給客戶端用于說明服務(wù)器的一些信息,以及將來繼續(xù)訪問該資源時的策略。
Location:Location響應(yīng)報頭域用于重定向接受者到一個新的位置。Server:Server響應(yīng)報頭域包含了服務(wù)器用來處理請求的軟件信息。?WWW-Authenticate:WWW-Authenticate響應(yīng)報頭域必須被包含在401(未授權(quán)的)響應(yīng)消息中下面是WWW-Authenticate響應(yīng)報頭域的一個,例子:WWW-Authenticate: Basic realm="Basic Auth Test!“Content-Encoding:Content-Encoding實(shí)體報頭域被使用作媒體類型的修飾符.Content-Language:Content-Language實(shí)體報頭域描述了資源所用的自然語言。Content-Length:? Content-Length實(shí)體報頭域用于指明正文的長度.Content-Type:Content-Type實(shí)體報頭域用語指明發(fā)送給接收者的實(shí)體正文的媒體類型。Last-Modified:Last-Modified實(shí)體報頭域用于指示資源最后的修改日期及時間。Expires: Expires實(shí)體報頭域給出響應(yīng)過期的日期和時間。Expires實(shí)體報頭域使用的日期和時間必須是RFC 1123中的日期格式,例如:?Expires: Thu, 15 Sep 2005 16:00:00 GMT
10.5.3 響應(yīng)正文
服務(wù)端返回給客戶端的HTML文本內(nèi)容,或者其他格式的數(shù)據(jù),比如:視頻流、圖片或者音頻數(shù)據(jù)。
如果請求的是HTML頁面,那么返回的就是HTML代碼。如果是JS就是JS代碼。

響應(yīng)案例.png
10.4 http協(xié)議的各版本
版本號詳情
HTTP/0.9只接受GET一種請求方法,沒有在通信中指定版本號,且不支持請求頭。由于該版本不支持POST方法,因此客戶端無法向服務(wù)器傳遞太多信息。
HTTP/1.0第一個在通信中指定的版本號,至今被廣泛采用,特別是在代理服務(wù)器中。
HTTP/1.1當(dāng)前版本號,持久連接被默認(rèn)采用,并能很好地配合代理服務(wù)器工作。還支持以管道方式在同時發(fā)送多個請求,以便降低線路負(fù)載,提高傳輸速度。
HTTP/2.0為了解決1.1版本利用率不高的問題,提出了HTTP/2.0版本。增加雙工模式,增加服務(wù)器推送的功能
當(dāng)前主流的協(xié)議版本還是HTTP/1.1版本。
HTTP/1.1與HTTP/1.0的區(qū)別
1、persistent connection(持久連接)
HTTP/1.0中,每對請求/ 響應(yīng)都使用一個新的連接。
HTTP/1.1則支持持久連接(默認(rèn))。
2、Host域
HTTP/1.1在請求消息頭多一個Host域;HTTP/1.0? 則沒有這個域,建立TCP連接的時候已經(jīng)指定了IP地址,而且默認(rèn)一個IP地址只對應(yīng)一個主機(jī)名,IP地址上只有一個host。
3、.帶寬優(yōu)化
HTTP/1.1加入了一個新的狀態(tài)碼100(Continue)??蛻舳耸孪劝l(fā)送一個只帶頭域的請求,如果服務(wù)器因?yàn)闄?quán)限拒絕了請求,就回送響應(yīng)碼 401(Unauthorized)
4、請求方法和狀態(tài)碼
HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT這些Request方法。
在HTTP/1.1中新增了24個狀態(tài)響應(yīng)碼,如409(Conflict)表示請求的資源與資源的當(dāng)前狀態(tài)發(fā)生沖突;410(Gone)表示服務(wù)器上的某個資源被永久性的刪除。
2人點(diǎn)贊
作者:Anwfly
鏈接:http://m.itdecent.cn/p/f44273904c3a
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。