摘要:請(qǐng)求的請(qǐng)求行由請(qǐng)求方法請(qǐng)求協(xié)議版本組成,響應(yīng)的狀態(tài)行為協(xié)議及版本響應(yīng)狀態(tài)碼響應(yīng)的文本描述。表示此必須用于和傳輸,等腳本不能操作。
HTTP請(qǐng)求方法
HTTP請(qǐng)求由三部分組成,分別是:請(qǐng)求行(狀態(tài)行)、請(qǐng)求頭、請(qǐng)求正文。請(qǐng)求的請(qǐng)求行由請(qǐng)求方法、請(qǐng)求URI、協(xié)議版本組成,響應(yīng)的狀態(tài)行為協(xié)議及版本、響應(yīng)狀態(tài)碼、響應(yīng)的文本描述。
// 請(qǐng)求行 GET /index.html HTTP/1.1 Host: hacker.jp Cookie:sid=1342077140226742 // 狀態(tài)行 HTTP/1.1 200 ok Date: thu, 12 Jul 2012 07:12:20 GMT Server: Apache
常見(jiàn)的HTTP請(qǐng)求方法如下:
GET:請(qǐng)求指定頁(yè)面信息,返回實(shí)體主體
HEAD:類似于get請(qǐng)求,只不過(guò)返回的響應(yīng)沒(méi)有具體的內(nèi)容,只有報(bào)頭
POST:提交數(shù)據(jù)進(jìn)行處理,數(shù)據(jù)被包在請(qǐng)求體中。
PUT:提交數(shù)據(jù)取代資源內(nèi)容。
DELETE:請(qǐng)求刪除某些資源。
POST的常見(jiàn)編碼方式HTTP協(xié)議規(guī)定POST提交的數(shù)據(jù)必須放在消息主體中,但協(xié)議并沒(méi)有規(guī)定數(shù)據(jù)必須使用什么編碼方式,實(shí)際上開(kāi)發(fā)者可以自己決定消息主體的格式。服務(wù)器通常是根據(jù)請(qǐng)求頭中的Content-Type字段來(lái)獲知請(qǐng)求中的消息主體是用何種方式編碼,再對(duì)主體進(jìn)行解析。
application/x-www-form-urlencoded
這是最常見(jiàn)的POST提交數(shù)據(jù)的方式,瀏覽器原生的form表單,如果不設(shè)置enctype屬性,那么最終就會(huì)以application/x-www-form-urlencoded方式提交數(shù)據(jù),提交的數(shù)據(jù)按照key1=val1&key2=val2的方式進(jìn)行編碼,key和val都進(jìn)行了URL轉(zhuǎn)碼,我們使用Ajax提交數(shù)據(jù)時(shí),默認(rèn)也是使用這種方式。
xhr.open("POST","http://www.example.com",true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
multipart/form-data
這是常用來(lái)提交文件的編碼方式,我們使用表單來(lái)上傳文件時(shí),必須讓form的enctype=multipart/form-data,上面提到的這兩種方式都是瀏覽器原生支持的。
xhr.open("POST","http://www.example.com",true); xhr.setRequestHeader("Content-Type", "multipart/form-data");
application/json
現(xiàn)在越來(lái)越多的請(qǐng)求都將Content-Type:application/json,用來(lái)告訴瀏覽器消息主體是序列化的JSON字符串,除了低版本的IE之外的各大瀏覽器都原生支持JOSN.stringify,服務(wù)器端也都用處理JSON的
xhr.open("POST","http://www.example.com",true); xhr.setRequestHeader("Content-Type", "application/json");
text/xml
它是一種使用HTTP作為傳輸協(xié)議,XML作為編碼方式的遠(yuǎn)程調(diào)用規(guī)范,它的使用也很廣泛,能很好的支持已有的XML-RPC服務(wù),不過(guò),XML結(jié)構(gòu)還是過(guò)于臃腫,一般場(chǎng)景使用JSON會(huì)更靈活方便。
xhr.open("POST","http://www.example.com",true); xhr.setRequestHeader("Content-Type", "text/xml");HTTP狀態(tài)碼
以下是常見(jiàn)的狀態(tài)碼:
100:初始請(qǐng)求已經(jīng)接受,客戶端應(yīng)該繼續(xù)發(fā)生請(qǐng)求的其余部分,這個(gè)臨時(shí)響應(yīng)是用來(lái)通知客戶端它的部分請(qǐng)求已被服務(wù)器接受且未被拒絕,如果請(qǐng)求完成,忽略這個(gè)響應(yīng),服務(wù)器必須在請(qǐng)求完成后向客戶端發(fā)送一個(gè)最終響應(yīng)。
200:請(qǐng)求成功
204:表示服務(wù)器成功處理請(qǐng)求,其返回的響應(yīng)不含有實(shí)體的主體部分,204沒(méi)有響應(yīng)體,在響應(yīng)頭后的第一個(gè)空行結(jié)束。
206:客戶端發(fā)送了帶有Range頭的GET請(qǐng)求,服務(wù)器處理部分GET請(qǐng)求,類似迅雷這種HTTP下載工具使用此類響應(yīng)實(shí)現(xiàn)斷點(diǎn)續(xù)傳或者將一個(gè)大的文檔分解為多個(gè)下載段同時(shí)下載。該請(qǐng)求必須包含Content-Range頭信息來(lái)指示希望得到的內(nèi)容范圍。
301:永久重定向,請(qǐng)求的資源已經(jīng)永久移動(dòng)到新位置,新的資源URI在響應(yīng)頭中的location字段中。如果這不是一個(gè)GET或者HEAD請(qǐng)求,瀏覽器禁止自動(dòng)進(jìn)行重定向。
302:臨時(shí)重定向,如果用戶把URI保存成書簽,302不會(huì)像301那樣去更新書簽。并且除非在Cache-Control或Expires中進(jìn)行指定,瀏覽器不會(huì)緩存該響應(yīng)。
303:303和302有著相同的功能,不同的是303明確要求客戶端采用GET方法獲取資源。
304:服務(wù)器資源未改變,可直接使用客戶端未過(guò)期的緩存。
400:語(yǔ)義有錯(cuò)誤,當(dāng)前請(qǐng)求無(wú)法被服務(wù)器理解。
401:當(dāng)前請(qǐng)求需要用戶驗(yàn)證,該響應(yīng)頭必須包含被請(qǐng)求資源的www-Authenticate信息頭用以詢問(wèn)用戶信息??蛻舳丝梢灾匦绿峤灰粋€(gè)包含authenticate頭信息的請(qǐng)求。如果當(dāng)前請(qǐng)求已經(jīng)包含了認(rèn)證信息,401表示服務(wù)器驗(yàn)證已拒絕了那些證書。
403:資源不可用,服務(wù)器拒絕客戶端的請(qǐng)求,通常由于服務(wù)器上文件或目錄的權(quán)限所致
404:資源不存在。
500:服務(wù)器錯(cuò)誤
502:服務(wù)器作為網(wǎng)關(guān)或者代理時(shí),為了完成請(qǐng)求訪問(wèn)下一個(gè)服務(wù)器,當(dāng)該服務(wù)器返回了非法的應(yīng)答。
503:服務(wù)器由于維護(hù)或者負(fù)載過(guò)重未能應(yīng)答。
持久連接在HTTP1.0中默認(rèn)是短連接,在HTTP1.1中所有的連接都是Keep-alive的長(zhǎng)連接。在HTTP1.0中,一個(gè)事務(wù)就是一個(gè)TCP連接,在一個(gè)請(qǐng)求結(jié)束后,TCP連接關(guān)閉,后面的HTTP請(qǐng)求將打開(kāi)新的TCP連接。HTTP1.1允許HTTP在事務(wù)處理結(jié)束以后將TCP連接保持在打開(kāi)狀態(tài),后面的HTTP請(qǐng)求依然可以通過(guò)這個(gè)TCP連接繼續(xù)傳送。
持久連接的優(yōu)點(diǎn)如下:
每次建立TCP連接都要經(jīng)過(guò)三次握手,持久連接只需要進(jìn)行一次連接的建立。
由于TCP連接慢啟動(dòng)的特性,使用過(guò)的連接速度更快。
每個(gè)連接對(duì)于服務(wù)器和客戶端來(lái)說(shuō)都是負(fù)擔(dān)。
持久連接的構(gòu)建過(guò)程:客戶端發(fā)出請(qǐng)求,請(qǐng)求頭部包含connection:keep-alive,服務(wù)器接受請(qǐng)求并響應(yīng)中帶有字段connection:keep-alive。設(shè)置Keep-Alive:max=5,timeout=120。timeout表示持續(xù)時(shí)間,max表示還可以傳輸多少個(gè)HTTP請(qǐng)求,如果使用持久連接,一定要正確上傳content-length字段描述請(qǐng)求體的長(zhǎng)度,持久連接依靠content-length字段來(lái)分割HTTP請(qǐng)求。HTTP1.1默認(rèn)是開(kāi)啟持久連接,只有在首部包含connection:close才會(huì)在HTTP事務(wù)結(jié)束之后關(guān)閉TCP連接。
管線化:HTTP1.1允許在持久連接上使用管道,這樣就不用等待前一個(gè)請(qǐng)求的響應(yīng),直接在官道上發(fā)送第二個(gè)請(qǐng)求,在高延遲的情況下提高性能。但是管線化也有相應(yīng)的缺點(diǎn):
不是持久連接不能使用管道。
必須按照相同的順序回送響應(yīng),因?yàn)閳?bào)文沒(méi)有標(biāo)簽,否則順序就會(huì)亂掉。
因?yàn)榭梢噪S時(shí)關(guān)閉持久連接,所以要隨時(shí)準(zhǔn)備重發(fā)。
不應(yīng)該使用管道化發(fā)送重復(fù)請(qǐng)求會(huì)有副作用的請(qǐng)求,比如表單提交。
CookieHTTP是無(wú)狀態(tài)協(xié)議,HTTP協(xié)議自身不保存通信狀態(tài),因此就引入cookie來(lái)管理請(qǐng)求狀態(tài)。在請(qǐng)求的響應(yīng)頭部中,設(shè)置Set-cookie字段,瀏覽器接收到cookie后存儲(chǔ)在本地,如果設(shè)置cookie的過(guò)期時(shí)間,則cookie為會(huì)話cookie,將會(huì)存儲(chǔ)在內(nèi)存中,瀏覽器關(guān)閉cookie被清除,否則,cookie為持久cookie,存儲(chǔ)在本地硬盤里。
cookie的屬性如下所示:document.cookie="key=value;expiress=失效時(shí)間;path=路徑;domain=域名;secure;HttpOnly"
Domain:域,表示當(dāng)前cookie所屬于哪個(gè)域會(huì)子域。默認(rèn)為當(dāng)前請(qǐng)求的主域名。
Path:cookie所屬路徑,只有當(dāng)同域同路徑下的請(qǐng)求才會(huì)攜帶上cookie。
expiress/max-age:表示有效期,expiress是一個(gè)時(shí)間,過(guò)了該時(shí)間,cookie就會(huì)被清除。max-age指定當(dāng)前cookie多長(zhǎng)時(shí)間后失效。
secure:表示該cookie只能用https傳輸,一般用于包含認(rèn)證信息的cookie。
httponly:表示此cookie必須用于http和https傳輸,javaScript等腳本不能操作cookie。
通信數(shù)據(jù)轉(zhuǎn)發(fā)程序代理:代理服務(wù)器的基本行為就是接收客戶端發(fā)送的請(qǐng)求后轉(zhuǎn)發(fā)給其他服務(wù)器,代理不改變請(qǐng)求URI,會(huì)直接發(fā)送給持有資源的源服務(wù)器。使用代理服務(wù)器的理由有:
利用緩存技術(shù)減少網(wǎng)絡(luò)帶寬的流量,代理轉(zhuǎn)發(fā)響應(yīng)時(shí),緩存代理會(huì)預(yù)先將資源的副本保存在代理服務(wù)器上。當(dāng)代理再次接受到對(duì)相同資源的請(qǐng)求時(shí),就可以不從源服務(wù)器那里獲取資源,而是將之前緩存的資源作為響應(yīng)返回。
組織內(nèi)部針對(duì)特定網(wǎng)站的訪問(wèn)控制。
以獲取訪問(wèn)日志為主要目的。
網(wǎng)關(guān):網(wǎng)關(guān)是轉(zhuǎn)發(fā)其他服務(wù)器通信數(shù)據(jù)的服務(wù)器,網(wǎng)關(guān)可以使通信線路上的服務(wù)器提供非HTTP協(xié)議服務(wù)。利用網(wǎng)關(guān)可以提高通信的安全性。因?yàn)榭梢栽诳蛻舳伺c網(wǎng)關(guān)之間的通信線路上加密以確保連接的安全。
隧道:隧道可按要求建立起一條與其他服務(wù)器的通信線路,屆時(shí)使用SSL等加密手段進(jìn)行通信,隧道的目的是確??蛻舳四芘c服務(wù)器進(jìn)行安全的通信。隧道本身不會(huì)去解析HTTP請(qǐng)求,它會(huì)保持請(qǐng)求原樣中轉(zhuǎn)給后面的服務(wù)器。
HTTP緩存以下是有關(guān)HTTP緩存的重要字段:
expires:HTTP1.0響應(yīng)頭字段,告訴瀏覽器緩存的過(guò)期時(shí)間,由于返回的是服務(wù)器時(shí)間,如果時(shí)鐘不同步,跨時(shí)區(qū)等問(wèn)題導(dǎo)致客戶端時(shí)間與服務(wù)器時(shí)間不一致,容易導(dǎo)致較大誤差,HTTP1.1以后使用Cache-Control:Max-age=n秒替代。
Cache-Control:優(yōu)先級(jí)高于expires,設(shè)置緩存多少時(shí)間后過(guò)期,其值可以為以下:
public:客戶端和代理服務(wù)器都可緩存 private:只能被客戶端緩存。 no-cache:響應(yīng)消息不能緩存,使用協(xié)商緩存來(lái)驗(yàn)證緩存數(shù)據(jù) no-store:響應(yīng)消息不能緩存,強(qiáng)制緩存和協(xié)商緩存都不能使用 max-age:緩存的過(guò)期時(shí)間
Last-Modified/If-Modified-Since:響應(yīng)頭/請(qǐng)求頭字段,需要配合Cache-Control使用,當(dāng)資源過(guò)期時(shí),發(fā)現(xiàn)有Last-Modified聲明,則再次請(qǐng)求時(shí)請(qǐng)求頭會(huì)攜帶If-Modified-Since,表示請(qǐng)求時(shí)間,服務(wù)器接收到請(qǐng)求后,將Last-Modified字段和If-Modified-Since字段進(jìn)行對(duì)比,若資源未修改,則返回304,告訴瀏覽器繼續(xù)使用本地緩存。
Etag/If-None-Match:響應(yīng)頭/請(qǐng)求頭字段,需要配合Cache-Control使用,當(dāng)資源過(guò)期后,發(fā)現(xiàn)有Etag聲明,再次請(qǐng)求時(shí)會(huì)攜帶上If-None-Match字段(上次請(qǐng)求的Etag),服務(wù)器接受到請(qǐng)求后,將Etag和If-None-Match進(jìn)行對(duì)比,若資源未修改,則返回304,告訴瀏覽器繼續(xù)使用本地緩存。
Etag和Last-Modified的區(qū)別:
1:Last-Modified的單位是s,所以對(duì)于1s以內(nèi)的修改是不會(huì)發(fā)生變化。 2:對(duì)文件只是打開(kāi)后保存,沒(méi)有做內(nèi)容上的修改,Last-Modified也會(huì)變化,Etag不會(huì)。
緩存流程:在客戶端第一次請(qǐng)求時(shí),服務(wù)器返回一個(gè)緩存時(shí)間,在該緩存時(shí)間內(nèi),執(zhí)行強(qiáng)制緩存(直接使用本地緩存,不再發(fā)送請(qǐng)求),緩存過(guò)期后,執(zhí)行協(xié)商緩存,請(qǐng)求會(huì)攜帶上If-None-Match/If-Modified-Since字段,服務(wù)器會(huì)判斷相應(yīng)字段,如果服務(wù)器資源沒(méi)有更新,返回304狀態(tài)碼,告訴瀏覽器繼續(xù)使用本地緩存,否者,服務(wù)器返回200狀態(tài)碼和更新后的資源。
瀏覽器刷新行為的區(qū)別:url+enter或a標(biāo)簽是可以使用本地緩存(強(qiáng)制緩存),F(xiàn)5刷新時(shí),瀏覽器請(qǐng)求頭Cache-Control:max-age=0,采用協(xié)商緩存機(jī)制,Ctrl+F5是不使用任何緩存,瀏覽器請(qǐng)求頭Cache-controle:no-cache,并且沒(méi)有If-None-Match或If-Modified-Since等字段,服務(wù)器只能返回最新資源。
HTTP首部 connectionconnection的主要作用:控制不再轉(zhuǎn)發(fā)的首部字段,和管理持久連接。當(dāng)前請(qǐng)求字段connection的值為首部字段的列表(如connection:keep-alive,upgrade)時(shí),代理服務(wù)器在接收到請(qǐng)求后,會(huì)將請(qǐng)求中的這些首部字段刪除后,再轉(zhuǎn)發(fā)給源服務(wù)器。
HTTP1.1版本默認(rèn)的連接都是持久連接,當(dāng)想明確斷開(kāi)連接時(shí),需要指定connection:close。HTTP1.0版本默認(rèn)的連接都是非持久連接,需要使用持久連接,則需要指定connection:keep-alive。
其他常用首部字段Date:表明HTTP請(qǐng)求的時(shí)間
Pragma:指定pragma:no-cache,要求中間服務(wù)器不緩存資源,是HTTP1.0的字段,為了保證兼容性,一般需要指定Cache-Control:no-cache和Pragma:no-cahce。
Accept:通知服務(wù)器可處理的媒體類型及相對(duì)優(yōu)先級(jí)。其值為Accept:text/html,application/xhtml+xml,image/png;q=0.9,q=0.8。
Authorization:用來(lái)告知服務(wù)器,用戶代理的認(rèn)證信息。
Location:配合3XX的重定向狀態(tài)碼,告知瀏覽器新資源所在的URI。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/61937.html
摘要:包含的協(xié)議協(xié)議。表示發(fā)送端發(fā)送數(shù)據(jù)到接收到對(duì)端數(shù)據(jù)所需的往返時(shí)間在中使用了兩種加密技術(shù),分別為對(duì)稱加密和非對(duì)稱加密。 一、前言 主要包括:1、http基礎(chǔ):TCP/IP,TCP協(xié)議,IP協(xié)議,DNS協(xié)議,URI與URL; 2、http協(xié)議:http報(bào)文,http方法,http狀態(tài)碼,常見(jiàn)問(wèn)題 名詞解釋: (1)HTTP(HyperText Transfer Protocol)超文本傳輸...
摘要:正式作為標(biāo)準(zhǔn)被公布是在年的月,版本被命名為。網(wǎng)絡(luò)基礎(chǔ)通常使用的網(wǎng)絡(luò)包括互聯(lián)網(wǎng)是在協(xié)議族的基礎(chǔ)上運(yùn)作的。協(xié)議族計(jì)算機(jī)與網(wǎng)絡(luò)設(shè)備要相互通信,雙方就必須基于相同的方法,我們把這些規(guī)則稱之為協(xié)議。 使用HTTP協(xié)議訪問(wèn)Web 在瀏覽器地址欄內(nèi)輸入U(xiǎn)RL之后,信息會(huì)被發(fā)送往某處,然后從某處獲得回復(fù),內(nèi)容就會(huì)顯示在Web頁(yè)面上。像這種通過(guò)發(fā)送請(qǐng)求獲取服務(wù)器資源的Web瀏覽器,都可稱為客戶端。(c...
摘要:正式作為標(biāo)準(zhǔn)被公布是在年的月,版本被命名為。網(wǎng)絡(luò)基礎(chǔ)通常使用的網(wǎng)絡(luò)包括互聯(lián)網(wǎng)是在協(xié)議族的基礎(chǔ)上運(yùn)作的。協(xié)議族計(jì)算機(jī)與網(wǎng)絡(luò)設(shè)備要相互通信,雙方就必須基于相同的方法,我們把這些規(guī)則稱之為協(xié)議。 使用HTTP協(xié)議訪問(wèn)Web 在瀏覽器地址欄內(nèi)輸入U(xiǎn)RL之后,信息會(huì)被發(fā)送往某處,然后從某處獲得回復(fù),內(nèi)容就會(huì)顯示在Web頁(yè)面上。像這種通過(guò)發(fā)送請(qǐng)求獲取服務(wù)器資源的Web瀏覽器,都可稱為客戶端。(c...
摘要:網(wǎng)絡(luò)基礎(chǔ)通常使用的網(wǎng)絡(luò)包括互聯(lián)網(wǎng)是在協(xié)議族的基礎(chǔ)上運(yùn)作的。協(xié)議族中的指的就是網(wǎng)際協(xié)議,協(xié)議名稱中占據(jù)了一半位置,其重要性可見(jiàn)一斑。確??煽啃缘膮f(xié)議位于傳輸層,提供可靠的字節(jié)流服務(wù)。 使用 HTTP 協(xié)議訪問(wèn) Web Web瀏覽器根據(jù)地址欄中制定的 URL 從 Web 服務(wù)器獲取文件資源(resource)等信息,從而顯示出Web頁(yè)面。 超文本傳輸協(xié)議(HTTP,HyperText Tr...
摘要:網(wǎng)絡(luò)基礎(chǔ)通常使用的網(wǎng)絡(luò)包括互聯(lián)網(wǎng)是在協(xié)議族的基礎(chǔ)上運(yùn)作的。協(xié)議族中的指的就是網(wǎng)際協(xié)議,協(xié)議名稱中占據(jù)了一半位置,其重要性可見(jiàn)一斑。確??煽啃缘膮f(xié)議位于傳輸層,提供可靠的字節(jié)流服務(wù)。 使用 HTTP 協(xié)議訪問(wèn) Web Web瀏覽器根據(jù)地址欄中制定的 URL 從 Web 服務(wù)器獲取文件資源(resource)等信息,從而顯示出Web頁(yè)面。 超文本傳輸協(xié)議(HTTP,HyperText Tr...
閱讀 1438·2023-04-26 01:03
閱讀 2114·2021-11-23 09:51
閱讀 3468·2021-11-22 15:24
閱讀 2799·2021-09-22 15:18
閱讀 1108·2019-08-30 15:55
閱讀 3727·2019-08-30 15:54
閱讀 2426·2019-08-30 15:53
閱讀 2464·2019-08-30 15:44