久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

了解HTTP Headers的方方面面(5)

 流曲頻陽 2017-04-27

 


HTTP Headers 中的 HTTP響應(yīng)


現(xiàn)在讓我了解一些常見的HTTP Headers中的HTTP響應(yīng)信息,。


在PHP中,,你可以通過 header() 來設(shè)置頭部響應(yīng)信息,。PHP已經(jīng)自動(dòng)發(fā)送了一些必要的頭部信息,如 載入的內(nèi)容,,設(shè)置 cookies 等等… 你可以通過 headers_list() 函數(shù)看到已發(fā)送和將要發(fā)送的頭部信息,。你也可以使用headers_sent()函數(shù)來檢查頭部信息是否已經(jīng)被發(fā)送,。


Cache-Control


的定義是:“The Cache-Control general-header field is used to specify directives which MUST be obeyed by all caching mechanisms along the request/response chain.” 其中“caching mechanisms” 包含一些你ISP可能會(huì)用到的 網(wǎng)關(guān)和代理信息。


例如:


Cache-Control: max-age=3600, public


“public”意味著這個(gè)響應(yīng)可以被任何人緩存,,“max-age” 則表明了該緩存有效的秒數(shù),。允許你的網(wǎng)站被緩存降大大減少下載時(shí)間和帶寬,同時(shí)也提高的瀏覽器的載入速度,。


也可以通過設(shè)置 “no-cache”  指令來禁止緩存:


Cache-Control: no-cache


更多詳情請(qǐng)參見,。


Content-Type


這個(gè)頭部包含了文檔的”mime-type”。瀏覽器將會(huì)依據(jù)該參數(shù)決定如何對(duì)文檔進(jìn)行解析,。例如,,一個(gè)html頁面(或者有html輸出的php頁面)將會(huì)返回這樣的東西:


Content-Type: text/html; charset=UTF-8


‘text’ 是文檔類型,‘html’則是文檔子類型,。 這個(gè)頭部還包括了更多信息,,例如 charset。


如果是一個(gè)圖片,,將會(huì)發(fā)送這樣的響應(yīng):


Content-Type: image/gif


瀏覽器可以通過mime-type來決定使用外部程序還是自身擴(kuò)展來打開該文檔,。如下的例子降調(diào)用Adobe Reader:


Content-Type: application/pdf


直接載入,Apache通常會(huì)自動(dòng)判斷文檔的mime-type并且添加合適的信息到頭部去,。并且大部分瀏覽器都有一定程度的容錯(cuò),,在頭部未提供或者錯(cuò)誤提供該信息的情況下它會(huì)去自動(dòng)檢測(cè)mime-type。


你可以在這里找到一個(gè)常用mime-type列表,。


在PHP中你可以通過 finfo_file() 來檢測(cè)文件的ime-type,。


Content-Disposition


這個(gè)頭部信息將告訴瀏覽器打開一個(gè)文件下載窗口,而不是試圖解析該響應(yīng)的內(nèi)容,。例如:


Content-Disposition: attachment; filename="download.zip"


他會(huì)導(dǎo)致瀏覽器出現(xiàn)這樣的對(duì)話框:



注意,,適合它的Content-Type頭信息同時(shí)也會(huì)被發(fā)送


Content-Type: application/zip

Content-Disposition: attachment; filename="download.zip"


Content-Length


當(dāng)內(nèi)容將要被傳輸?shù)綖g覽器時(shí),服務(wù)器可以通過該頭部告知瀏覽器將要傳送文件的大?。╞ytes),。


Content-Length: 89123


對(duì)于文件下載來說這個(gè)信息相當(dāng)?shù)挠杏谩_@就是為什么瀏覽器知道下載進(jìn)度的原因,。


例如,,這里我寫了一段虛擬腳本,來模擬一個(gè)慢速下載,。


// it's a zip file

header('Content-Type: application/zip');

// 1 million bytes (about 1megabyte)

header('Content-Length: 1000000');

// load a download dialogue, and save it as download.zip

header('Content-Disposition: attachment; filename="download.zip"');

// 1000 times 1000 bytes of data

for ($i = 0; $i < 1000; $i++) {

echo str_repeat(".",1000);

// sleep to slow down the download

usleep(50000);

}


結(jié)果將會(huì)是這樣的:



現(xiàn)在,我將Content-Length頭部注釋掉:


// it's a zip file

header('Content-Type: application/zip');

// the browser won't know the size

// header('Content-Length: 1000000');

// load a download dialogue, and save it as download.zip

header('Content-Disposition: attachment; filename="download.zip"');

// 1000 times 1000 bytes of data

for ($i = 0; $i < 1000; $i++) {

echo str_repeat(".",1000);

// sleep to slow down the download

usleep(50000);

}


結(jié)果就變成了這樣:



這個(gè)瀏覽器只會(huì)告訴你已下載了多少,,但不會(huì)告訴你總共需要下載多少,。而且進(jìn)度條也不會(huì)顯示進(jìn)度。


Etag


這是另一個(gè)為緩存而產(chǎn)生的頭部信息,。它看起來會(huì)是這樣:


Etag: "pub1259380237;gz"


服務(wù)器可能會(huì)將該信息和每個(gè)被發(fā)送文件一起響應(yīng)給瀏覽器,。該值可以包含文檔的最后修改日期,,文件大小或者文件校驗(yàn)和。瀏覽會(huì)把它和所接收到的文檔一起緩存,。下一次當(dāng)瀏覽器再次請(qǐng)求同一文件時(shí)將會(huì)發(fā)送如下的HTTP請(qǐng)求:


If-None-Match: "pub1259380237;gz"


如果所請(qǐng)求的文檔Etag值和它一致,,服務(wù)器將會(huì)發(fā)送304狀態(tài)碼,而不是2oo,。并且不返回內(nèi)容,。瀏覽器此時(shí)就會(huì)從緩存加載該文件。


Last-Modified


顧名思義,,這個(gè)頭部信息用GMT格式表明了文檔的最后修改時(shí)間:


Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT


$modify_time = filemtime($file);

header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");


它提供了另一種緩存機(jī)制,。瀏覽器可能會(huì)發(fā)送這樣的請(qǐng)求:


If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT


在If-Modified-Since一節(jié)我們已經(jīng)討論過了。


Location


這個(gè)頭部是用來重定向的,。如果響應(yīng)代碼為 301 或者 302 ,,服務(wù)器就必須發(fā)送該頭部。例如,,當(dāng)你訪問 http://www. 時(shí)瀏覽器就會(huì)收到如下的響應(yīng):


HTTP/1.x 301 Moved Permanently

...

Location: http://net./

...


在PHP中你可以通過這種方式對(duì)訪客重定向:

header('Location: http://net./');


默認(rèn)會(huì)發(fā)送302狀態(tài)碼,,如果你想發(fā)送301,就這樣寫:


header('Location: http://net./', true, 301);


Set-Cookie


當(dāng)一個(gè)網(wǎng)站需要設(shè)置或者更新你瀏覽的cookie信息時(shí),,它就會(huì)使用這樣的頭部:


Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT

Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT


每個(gè)cookie會(huì)作為單獨(dú)的一條頭部信息,。注意,通過js設(shè)置cookie將不會(huì)體現(xiàn)在HTTP頭中,。


在PHP中,,你可以通過setcookie()函數(shù)來設(shè)置cookie,PHP會(huì)發(fā)送合適的HTTP 頭,。


setcookie("TestCookie", "foobar");


它會(huì)發(fā)送這樣的頭信息:


Set-Cookie: TestCookie=foobar


如果未指定到期時(shí)間,,cookie就會(huì)在瀏覽器關(guān)閉后被刪除。


WWW-Authenticate


一個(gè)網(wǎng)站可能會(huì)通過HTTP發(fā)送這個(gè)頭部信息來驗(yàn)證用戶,。當(dāng)瀏覽器看到頭部有這個(gè)響應(yīng)時(shí)就會(huì)打開一個(gè)彈出窗,。


WWW-Authenticate: Basic realm="Restricted Area"


它會(huì)看起來像這樣:



PHP手冊(cè)的一章中就有一段簡(jiǎn)單的代碼演示了如果用PHP做這樣的事情:


if (!isset($_SERVER['PHP_AUTH_USER'])) {

header('WWW-Authenticate: Basic realm="My Realm"');

header('HTTP/1.0 401 Unauthorized');

echo 'Text to send if user hits Cancel button';

exit;

} else {

echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";

echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";

}


Content-Encoding


這個(gè)頭部通常會(huì)在返回內(nèi)容被壓縮時(shí)設(shè)置。


Content-Encoding: gzip


在PHP中,,如果你調(diào)用了ob_gzhandler()函數(shù),,這個(gè)頭部將會(huì)自動(dòng)被設(shè)置。


中文譯文HTTP Headers 入門 | 感謝robin的辛勤勞動(dòng)

英文原文HTTP Headers for Dummies


PS: 這是本站第一篇轉(zhuǎn)載的文章,,以后如果遇到國內(nèi)的優(yōu)秀文章,、作品,也會(huì)通過轉(zhuǎn)載的方式呈現(xiàn)給大家,,不再拘泥于原創(chuàng)及翻譯,。如果大家有好的文章也可向我推薦。







               

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多