HTTP協(xié)議總結(jié)記錄

HTTP協(xié)議是移動(dòng)端開(kāi)發(fā)中最常使用到的協(xié)議;客戶(hù)端的接口請(qǐng)求费韭、網(wǎng)頁(yè)內(nèi)容加載等都通過(guò)該協(xié)議完成數(shù)據(jù)傳輸别垮;這篇文章記錄HTTP協(xié)議相關(guān)的基礎(chǔ)知識(shí)內(nèi)容,并會(huì)補(bǔ)充一些與HTTP協(xié)議相關(guān)的其它網(wǎng)絡(luò)知識(shí)晶府;

  • 協(xié)議介紹
  • 關(guān)聯(lián)的網(wǎng)絡(luò)知識(shí)(TCP桂躏、IP、DNS等)
  • HTTP首部與響應(yīng)狀態(tài)碼
  • HTTPS通信安全

1川陆、協(xié)議介紹

HTTP是一種無(wú)狀態(tài)剂习、無(wú)長(zhǎng)連接(不同于Socket等)的客戶(hù)端與服務(wù)端之間的通信協(xié)議;

  • 無(wú)狀態(tài):HTTP協(xié)議本身不保存通信的狀態(tài)较沪,也就是說(shuō)所有的請(qǐng)求與響應(yīng)在協(xié)議層面上都不會(huì)被記錄鳞绕;
    但是在使用HTTP協(xié)議的很多應(yīng)用中,都希望能記錄一些狀態(tài)信息(比如在登錄后希望能記住登錄的狀態(tài)尸曼,在請(qǐng)求新的頁(yè)面時(shí)不需要重新去登錄)们何;為了解決這個(gè)問(wèn)題,引入了cookie技術(shù)控轿;
  • 無(wú)長(zhǎng)連接:HTTP在客戶(hù)端與服務(wù)端的通信過(guò)程中冤竹,不保持長(zhǎng)連接;數(shù)據(jù)的更新必須通過(guò)“請(qǐng)求->響應(yīng)”這種模式完成茬射,服務(wù)端不能主動(dòng)推送更新數(shù)據(jù)給客戶(hù)端鹦蠕;
    為了解決這一問(wèn)題,出現(xiàn)了Ajax在抛、Comet钟病、SPDY、全雙工通信的WebSocket等技術(shù)彌補(bǔ)這一缺陷刚梭,這些都是基于HTTP擴(kuò)展出來(lái)的技術(shù)肠阱;

2、與HTTP關(guān)聯(lián)的網(wǎng)絡(luò)知識(shí)(TCP望浩、IP辖所、DNS)

我們?cè)诿嬖嚨倪^(guò)程中,經(jīng)常會(huì)被問(wèn)道什么是“三次握手”等一些和網(wǎng)絡(luò)有關(guān)的基礎(chǔ)知識(shí)磨德,這本身并不屬于HTTP協(xié)議內(nèi)容缘回;但HTTP協(xié)議需要這些更低層的網(wǎng)絡(luò)模塊的支持才能實(shí)現(xiàn)通信吆视;接下來(lái)看看HTTP是如何與這些低層網(wǎng)絡(luò)模塊完成協(xié)作的;

我們先通過(guò)下面這張圖看一下計(jì)算機(jī)網(wǎng)絡(luò)的分層酥宴,和網(wǎng)絡(luò)通信過(guò)程中的數(shù)據(jù)包的傳遞流向啦吧,實(shí)際通信過(guò)程中可能存在更多的中間路由器轉(zhuǎn)發(fā):


網(wǎng)絡(luò)通信分層.png

通過(guò)一些不同的網(wǎng)絡(luò)設(shè)備(包括集線(xiàn)器、交換機(jī)拙寡、路由器等)把接入到互聯(lián)網(wǎng)內(nèi)的主機(jī)連接在一起授滓,以便讓這些主機(jī)實(shí)現(xiàn)互相通信;實(shí)現(xiàn)通信除了需要有物理設(shè)備連接外,還需要制定一些協(xié)議來(lái)完成數(shù)據(jù)的傳輸過(guò)程,這本身是一個(gè)非常復(fù)雜的過(guò)程宋税,因此對(duì)整個(gè)網(wǎng)絡(luò)通信按不同的功能劃分進(jìn)行了網(wǎng)絡(luò)分層继准;

分層的好處是可以方便網(wǎng)絡(luò)的維護(hù)與擴(kuò)展,只要制定好跨層之間的通信接口,在具體層的內(nèi)部可以自由的進(jìn)行擴(kuò)展更新;同時(shí)分層也降低了實(shí)現(xiàn)的復(fù)雜度,不同層只需要關(guān)注自己的那部分功能就好和橙,在網(wǎng)絡(luò)需要擴(kuò)展時(shí)不需要對(duì)整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行修改;

  • 物理層與數(shù)據(jù)鏈路層:提供數(shù)據(jù)傳輸?shù)奈锢砭€(xiàn)路支持造垛,還有部分協(xié)議和簡(jiǎn)單的數(shù)據(jù)驗(yàn)證功能魔招;其中集線(xiàn)器工作在物理層,交換機(jī)工作在數(shù)據(jù)鏈路層五辽;

  • 網(wǎng)絡(luò)層:也叫“網(wǎng)際層”办斑、“IP層”,負(fù)責(zé)連接不同的子網(wǎng)絡(luò)奔脐,企業(yè)或者一些機(jī)構(gòu)的內(nèi)部網(wǎng)絡(luò)通過(guò)網(wǎng)絡(luò)層俄周,接入到互聯(lián)網(wǎng)中;這一層通過(guò)IP協(xié)議實(shí)現(xiàn)把數(shù)據(jù)包傳送給目標(biāo)主機(jī)髓迎,內(nèi)部還有很多具體協(xié)議做支持(包括路由選擇峦朗、ARP地址解析協(xié)議等);路由器工作在這一層排龄;

  • 運(yùn)輸層:負(fù)責(zé)數(shù)據(jù)的可靠傳輸與交付波势;從應(yīng)用層過(guò)來(lái)的數(shù)據(jù)包一般比較大,并不適合在互聯(lián)網(wǎng)中傳輸橄维;在運(yùn)輸層首先會(huì)把接收到的數(shù)據(jù)包進(jìn)行分割尺铣,把大的數(shù)據(jù)包分割成很多小的數(shù)據(jù)包,并對(duì)分割后的數(shù)據(jù)包進(jìn)行編號(hào)争舞;在目標(biāo)主機(jī)上通過(guò)運(yùn)輸層把接收到的數(shù)據(jù)包按編號(hào)重新組合后交付給上層凛忿;TCP與UDP協(xié)議工作在這一層;

1竞川、UDP不提供可靠傳輸店溢,只做盡最大可能的數(shù)據(jù)交付工作叁熔;

2、TCP協(xié)議提供可靠傳輸服務(wù)床牧,也就是在傳輸過(guò)程中會(huì)對(duì)丟失的數(shù)據(jù)包進(jìn)行重傳荣回;上面說(shuō)的“三次握手”就是TCP協(xié)議中的內(nèi)容,其主要目的就是為了保障可靠傳輸服務(wù)戈咳,除了三次握手TCP還有一些其他方式保證可靠傳輸服務(wù)心软;

三次握手是指:發(fā)送端在發(fā)送一個(gè)數(shù)據(jù)包時(shí)會(huì)對(duì)這個(gè)數(shù)據(jù)包帶上SYN(TCP的標(biāo)志)標(biāo)志,接收端在接收到這個(gè)數(shù)據(jù)包后會(huì)返回一個(gè)帶有SYN/ACK標(biāo)志的數(shù)據(jù)包給發(fā)送端著蛙,客戶(hù)端在接收到SYN/ACK數(shù)據(jù)包后就知道服務(wù)端已經(jīng)接受到了數(shù)據(jù)删铃,在發(fā)送一個(gè)帶有ACK標(biāo)志的數(shù)據(jù)包給接收端,表示握手結(jié)束册踩;中間有任何一次握手?jǐn)嚅_(kāi)了泳姐,這個(gè)數(shù)據(jù)包都需要重傳;


三次握手.png

這里可以考慮一下為什么是三次握手暂吉,而不是兩次或四次;如果只有兩次握手缎患,接收端為了避免發(fā)送端重傳一個(gè)數(shù)據(jù)包慕的,在收到SYN數(shù)據(jù)包后需要發(fā)送SYN/ACk數(shù)據(jù)包,告訴發(fā)送端我已經(jīng)收到了這個(gè)數(shù)據(jù)包挤渔;但接收端并不知道發(fā)送端是否已經(jīng)收到了SYN/ACK數(shù)據(jù)包肮街,因此它會(huì)認(rèn)為客戶(hù)端可能不知道它已經(jīng)接收到數(shù)據(jù)包,所以它可能會(huì)不停地發(fā)送SYN/ACK數(shù)據(jù)包告訴發(fā)送端我已經(jīng)收到了判导,所以需要發(fā)送端在發(fā)送一個(gè)ACK數(shù)據(jù)包嫉父,告訴接收端我已經(jīng)知道你收到了這個(gè)數(shù)據(jù)包,這次握手可以結(jié)束了眼刃;在接受端收到ACK之后绕辖,就知道這個(gè)數(shù)據(jù)包已經(jīng)完成了,因此就可以結(jié)束握手了擂红;

  • 應(yīng)用層:這一層主要是向用戶(hù)提供各種不同服務(wù)的網(wǎng)絡(luò)協(xié)議仪际,其中DNS和HTTP都是工作在這一層;
    DNS(域名解析服務(wù))提供把域名解析到IP地址的服務(wù)昵骤;計(jì)算機(jī)都有自己的IP地址和MAC地址树碱,在IP層轉(zhuǎn)發(fā)數(shù)據(jù)包時(shí)會(huì)使用這兩個(gè)地址進(jìn)行路由選擇;但是這兩個(gè)地址并不符合人的記憶習(xí)慣变秦,所以在標(biāo)識(shí)主機(jī)時(shí)通過(guò)使用域名來(lái)方便理解(比如baidu.com等)成榜;DNS就是提供把域名解析成IP或通過(guò)IP反查域名的服務(wù)的;

3蹦玫、HTTP首部與響應(yīng)狀態(tài)碼

3.1赎婚、HTTP協(xié)議用于客戶(hù)端與服務(wù)端之間的通信刘绣;

客戶(hù)端發(fā)起對(duì)資源的請(qǐng)求,服務(wù)端負(fù)責(zé)處理請(qǐng)求并返回客戶(hù)端請(qǐng)求的資源惑淳;通過(guò)請(qǐng)求和響應(yīng)的交互完成通信额港;下面兩張圖分別展示了請(qǐng)求和響應(yīng)的報(bào)文格式:


請(qǐng)求報(bào)文.png

請(qǐng)求報(bào)文中主要包括三個(gè)部分,分別是“請(qǐng)求行”歧焦、“報(bào)文首部信息”移斩、“報(bào)文主體內(nèi)容”;“請(qǐng)求行”和“首部信息”統(tǒng)稱(chēng)為報(bào)文首部绢馍,在報(bào)文首部與報(bào)文主體之間通過(guò)空行(CR+LF)來(lái)分割向瓷;

  • 請(qǐng)求行:包括請(qǐng)求方法、請(qǐng)求的URI舰涌、和HTTP協(xié)議版本信息
  • 報(bào)文首部信息:請(qǐng)求報(bào)文首部信息一般包括幾種類(lèi)型的首部信息猖任,分別是“通用首部信息”、“請(qǐng)求首部信息”瓷耙、“實(shí)體首部信息”和“其他部分首部字段”朱躺;這些都是用來(lái)分別表示請(qǐng)求的各種條件和屬性的首部?jī)?nèi)容;
  • 報(bào)文主體內(nèi)容:可以為空搁痛,也可以傳遞狀態(tài)數(shù)據(jù)給服務(wù)端(POST請(qǐng)求等)长搀;
響應(yīng)報(bào)文.png

響應(yīng)報(bào)文中對(duì)應(yīng)也包括三部分信息,分別是“響應(yīng)行(也叫狀態(tài)行)”鸡典、“報(bào)文首部信息”源请、“報(bào)文主體內(nèi)容”;其中“狀態(tài)行”和“首部信息”統(tǒng)稱(chēng)為響應(yīng)報(bào)文首部彻况,在報(bào)文首部與報(bào)文主體之間通過(guò)空行(CR+LF)來(lái)分割谁尸;

  • 響應(yīng)行:包括HTTP協(xié)議版本,響應(yīng)狀態(tài)碼和解釋狀態(tài)碼對(duì)應(yīng)的原因短語(yǔ)纽甘;
  • 報(bào)文首部信息:響應(yīng)報(bào)文首部信息也包括幾種類(lèi)型的首部信息良蛮,分別是“通用首部信息”、“響應(yīng)首部信息”贷腕、“實(shí)體首部信息”和“其他部分首部字段”背镇;這些都是用來(lái)分別表示響應(yīng)的各種條件和屬性的首部?jī)?nèi)容;
  • 主體內(nèi)容:請(qǐng)求對(duì)應(yīng)的資源數(shù)據(jù)會(huì)在響應(yīng)報(bào)文的主體內(nèi)容中泽裳,可以為空(HEAD請(qǐng)求的響應(yīng))瞒斩;

3.2、HTTP存在不同的請(qǐng)求方法涮总,請(qǐng)求的資源會(huì)根據(jù)不同的請(qǐng)求方法作出不同的響應(yīng)

常用的請(qǐng)求方法包括以下這些:

  • GET:用來(lái)請(qǐng)求訪問(wèn)服務(wù)端的某個(gè)資源胸囱,指定的資源在經(jīng)過(guò)服務(wù)端解析后會(huì)返回響應(yīng)內(nèi)容(如果是文本,會(huì)直接返回瀑梗;如果是接口程序烹笔,會(huì)在程序執(zhí)行完后返回執(zhí)行的結(jié)果)裳扯;

  • HEAD:HEAD方法與GET方法一樣,但是不返回報(bào)文的主體內(nèi)容(body為空)谤职;

  • POST:POST請(qǐng)求可以傳輸請(qǐng)求的body信息饰豺;與GET的區(qū)別在于POST一般可以傳送數(shù)據(jù)量更大的數(shù)據(jù)體;

  • PUT:PUT方法用來(lái)傳輸文件允蜈,在請(qǐng)求的報(bào)文主體中包含文件內(nèi)容冤吨,在指定的URL中保存文件;由于PUT方法本身不帶驗(yàn)證機(jī)制饶套,任何人都可以上傳文件漩蟆,所以一般使用的比較少;實(shí)際使用中可以通過(guò)POST請(qǐng)求實(shí)現(xiàn)文件上傳功能妓蛮;

  • OPTION:OPTION方法用來(lái)確認(rèn)資源可以接收哪幾種請(qǐng)求方法怠李;通過(guò)返回可以知道這個(gè)資源可以使用哪幾種方式去請(qǐng)求;

  • DELETE:DELETE方法用于刪除指定URL的文件蛤克,與PUT的作用相反捺癞;也不提供驗(yàn)證機(jī)制,所以一般也使用的比較少构挤;

  • CONNECT:CONNECT方法要求與代理服務(wù)器通信時(shí)建立隧道翘簇,使用SSL進(jìn)行安全通信;

3.3儿倒、部分首部字段與Cookie技術(shù)的介紹

HTTP首部是HTTP報(bào)文的重要組成部分,他可以用來(lái)傳遞額外的重要信息(除報(bào)文主體之外的信息)呜笑;請(qǐng)求和響應(yīng)報(bào)文都會(huì)使用HTTP首部夫否,下面介紹幾種比較重要的首部字段;

  • 通用首部字段:請(qǐng)求報(bào)文和響應(yīng)報(bào)文都會(huì)使用的首部叫胁;

Cache-Control:該首部的值用于控制緩存的行為凰慈,如“Cache-Control : private, max-age=0, no-cache”

Connection:該首部字段有兩個(gè)作用;
1驼鹅、控制代理服務(wù)器不再轉(zhuǎn)發(fā)首部字段微谓;如“ Connection : Upgrade”表示在第一個(gè)代理服務(wù)器收到數(shù)據(jù)包后,會(huì)把Upgrade首部字段刪除后输钩,在繼續(xù)往下轉(zhuǎn)發(fā)豺型;
2、管理持久鏈接买乃;這個(gè)作用主要用于優(yōu)化性能姻氨,減少創(chuàng)建和關(guān)閉網(wǎng)絡(luò)連接的開(kāi)銷(xiāo);如“ Connection : Keep-Alive”剪验、“ Connection : Close”肴焊;

Transfer-Encoding:規(guī)定傳輸報(bào)文主體時(shí)的編碼方式前联,如“Transfer-Encoding : chunked”;

  • 請(qǐng)求首部字段:請(qǐng)求報(bào)文使用的首部娶眷,補(bǔ)充請(qǐng)求的附件內(nèi)容似嗤,客戶(hù)端信息等內(nèi)容;

Accept:代表用戶(hù)代理能夠處理的媒體類(lèi)型和類(lèi)型的優(yōu)先級(jí)届宠,如“ Accept : text/html; q=0.3, application/xml”

Accept-Encoding:告知服務(wù)器用戶(hù)代理支持的內(nèi)容編碼和內(nèi)容編碼的優(yōu)先級(jí)順序烁落,如“Accept-Encoding : gzip, deflate”

Authorization:發(fā)送用戶(hù)的認(rèn)證信息給服務(wù)端;

Max-Forwords:指定可經(jīng)過(guò)的最大服務(wù)器數(shù)目席揽,如“Max-Forwords : 3”表示可經(jīng)過(guò)3個(gè)服務(wù)器顽馋,每經(jīng)過(guò)一個(gè)代理服務(wù)器字段值會(huì)減一然后繼續(xù)往下發(fā)送,到值為0時(shí)幌羞,服務(wù)器就會(huì)立即返回響應(yīng)寸谜;

Range:用于范圍請(qǐng)求獲取實(shí)體的部分資源;如“ Range : 200-400”可獲取200字節(jié)到400字節(jié)之間的數(shù)據(jù)属桦;

User-Agent:會(huì)發(fā)送創(chuàng)建請(qǐng)求的瀏覽器和用戶(hù)代理名稱(chēng)等信息給服務(wù)端熊痴,也可以自己寫(xiě)入一些系統(tǒng)信息;

  • 響應(yīng)首部字段:響應(yīng)報(bào)文會(huì)使用的首部聂宾,補(bǔ)充了響應(yīng)的附件內(nèi)容果善;

Accept-Ranges:用于告知客戶(hù)端服務(wù)器是否能處理指定的范圍請(qǐng)求,存在兩個(gè)值系谐,能處理時(shí)為“Accept-Ranges : bytes”巾陕,不能處理時(shí)為“Accept-Ranges : none”;

ETag:用于標(biāo)識(shí)一個(gè)資源纪他,當(dāng)資源的內(nèi)容更新時(shí)鄙煤,URL沒(méi)有改變,但是ETag值對(duì)應(yīng)會(huì)發(fā)生改變茶袒;

Location:在需要重定向時(shí)梯刚,放入需要重定向訪問(wèn)的URL資源地址;

Server:返回客戶(hù)端當(dāng)前服務(wù)端的HTTP服務(wù)器信息薪寓;

WWW-Authenticate:告知客戶(hù)端訪問(wèn)指定資源時(shí)需要的認(rèn)證方法亡资,一般會(huì)和401狀態(tài)碼一起返回;

  • 實(shí)體報(bào)文首部:針對(duì)報(bào)文實(shí)體信息的首部向叉,補(bǔ)充與實(shí)體有關(guān)的信息锥腻;

Allow:用于告知客戶(hù)端請(qǐng)求的資源能接受的訪問(wèn)方法,如“Allow : GET, HEAD, POST”植康;

Content-Encoding:告知客戶(hù)端服務(wù)器對(duì)實(shí)體主體的內(nèi)容編碼方式旷太,如“Content-Encoding : gzip”;

Content-Length:實(shí)體主體的內(nèi)容大小供璧;

Content-Type:說(shuō)明實(shí)體主體內(nèi)的對(duì)象的媒體類(lèi)型

Cookie的概念和與Cookie有關(guān)的首部字段
HTTP協(xié)議本身是無(wú)狀態(tài)的存崖,即協(xié)議本身不保存請(qǐng)求和響應(yīng)的任何信息,也就無(wú)法根據(jù)之前的狀態(tài)進(jìn)行下一次請(qǐng)求的處理睡毒;

但是很多實(shí)際的應(yīng)用場(chǎng)景中需要記錄一些用戶(hù)信息的狀態(tài)值来惧;比如一個(gè)需要登錄才能訪問(wèn)的網(wǎng)站,在完成登錄之后如果不記錄登錄的狀態(tài)演顾,在繼續(xù)訪問(wèn)一些其他頁(yè)面時(shí)供搀,又要去重新登錄,這顯得很不合理钠至;因此引入了Cookie技術(shù)解決此問(wèn)題葛虐;

服務(wù)端在首次接收到用戶(hù)的請(qǐng)求信息后,會(huì)根據(jù)用戶(hù)的信息生成一個(gè)可以唯一標(biāo)識(shí)用戶(hù)身份的字符串信息棉钧;然后通過(guò)響應(yīng)首部字段“Set-Cookie”把這一信息返回給客戶(hù)端屿脐,客戶(hù)端在接收到返回的Set-Cookie后,會(huì)把信息在本地保存下來(lái)宪卿,在下次請(qǐng)求時(shí)通過(guò)請(qǐng)求首部字段“Cookie”把這一信息帶上的诵,服務(wù)端在收到包含Cookie的請(qǐng)求后做一下驗(yàn)證就知道是之前用戶(hù)發(fā)送過(guò)來(lái)的請(qǐng)求,因此可以用來(lái)標(biāo)記用戶(hù)的身份信息佑钾;

3.4西疤、常見(jiàn)響應(yīng)狀態(tài)碼介紹

響應(yīng)狀態(tài)碼代表了HTTP請(qǐng)求的處理結(jié)果,可以表示服務(wù)端處理請(qǐng)求是否正常完成或者是出現(xiàn)了錯(cuò)誤休溶;常見(jiàn)的狀態(tài)碼一般分為2XX代赁、3XX、4XX兽掰、5XX等管跺;其中1XX的狀態(tài)碼比較少見(jiàn),它代表請(qǐng)求正在處理禾进;

  • 2XX狀態(tài)碼,請(qǐng)求成功的返回狀態(tài)碼
    200 OK:請(qǐng)求成功廉涕,結(jié)果正常返回泻云;
    204 NO Content:請(qǐng)求處理成功,但沒(méi)有數(shù)據(jù)內(nèi)容可以返回狐蜕,即返回的報(bào)文不包含主體內(nèi)容宠纯;一般用在只需要從客戶(hù)端發(fā)送信息,不需要服務(wù)端返回新數(shù)據(jù)的情況层释;
    206 Partial Content:表示處理范圍請(qǐng)求成功婆瓜,返回了指定范圍的數(shù)據(jù)內(nèi)容,可以用在下載功能的斷點(diǎn)續(xù)傳上;根據(jù)Content-Range首部字段指定范圍的大辛住个初;

  • 3XX狀態(tài)碼,請(qǐng)求需要重定向
    301 Moved Permanently:資源被永久性的重定向猴蹂,以后訪問(wèn)資源需要使用資源的新URL地址院溺;
    302 Found:臨時(shí)性重定向,希望本次訪問(wèn)可以使用新指定的URL進(jìn)行磅轻;
    303 See Other:與302效果一樣珍逸,不同之處在于,明確指定這次請(qǐng)求應(yīng)該以GET方式訪問(wèn)新URL聋溜;
    304 Not Modified:當(dāng)發(fā)送了附帶條件的請(qǐng)求后谆膳,服務(wù)端允許訪問(wèn);但因發(fā)生了請(qǐng)求未滿(mǎn)足條件的情況(附帶條件沒(méi)有被滿(mǎn)足)撮躁,直接返回了304(資源未更新漱病,可使用客戶(hù)端緩存);304返回不包含任何主體內(nèi)容馒胆;

  • 4XX狀態(tài)碼缨称,代表客戶(hù)端請(qǐng)求體發(fā)生了錯(cuò)誤
    400 Bad Request:請(qǐng)求報(bào)文中存在語(yǔ)法錯(cuò)誤需要修改;
    401 Unauthorized:表示請(qǐng)求的資源需要使用通過(guò)HTTP認(rèn)證的認(rèn)證信息祝迂;如果已經(jīng)進(jìn)行過(guò)一次認(rèn)證睦尽,則表示認(rèn)證失敗型雳;
    403 Forbidden:訪問(wèn)請(qǐng)求的資源時(shí)被服務(wù)器拒絕了当凡;可以在響應(yīng)的主體中說(shuō)明拒絕原因;
    404 Not Found:在服務(wù)器上沒(méi)有找到請(qǐng)求的資源纠俭;或者是服務(wù)器拒絕請(qǐng)求但不想說(shuō)明理由時(shí)使用沿量;

  • 5XX狀態(tài)碼,代表服務(wù)端處理請(qǐng)求時(shí)發(fā)生了錯(cuò)誤
    500 Internet Server Error:服務(wù)器在處理請(qǐng)求時(shí)發(fā)生了錯(cuò)誤冤荆,一般很有可能是服務(wù)端的程序bug朴则;
    503 Service Unavailable:服務(wù)端處于超負(fù)載或正在停機(jī)維護(hù)中,一般還會(huì)在響應(yīng)首部中帶上Retry-After指示可以恢復(fù)訪問(wèn)的時(shí)間值钓简;

4乌妒、 HTTPS通信安全

HTTPS(HTTP Secure)的主要作用是可以對(duì)通信方的身份進(jìn)行確認(rèn),并在通信過(guò)程中對(duì)數(shù)據(jù)進(jìn)行加密以確保數(shù)據(jù)的安全性外邓,使用的是混合加密方式撤蚊;這些是通過(guò)SSL(安全套接層)協(xié)議完成的,SSL使用證書(shū)機(jī)制來(lái)驗(yàn)證身份损话,使用加密算法來(lái)保證數(shù)據(jù)傳輸?shù)陌踩裕?/p>

在HTTP數(shù)據(jù)包下發(fā)到運(yùn)輸層之前侦啸,增加了SSL層的調(diào)用槽唾;SSL是獨(dú)立于HTTP之外的協(xié)議,所以應(yīng)用層的其他協(xié)議也可以使用SSL做數(shù)據(jù)加密處理光涂;其中TLS協(xié)議是基于SSL3.0的庞萍,目前TLS的最新版本是TLS1.2;既可以使用SSL3.0協(xié)議也可以使用TLS協(xié)議顶捷,所以有時(shí)也會(huì)叫SSL/TLS1.2協(xié)議挂绰;

對(duì)通信方身份的確認(rèn)主要是通過(guò)CA證書(shū)實(shí)現(xiàn)的;由認(rèn)證機(jī)構(gòu)頒發(fā)的數(shù)字簽名證書(shū)很難被仿制服赎,所以只要驗(yàn)證了證書(shū)的簽名沒(méi)有問(wèn)題葵蒂,就可以確認(rèn)訪問(wèn)的服務(wù)器的身份,可以避免第三方偽裝的服務(wù)器重虑;如果客戶(hù)端端也存在認(rèn)證證書(shū)践付,則可以確認(rèn)通信雙方的身份,但是一般只有服務(wù)端才會(huì)布置CA證書(shū)缺厉;

通信過(guò)程中的數(shù)據(jù)加密使用的是混合加密方式永高,即既包括非對(duì)稱(chēng)加密算法也包括對(duì)稱(chēng)加密算法,共同保證數(shù)據(jù)傳輸?shù)陌踩裕?/p>

在客戶(hù)端發(fā)送了請(qǐng)求給服務(wù)端后提针,服務(wù)端首先會(huì)返回認(rèn)證證書(shū)信息給客戶(hù)端命爬;客戶(hù)端在接收到證書(shū)后,會(huì)驗(yàn)證證書(shū)的有效性辐脖,一般是驗(yàn)證證書(shū)的有效期饲宛,然后根據(jù)植入到手機(jī)系統(tǒng)中的CA根證書(shū)驗(yàn)證服務(wù)端返回的證書(shū)簽名是否有效(即驗(yàn)證是否是有認(rèn)證機(jī)構(gòu)簽名的證書(shū)),如果驗(yàn)證通過(guò)嗜价,則會(huì)生成一串“隨機(jī)碼”艇抠,并使用證書(shū)中公鑰信息對(duì)這個(gè)隨機(jī)碼做加密處理,然后發(fā)送到服務(wù)端久锥,服務(wù)端接收到加密的隨機(jī)碼后家淤,用私鑰對(duì)數(shù)據(jù)做解密處理,得到客戶(hù)端發(fā)送過(guò)來(lái)的隨機(jī)碼瑟由;之后這個(gè)“隨機(jī)碼”會(huì)被用作對(duì)稱(chēng)加密算法的密鑰絮重,服務(wù)端與客戶(hù)端接下來(lái)的數(shù)據(jù)傳輸都會(huì)使用對(duì)稱(chēng)加密算法做加密處理;

最后

這篇文章記錄了關(guān)于HTTP協(xié)議的基礎(chǔ)內(nèi)容和 與HTTP相關(guān)的其他網(wǎng)絡(luò)基礎(chǔ)知識(shí)歹苦;方便自己后續(xù)可以快速的回顧復(fù)習(xí)這部分的內(nèi)容绿鸣;HTTP協(xié)議還會(huì)涉及到一些其他的關(guān)聯(lián)內(nèi)容,如怎樣更安全的完成身份驗(yàn)證暂氯、緩存處理機(jī)制、網(wǎng)關(guān)服務(wù)器亮蛔、預(yù)防網(wǎng)絡(luò)攻擊等痴施,有些不屬于HTTP協(xié)議本身的內(nèi)容,但是卻是在協(xié)議實(shí)際使用中需要考慮的問(wèn)題;如果需要了解更多這方面內(nèi)容辣吃,建議可以查看一些對(duì)應(yīng)主題的技術(shù)文章來(lái)加深理解动遭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市神得,隨后出現(xiàn)的幾起案子厘惦,更是在濱河造成了極大的恐慌,老刑警劉巖哩簿,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵蕉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡节榜,警方通過(guò)查閱死者的電腦和手機(jī)羡玛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宗苍,“玉大人稼稿,你說(shuō)我怎么就攤上這事』淇撸” “怎么了让歼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)丽啡。 經(jīng)常有香客問(wèn)我谋右,道長(zhǎng),這世上最難降的妖魔是什么碌上? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任倚评,我火速辦了婚禮,結(jié)果婚禮上馏予,老公的妹妹穿的比我還像新娘天梧。我一直安慰自己,他們只是感情好霞丧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布呢岗。 她就那樣靜靜地躺著,像睡著了一般蛹尝。 火紅的嫁衣襯著肌膚如雪后豫。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,262評(píng)論 1 308
  • 那天突那,我揣著相機(jī)與錄音挫酿,去河邊找鬼。 笑死愕难,一個(gè)胖子當(dāng)著我的面吹牛早龟,可吹牛的內(nèi)容都是我干的惫霸。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼葱弟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼壹店!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起芝加,我...
    開(kāi)封第一講書(shū)人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤硅卢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后藏杖,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體将塑,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年制市,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抬旺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡祥楣,死狀恐怖开财,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情误褪,我是刑警寧澤责鳍,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站兽间,受9級(jí)特大地震影響历葛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嘀略,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一恤溶、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帜羊,春花似錦咒程、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至奶段,卻和暖如春饥瓷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痹籍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工呢铆, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蹲缠。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓棺克,卻偏偏與公主長(zhǎng)得像鳖宾,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子逆航,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359