HTTP 缓存
HTTP && 緩存
一個(gè)GET請(qǐng)求
GET請(qǐng)求的所有參數(shù)都會(huì)在URL中體現(xiàn)
GET http://admin_test.oa.com/qvideo_check?m=release&a=recommend_check&ticket=xxx HTTP/1.1
Host: qunadmin_test.oa.com
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
Cookie: pgv_pvi=33174528; pgv_pvid=5511540156; ext-terminal=n%3A1; km_u=d8e2d0f081e337e5f39795c8200e49f21d12548710fc0d9d40cc134f3bea57ff5f4f2963cb532c97; t_uid=rakuluo; km_uid=luo; ; TCOA_TICKET=436F5964EBF9BFE887E534515FA5327F46673896BF686CC0FFA2D92CEFE263CEE2ED2082BFFC0F363DBA8AD2B5D38F12E53AB0E2D263E8B2AABAB1FA42EB5D9BCA53A608B9DA7B8FF26947AA9150049D86798FEF9F71BEADED4133410949366B66ABFA3CAC6859F1B4C8D1825E42637AC5AA0A2697B8FB0A0F277AE69EE65C7488BC1F641175932A2447540815637B78AC7B0F202B7798D2A2AF6CC502621AE55E3320B1C5A0D4F7767F50D3B4980DC4E099583885644566; ticket=436F5964EBF9BFE887E534515FA5327F3FC0EC28BB30AB7113E34EEA91ACF0A49D54D2F81DC1CEE81693AFCA142CDC90220CEB2729C8D92A93C338D292E5083BB74AC565C96148284E04B136BFD6837E9B5C9817CA57B3D2E673CB640C41238B426EF92B41AC12CA82827F631B52EEE1CCD21E694AD93D1B4DFEB63DA6AE16A90359666D500357DCA5AF5258D6848A7826AC58480D0B9A357D08B936C085E53CDD84C55636F973840
一個(gè)POST請(qǐng)求
包括請(qǐng)求頭和請(qǐng)求體(請(qǐng)求體內(nèi)含參數(shù))兩個(gè)部分 中間是一個(gè)空行
很容易看出這是一個(gè)HTTP 1.1類型的請(qǐng)求
POST http://admin_test.oa.com/qvk HTTP/1.1
Host: qunadmin_test.oa.com
Connection: keep-alive
Content-Length: 196
Origin: http://admin_test.oa.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: /
Referer: http://admin_test.com/.....
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
Cookie: pgv_pvi=33174528; pgv_pvid=5511540156; ext-terminal=n%3A1; km_u=d8e2d0f081532c97; t_uid=rakuluo; km_uid=rakuluo; t_u=3eaac1dbd7b54763%7C845b1588bc2614cb
m=release&a=account_check&ticket=6eb657ca-a01f-11e3-9337-001517bed8zae6&json=%7B%22gid%22%3A1234567%2C%22owner_uin%22%3A1234567%2C%22audit_status%22%3A2%2C%22audit_reason%22%3A%22no%20reason%22%7D
一個(gè)上傳圖片的POST請(qǐng)求
POST http://localhost/github/repo/drag/ImgUpload/upload.php HTTP/1.1
Host: localhost
Connection: keep-alive
Content-Length: 138569
Origin: http://localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryV9kSbS9Xym2YSdfs
Accept: /
Referer: http://localhost/github/repo/drag/ImgUpload/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
------WebKitFormBoundaryV9kSbS9Xym2YSdfs
Content-Disposition: form-data; name="file"; filename="2015-06-19 162748.jpg"
Content-Type: image/jpeg
! Exif MM *
....
Keep Alive
Connection請(qǐng)求頭的值為Keep-Alive時(shí),客戶端通知服務(wù)器返回本次請(qǐng)求結(jié)果后保持連接;Connection請(qǐng)求頭的值為close時(shí),客戶端通知服務(wù)器返回本次請(qǐng)求結(jié)果后關(guān)閉連接
持久連接是HTTP1.1 中的
普通模式 每個(gè)請(qǐng)求/應(yīng)答客戶和服務(wù)器都要新建一個(gè)連接,完成之后立即斷開連接
從HTTP/1.1起,默認(rèn)都開啟了Keep-Alive,保持連接特性,簡(jiǎn)單地說(shuō),當(dāng)一個(gè)網(wǎng)頁(yè)打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接。
Keep-Alive不會(huì)永久保持連接,它有一個(gè)保持時(shí)間,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個(gè)時(shí)間。
Keep Alive 應(yīng)用場(chǎng)景
參考
http://blog.csdn.net/hguisu/article/details/8608888
訪問(wèn)一個(gè)包含有許多圖像的網(wǎng)頁(yè)文件的整個(gè)過(guò)程包含了多次請(qǐng)求和響應(yīng),每次請(qǐng)求和響應(yīng)都需要建立一個(gè)單獨(dú)的連接,每次連接只是傳輸一個(gè)文檔和圖像,上一 次和下一次請(qǐng)求完全分離。即使圖像文件都很小,但是客戶端和服務(wù)器端每次建立和關(guān)閉連接卻是一個(gè)相對(duì)比較費(fèi)時(shí)的過(guò)程,并且會(huì)嚴(yán)重影響客戶機(jī)和服務(wù)器的性能。
HTTP1.1支持持久連接,在一個(gè)TCP連接上可以傳送多個(gè)HTTP請(qǐng)求和響應(yīng),減少了建立和關(guān)閉連接的消耗和延遲。一個(gè)包含有許多圖像的網(wǎng)頁(yè)文件的多個(gè)請(qǐng)求和應(yīng)答可以在一個(gè)連接中傳輸
響應(yīng)長(zhǎng)度
- 若響應(yīng)中出現(xiàn)了Transfer-Encoding:chucked 表示響應(yīng)長(zhǎng)度不固定
transfer-length由“chunked” 傳輸編碼定義,除非消息由于關(guān)閉連接而終止 若響應(yīng)中出現(xiàn)的是 Content-Length: xxx 其值表示 entity-length(實(shí)體長(zhǎng)度)和transfer-length(傳輸長(zhǎng)度)[一般情況下他們長(zhǎng)度是一致的 不一致則不能響應(yīng) Content-Length]
同時(shí)接收到Transfer-Encoding字段和Content-Length頭字段,那么必須忽略Content-Length字段響應(yīng)長(zhǎng)度的計(jì)算方式
一個(gè)字符算一個(gè)長(zhǎng)度 一個(gè)中文字符2個(gè)
204和304
不含有消息體的響應(yīng)1xx 204[請(qǐng)求成功 不用刷新也不用重定向] 304
緩存
參考
http://blog.csdn.net/hguisu/article/details/8608888
在HTTP/1.0中,使用Expire頭域來(lái)判斷資源的fresh或stale,并使用條件請(qǐng)求(conditional request)來(lái)判斷資源是否仍有效。例如,cache服務(wù)器通過(guò)If-Modified-Since頭域向服務(wù)器驗(yàn)證資源的Last-Modefied頭域是否有更新,源服務(wù)器可能返回304(Not Modified),則表明該對(duì)象仍有效;也可能返回200(OK)替換請(qǐng)求的Cache對(duì)象
為了使caching機(jī)制更加靈活,HTTP/1.1增加了Cache-Control頭域(請(qǐng)求消息和響應(yīng)消息都可使用),它支持一個(gè)可擴(kuò)展的指令子集:例如max-age指令支持相對(duì)時(shí)間戳;private和no-store指令禁止對(duì)象被緩存;no-transform阻止Proxy進(jìn)行任何改變響應(yīng)的行為。
HTTP/1.1中引入了一個(gè)ETag頭域用于重激活機(jī)制,它的值entity tag可以用來(lái)唯一的描述一個(gè)資源。請(qǐng)求消息中可以使用If-None-Match頭域來(lái)匹配資源的entitytag是否有變化。
例如響應(yīng)的ETag:"553dcec3-3fd"
If-None-Match:"553dcec3-3fd" 他們是匹配的 可以從緩存拿
請(qǐng)求頭總結(jié)
參考
https://www.byvoid.com/blog/http-keep-alive-header
http://blog.csdn.net/hguisu/article/details/8683290
Transport頭域
- Connection: close(告訴WEB服務(wù)器或者代理服務(wù)器,在完成本次請(qǐng)求的響應(yīng)后,斷開連接,不要等待本次連接的后續(xù)請(qǐng)求了) keepalive(告訴WEB服務(wù)器或者代理服務(wù)器,在完成本次請(qǐng)求的響應(yīng)后,保持連接,等待本次連接的后續(xù)請(qǐng)求)
- Host:指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào)
Client 頭域
Accept:告訴WEB服務(wù)器自己(瀏覽器)接受什么介質(zhì)類型(MIME),* 代表任意類型 Accept: / 代表瀏覽器可以處理所有類型
Accept-Encoding 告訴服務(wù)器,聲明瀏覽器支持的編碼方法 通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate),(注意:這不是只字符編碼);
Accept-Encoding: compress, gzip //支持compress 和gzip類型在Linux中經(jīng)常會(huì)用到后綴為.gz的文件,它們就是GZIP格式的。現(xiàn)今已經(jīng)成為Internet 上使用非常普遍的一種數(shù)據(jù)壓縮格式
Accept-Charset: 瀏覽器申明自己接收的字符集
Cache頭域
- Cache-Control[響應(yīng)中也有次頭域]
- no-cache 請(qǐng)求的資源不會(huì)緩存
- max-age(只接受 Age 值小于 max-age 值,并且沒(méi)有過(guò)期的對(duì)象
- min-fresh:(接受其新鮮生命期大于其當(dāng)前 Age 跟 min-fresh 值之和的緩存對(duì)象)
- If-Modified-Since:把瀏覽器端緩存資源的最后修改時(shí)間發(fā)送到服務(wù)器去.務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間進(jìn)行對(duì)比。如果時(shí)間一致,那么返回304,客戶端就直接使用本地緩存文件。如果時(shí)間不一致,就會(huì)返回200和新的文件內(nèi)容。客戶端接到之后,會(huì)丟棄舊文件,把新文件緩存起來(lái),并顯示在瀏覽器中。[不同的機(jī)器可能會(huì)有時(shí)間不同步的問(wèn)題 所以HTTP1.1引入Etag]
- If-Node-Match: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag(類似于MD5一樣的文件標(biāo)識(shí)碼)信息。 如果服務(wù)器驗(yàn)證資源的ETag沒(méi)有改變(該資源沒(méi)有更新),將返回一個(gè)304狀態(tài)告訴客戶端使用本地緩存文件。否則將返回200狀態(tài)和新的資源和Etag.
請(qǐng)求If-None-Match:"5551df47-6c4"
響應(yīng)頭中ETag:"5551df47-6c4" 兩者匹配 可以從緩存中取資源 - Pargma只有一個(gè)用法, 例如: Pragma: no-cache 請(qǐng)求的資源不會(huì)被緩存
Cookie頭域
Cookie: 最重要的header, 將cookie的值發(fā)送給HTTP 服務(wù)器
Entity頭域
- Content-Length作用:發(fā)送給HTTP服務(wù)器數(shù)據(jù)的長(zhǎng)度。即請(qǐng)求消息正文的長(zhǎng)度
- Content-Type:application/x-www-form-urlencoded
其他域
- Referer:瀏覽器向 WEB 服務(wù)器表明自己是從哪個(gè) 網(wǎng)頁(yè)/URL 獲得/點(diǎn)擊 當(dāng)前請(qǐng)求中的網(wǎng)址/URL
響應(yīng)頭總結(jié)
Cache頭域
- Date: 響應(yīng)的時(shí)間(服務(wù)器時(shí)間)
- Expired[HTTP 1.0]:資源國(guó)企時(shí)間
Cookie/Login 頭域
- p3p: 用于跨域設(shè)置Cookie, 這樣可以解決iframe跨域訪問(wèn)cookie的問(wèn)題
- Set-Cookie 用于把cookie 發(fā)送到客戶端瀏覽器
Entity實(shí)體頭域
- ETag[HTTP1.1]:就是一個(gè)對(duì)象(比如URL)的標(biāo)志值,就一個(gè)對(duì)象而言,比如一個(gè) html 文件,如果被修改了,其 Etag 也會(huì)別修改,所以ETag 的作用跟 Last-Modified 的作用差不多,主要供 WEB 服務(wù)器判斷一個(gè)對(duì)象是否改變了
比如前一次請(qǐng)求某個(gè) html 文件時(shí),獲得了其 ETag,當(dāng)這次又請(qǐng)求這個(gè)文件時(shí),瀏覽器就會(huì)把先前獲得的 ETag 值發(fā)送給WEB 服務(wù)器,然后 WEB 服務(wù)器會(huì)把這個(gè) ETag 跟該文件的當(dāng)前 ETag 進(jìn)行對(duì)比,然后就知道這個(gè)文件有沒(méi)有改變了。 - Last-Modified:WEB 服務(wù)器認(rèn)為對(duì)象的最后修改時(shí)間,
- Content-Type:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的類型和字符集,
- Content-Encoding: gzip WEB服務(wù)器表明自己使用了什么壓縮方法(gzip,deflate)
- Content-Length: WEB 服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的長(zhǎng)度。例如:Content-Length: 26012
- Content-Type: WEB 服務(wù)器告訴瀏覽器自己響應(yīng)的對(duì)象的類型。例如:Content-Type:application/xml
Transport頭域
- Connection
- Connection: keep-alive 當(dāng)一個(gè)網(wǎng)頁(yè)打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉,如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接
- Connection: close 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會(huì)關(guān)閉, 當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
其他頭域
Server:Apache/2.2.8 (Win32) PHP/5.2.5
Age:當(dāng)代理服務(wù)器用自己緩存的實(shí)體去響應(yīng)請(qǐng)求時(shí),用該頭部表明該實(shí)體從產(chǎn)生到現(xiàn)在經(jīng)過(guò)多長(zhǎng)時(shí)間了。
Transfer-Encoding: WEB 服務(wù)器表明自己對(duì)本響應(yīng)消息體(不是消息體里面的對(duì)象)作了怎樣的編碼,比如是否分塊(chunked)
轉(zhuǎn)載于:https://www.cnblogs.com/cart55free99/p/4665615.html
總結(jié)
- 上一篇: PC-如何提高计算机的启动和关机的速度?
- 下一篇: 漫威死亡女神和灭霸(漫威死亡女神)