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