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