成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > 了解HTTP Headers的方方面面 圖文說(shuō)明

了解HTTP Headers的方方面面 圖文說(shuō)明

熱門標(biāo)簽:通遼地圖標(biāo)注app 地圖標(biāo)注員工作內(nèi)容 地圖標(biāo)注沿海城市房?jī)r(jià) 江西ai電銷機(jī)器人如何 高德地圖標(biāo)注廁所 西安金倫外呼系統(tǒng) 威海語(yǔ)音外呼系統(tǒng)平臺(tái) 智能語(yǔ)音電銷機(jī)器人客戶端 中國(guó)地圖標(biāo)注城市的

什么是HTTP Headers

HTTP是“Hypertext Transfer Protocol”的所寫,整個(gè)萬(wàn)維網(wǎng)都在使用這種協(xié)議,幾乎你在瀏覽器里看到的大部分內(nèi)容都是通過(guò)http協(xié)議來(lái)傳輸?shù)?,比如這篇文章。

HTTP Headers是HTTP請(qǐng)求和相應(yīng)的核心,它承載了關(guān)于客戶端瀏覽器,請(qǐng)求頁(yè)面,服務(wù)器等相關(guān)的信息。

示例

當(dāng)你在瀏覽器地址欄里鍵入一個(gè)url,你的瀏覽器將會(huì)類似如下的http請(qǐng)求:
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120
Pragma: no-cache
Cache-Control: no-cache

第一行被稱為“Request Line” 它描述的是這個(gè)請(qǐng)求的基本信息,剩下的就是HTTP headers了。

請(qǐng)求完成之后,你的瀏覽器可能會(huì)收到如下的HTTP響應(yīng):

HTTP/1.x 200 OK
Transfer-Encoding: chunked
Date: Sat, 28 Nov 2009 04:36:25 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: W3 Total Cache/0.8
Pragma: public
Expires: Sat, 28 Nov 2009 05:36:25 GMT
Etag: "pub1259380237;gz"
Cache-Control: max-age=3600, public
Content-Type: text/html; charset=UTF-8
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
X-Pingback: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzip
Vary: Accept-Encoding, Cookie, User-Agent
<!-- ... rest of the html ... -->

第一行呢被稱為“Status Line”,它之后就是http headers,空行完了就開始輸出內(nèi)容了(在這個(gè)案例中是一些html輸出)。

但你查看頁(yè)面源代碼卻不能看到HTTP headers,雖然它們同你能看到的東西一起被傳送至瀏覽器了。

這個(gè)HTTP請(qǐng)求也發(fā)出了一些其它資源的接收請(qǐng)求,例如圖片,css文件,js文件等等。

下面我們來(lái)看看細(xì)節(jié)。

怎樣才能看到HTTP Headers

下面這些FireFox擴(kuò)展能夠幫助你分析HTTP headers:

1. firebug

2.Live HTTP Headers

3. 在PHP中:

  • getallheaders() 用來(lái)獲取請(qǐng)求頭部. 你也可以使用 $_SERVER 數(shù)組.
  • headers_list() 用來(lái)獲取響應(yīng)頭部.

文章下面將會(huì)看到一些使用php示范的例子。

HTTP Request 的結(jié)構(gòu)

被稱作“first line”的第一行包含三個(gè)部分:

  • “method” 表明這是何種類型的請(qǐng)求. 最常見(jiàn)的請(qǐng)求類型有 GET, POST 和 HEAD.
  • “path” 體現(xiàn)的是主機(jī)之后的路徑. 例如,當(dāng)你請(qǐng)求 “http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/”時(shí) , path 就會(huì)是 “/tutorials/other/top-20-mysql-best-practices/”.
  • “protocol” 包含有 “HTTP” 和版本號(hào), 現(xiàn)代瀏覽器都會(huì)使用1.1.

剩下的部分每行都是一個(gè)“Name:Value”對(duì)。它們包含了各式各樣關(guān)于請(qǐng)求和你瀏覽器的信息。例如”User-Agent“就表明了你瀏覽器版本和你所用的操作系統(tǒng)。”Accept-Encoding“會(huì)告訴服務(wù)器你的瀏覽可以接受類似gzip的壓縮輸出。

這些headers大部分都是可選的。HTTP 請(qǐng)求甚至可以被精簡(jiǎn)成這樣子:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
Host: net.tutsplus.com

并且你仍舊可以從服務(wù)器收到有效的響應(yīng)。

請(qǐng)求類型

三種最常見(jiàn)的請(qǐng)求類型是:GET,POST 和 HEAD ,從html的編寫過(guò)程中你可能已經(jīng)熟悉了前兩種。

GET:獲取一個(gè)文檔

大部分被傳輸?shù)綖g覽器的html,images,js,css, … 都是通過(guò)GET方法發(fā)出請(qǐng)求的。它是獲取數(shù)據(jù)的主要方法。

例如,要獲取Nettuts+ 的文章,http request的第一行通??雌饋?lái)是這樣的:

GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1

一旦html加載完成,瀏覽器將會(huì)發(fā)送GET 請(qǐng)求去獲取圖片,就像下面這樣:

GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1

表單也可以通過(guò)GET方法發(fā)送,下面是個(gè)例子:

<form action="foo.php" method="GET">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>

當(dāng)這個(gè)表單被提交時(shí),HTTP request 就會(huì)像這樣:

GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1
...

你可以將表單輸入通過(guò)附加進(jìn)查詢字符串的方式發(fā)送至服務(wù)器。

POST:發(fā)送數(shù)據(jù)至服務(wù)器

盡管你可以通過(guò)GET方法將數(shù)據(jù)附加到url中傳送給服務(wù)器,但在很多情況下使用POST發(fā)送數(shù)據(jù)給服務(wù)器更加合適。通過(guò)GET發(fā)送大量數(shù)據(jù)是不現(xiàn)實(shí)的,它有一定的局限性。

用POST請(qǐng)求來(lái)發(fā)送表單數(shù)據(jù)是普遍的做法。我們來(lái)吧上面的例子改造成使用POST方式:

<form action="foo.php" method="POST">
First Name: <input name="first_name" type="text" />
Last Name: <input name="last_name" type="text" />
<input name="action" type="submit" value="Submit" />
</form>

提交這個(gè)表單會(huì)創(chuàng)建一個(gè)如下的HTTP 請(qǐng)求:

POST /foo.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/test.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 43
first_name=John&last_name=Doe&action=Submit

這里有三個(gè)需要注意的地方:

  • 第一行的路徑已經(jīng)變?yōu)楹?jiǎn)單的 /foo.php , 已經(jīng)沒(méi)了查詢字符串。
  • 新增了 Content-Type 和 Content-Lenght 頭部,它提供了發(fā)送信息的相關(guān)信息.
  • 所有數(shù)據(jù)都在headers之后,以查詢字符串的形式被發(fā)送.

POST方式的請(qǐng)求也可用在AJAX,應(yīng)用程序,cURL … 之上。并且所有的文件上傳表單都被要求使用POST方式。

HEAD:接收頭部信息

HEAD和GET很相似,只不過(guò)HEAD不接受HTTP響應(yīng)的內(nèi)容部分。當(dāng)你發(fā)送了一個(gè)HEAD請(qǐng)求,那就意味著你只對(duì)HTTP頭部感興趣,而不是文檔本身。

這個(gè)方法可以讓瀏覽器判斷頁(yè)面是否被修改過(guò),從而控制緩存。也可判斷所請(qǐng)求的文檔是否存在。

例如,假如你的網(wǎng)站上有很多鏈接,那么你就可以簡(jiǎn)單的給他們分別發(fā)送HEAD請(qǐng)求來(lái)判斷是否存在死鏈,這比使用GET要快很多。

http響應(yīng)結(jié)構(gòu)

當(dāng)瀏覽器發(fā)送了HTTP請(qǐng)求之后,服務(wù)器就會(huì)通過(guò)一個(gè)HTTP response來(lái)響應(yīng)這個(gè)請(qǐng)求。如果不關(guān)心內(nèi)容,那么這個(gè)請(qǐng)求看起來(lái)會(huì)是這樣的:

第一個(gè)有價(jià)值的信息就是協(xié)議。目前服務(wù)器都會(huì)使用 HTTP/1.x 或者 HTTP/1.1。

接下來(lái)一個(gè)簡(jiǎn)短的信息代表狀態(tài)。代碼200意味著我們的請(qǐng)求已經(jīng)發(fā)送成功了,服務(wù)器將會(huì)返回給我們所請(qǐng)求的文檔,在頭部信息之后。

我們都見(jiàn)過(guò)“404”頁(yè)面。當(dāng)我向服務(wù)器請(qǐng)求一個(gè)不存在的路徑時(shí),服務(wù)器就用用404來(lái)代替200響應(yīng)我們。

余下的響應(yīng)內(nèi)容和HTTP請(qǐng)求相似。這些內(nèi)容是關(guān)于服務(wù)器軟件的,頁(yè)面/文件何時(shí)被修改過(guò),mime type 等等…

同樣,這些頭部信息也是可選的。

HTTP狀態(tài)碼

  • 200 用來(lái)表示請(qǐng)求成功.
  • 300 來(lái)表示重定向.
  • 400 用來(lái)表示請(qǐng)求出現(xiàn)問(wèn)題.
  • 500 用來(lái)表示服務(wù)器出現(xiàn)問(wèn)題.

200 成功 (OK)

前文已經(jīng)提到,200是用來(lái)表示請(qǐng)求成功的。

206 部分內(nèi)容 (Partial Content)

如果一個(gè)應(yīng)用只請(qǐng)求某范圍之內(nèi)的文件,那么就會(huì)返回206.

這通常被用來(lái)進(jìn)行下載管理,斷點(diǎn)續(xù)傳或者文件分塊下載。

404 沒(méi)有找到 (Not Found)

很容易理解

401 未經(jīng)授權(quán) (Unauthorized)

受密碼保護(hù)的頁(yè)面會(huì)返回這個(gè)狀態(tài)。如果你沒(méi)有輸入正確的密碼,那么你就會(huì)在瀏覽器中看到如下的信息:

注意這只是受密碼保護(hù)頁(yè)面,請(qǐng)求輸入密碼的彈出框是下面這個(gè)樣子的:

403 被禁止(Forbidden)

如果你沒(méi)有權(quán)限訪問(wèn)某個(gè)頁(yè)面,那么就會(huì)返回403狀態(tài)。這種情況通常會(huì)發(fā)生在你試圖打開一個(gè)沒(méi)有index頁(yè)面的文件夾。如果服務(wù)器設(shè)置不允許查看目錄內(nèi)容,那么你就會(huì)看到403錯(cuò)誤。

其它一些一些方式也會(huì)發(fā)送權(quán)限限制,例如你可以通過(guò)IP地址進(jìn)行阻止,這需要一些htaccess的協(xié)助。

order allow,deny
deny from 192.168.44.201
deny from 224.39.163.12
deny from 172.16.7.92
allow from all

302(或307)臨時(shí)移動(dòng)(Moved Temporarily) 和 301 永久移動(dòng)(Moved Permanently)

這兩個(gè)狀態(tài)會(huì)出現(xiàn)在瀏覽器重定向時(shí)。例如,你使用了類似 bit.ly 的網(wǎng)址縮短服務(wù)。這也是它們?nèi)绾潍@知誰(shuí)點(diǎn)擊了他們鏈接的方法。

302和301對(duì)于瀏覽器來(lái)說(shuō)是非常相似的,但對(duì)于搜索引擎爬蟲就有一些差別。打個(gè)比方,如果你的網(wǎng)站正在維護(hù),那么你就會(huì)將客戶端瀏覽器用302 重定向到另外一個(gè)地址。搜索引擎爬蟲就會(huì)在將來(lái)重新索引你的頁(yè)面。但是如果你使用了301重定向,這就等于你告訴了搜索引擎爬蟲:你的網(wǎng)站已經(jīng)永久的移動(dòng) 到了新的地址。

500 服務(wù)器錯(cuò)誤(Internal Server Error)

這個(gè)代碼通常會(huì)在頁(yè)面腳本崩潰時(shí)出現(xiàn)。大部分CGI腳本都不會(huì)像PHP那樣輸出錯(cuò)誤信息給瀏覽器。如果出現(xiàn)了致命的錯(cuò)誤,它們只會(huì)發(fā)送一個(gè)500的狀態(tài)碼。這時(shí)需要查看服務(wù)器錯(cuò)誤日志來(lái)排錯(cuò)。

完整的列表

你可以在這里找到完整的HTTP 狀態(tài)碼說(shuō)明?;蛘叩竭@里查看(http://tools.jb51.net/table/http_status_code)。

HTTP Headers 中的 HTTP請(qǐng)求

現(xiàn)在我們來(lái)看一些在HTTP headers中常見(jiàn)的HTTP請(qǐng)求信息。

所有這些頭部信息都可以在PHP的$_SERVER數(shù)組中找到。你也可以用getallheaders() 函數(shù)一次性獲取所有的頭部信息。

Host

一個(gè)HTTP請(qǐng)求會(huì)發(fā)送至一個(gè)特定的IP地址,但是大部分服務(wù)器都有在同一IP地址下托管多個(gè)網(wǎng)站的能力,那么服務(wù)器必須知道瀏覽器請(qǐng)求的是哪個(gè)域名下的資源。

Host: rlog.cn

這只是基本的主機(jī)名,包含域名和子級(jí)域名。

在PHP中,可以通過(guò)$_SERVER['HTTP_HOST'] 或 $_SERVER['SERVER_NAME']來(lái)查看。

User-Agent

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)

這個(gè)頭部可以攜帶如下幾條信息:

  • 瀏覽器名和版本號(hào).
  • 操作系統(tǒng)名和版本號(hào).
  • 默認(rèn)語(yǔ)言.

這就是某些網(wǎng)站用來(lái)收集訪客信息的一般手段。例如,你可以判斷訪客是否在使用手機(jī)訪問(wèn)你的網(wǎng)站,然后決定是否將他們引導(dǎo)至一個(gè)在低分辨率下表現(xiàn)良好的移動(dòng)網(wǎng)站。

在PHP中,可以通過(guò) $_SERVER['HTTP_USER_AGENT'] 來(lái)獲取User-Agent

if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {
echo "Please stop using IE6!";
}

Accept-Language

Accept-Language: en-us,en;q=0.5

這個(gè)信息可以說(shuō)明用戶的默認(rèn)語(yǔ)言設(shè)置。如果網(wǎng)站有不同的語(yǔ)言版本,那么就可以通過(guò)這個(gè)信息來(lái)重定向用戶的瀏覽器。

它可以通過(guò)逗號(hào)分割來(lái)攜帶多國(guó)語(yǔ)言。第一個(gè)會(huì)是首選的語(yǔ)言,其它語(yǔ)言會(huì)攜帶一個(gè)“q”值,來(lái)表示用戶對(duì)該語(yǔ)言的喜好程度(0~1)。

在PHP中用 $_SERVER["HTTP_ACCEPT_LANGUAGE"] 來(lái)獲取這一信息。

if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {
header('Location: http://french.mydomain.com');
}

Accept-Encoding

Accept-Encoding: gzip,deflate

大部分的現(xiàn)代瀏覽器都支持gzip壓縮,并會(huì)把這一信息報(bào)告給服務(wù)器。這時(shí)服務(wù)器就會(huì)壓縮過(guò)的HTML發(fā)送給瀏覽器。這可以減少近80%的文件大小,以節(jié)省下載時(shí)間和帶寬。

在PHP中可以使用 $_SERVER["HTTP_ACCEPT_ENCODING"] 獲取該信息。 然后調(diào)用ob_gzhandler()方法時(shí)會(huì)自動(dòng)檢測(cè)該值,所以你無(wú)需手動(dòng)檢測(cè)。

// enables output buffering
// and all output is compressed if the browser supports it
ob_start('ob_gzhandler');

If-Modified-Since

如果一個(gè)頁(yè)面已經(jīng)在你的瀏覽器中被緩存,那么你下次瀏覽時(shí)瀏覽器將會(huì)檢測(cè)文檔是否被修改過(guò),那么它就會(huì)發(fā)送這樣的頭部:

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

如果自從這個(gè)時(shí)間以來(lái)未被修改過(guò),那么服務(wù)器將會(huì)返回“304 Not Modified”,而且不會(huì)再返回內(nèi)容。瀏覽器將自動(dòng)去緩存中讀取內(nèi)容

在PHP中,可以用$_SERVER['HTTP_IF_MODIFIED_SINCE'] 來(lái)檢測(cè)。

// assume $last_modify_time was the last the output was updated
// did the browser send If-Modified-Since header?
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
// if the browser cache matches the modify time
if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
// send a 304 header, and no content
header("HTTP/1.1 304 Not Modified");
exit;
}
}

還有一個(gè)叫Etag的HTTP頭信息,它被用來(lái)確定緩存的信息是否正確,稍后我們將會(huì)解釋它。

Cookie

顧名思義,他會(huì)發(fā)送你瀏覽器中存儲(chǔ)的Cookie信息給服務(wù)器。

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar

它是用分號(hào)分割的一組名值對(duì)。Cookie也可以包含session id。

在PHP中,單一的Cookie可以訪問(wèn)$_COOKIE數(shù)組獲得。你可以直接用$_SESSION array獲取session變量。如果你需要session id,那么你可以使用session_id()函數(shù)代替cookie。

echo $_COOKIE['foo'];
// output: bar
echo $_COOKIE['PHPSESSID'];
// output: r2t5uvjq435r4q7ib3vtdjq120
session_start();
echo session_id();
// output: r2t5uvjq435r4q7ib3vtdjq120

Referer

顧名思義, 頭部將會(huì)包含referring url信息。

例如,我訪問(wèn)Nettuts+的主頁(yè)并點(diǎn)擊了一個(gè)鏈接,這個(gè)頭部信息將會(huì)發(fā)送到瀏覽器:
Referer: http://net.tutsplus.com/

在PHP中,可以通過(guò) $_SERVER['HTTP_REFERER'] 獲取該值。

if (isset($_SERVER['HTTP_REFERER'])) {
$url_info = parse_url($_SERVER['HTTP_REFERER']);
// is the surfer coming from Google?
if ($url_info['host'] == 'www.google.com') {
parse_str($url_info['query'], $vars);
echo "You searched on Google for this keyword: ". $vars['q'];
}
}
// if the referring url was:
// http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http+headers&aq=f&oq=&aqi=g-p1g9
// the output will be:
// You searched on Google for this keyword: http headers

You may have noticed the word “referrer” is misspelled as “referer”. Unfortunately it made into the official HTTP specifications like that and got stuck.

Authorization

當(dāng)一個(gè)頁(yè)面需要授權(quán),瀏覽器就會(huì)彈出一個(gè)登陸窗口,輸入正確的帳號(hào)后,瀏覽器會(huì)發(fā)送一個(gè)HTTP請(qǐng)求,但此時(shí)會(huì)包含這樣一個(gè)頭部:

Authorization: Basic bXl1c2VyOm15cGFzcw==

包含在頭部的這部分信息是base64 encoded。例如,base64_decode(‘bXl1c2VyOm15cGFzcw==’) 會(huì)被轉(zhuǎn)化為 ‘myuser:mypass’ 。

在PHP中,這個(gè)值可以用$_SERVER['PHP_AUTH_USER'] 和 $_SERVER['PHP_AUTH_PW'] 獲得。

更多細(xì)節(jié)我們會(huì)在WWW-Authenticate部分講解。

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

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

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

Cache-Control

w3.org 的定義是:“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í)也提高的瀏覽器的載入速度。

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

Cache-Control: no-cache

更多詳情請(qǐng)參見(jiàn)w3.org

Content-Type

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

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

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

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

Content-Type: image/gif

瀏覽器可以通過(guò)mime-type來(lái)決定使用外部程序還是自身擴(kuò)展來(lái)打開該文檔。如下的例子降調(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中你可以通過(guò) finfo_file() 來(lái)檢測(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ù)器可以通過(guò)該頭部告知瀏覽器將要傳送文件的大?。╞ytes)。

Content-Length: 89123

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

例如,這里我寫了一段虛擬腳本,來(lái)模擬一個(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)生的頭部信息。它看起來(lái)會(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)討論過(guò)了。

Location

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

HTTP/1.x 301 Moved Permanently
...
Location: http://net.tutsplus.com/
...

在PHP中你可以通過(guò)這種方式對(duì)訪客重定向:
header('Location: http://net.tutsplus.com/');

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

header('Location: http://net.tutsplus.com/', 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ú)的一條頭部信息。注意,通過(guò)js設(shè)置cookie將不會(huì)體現(xiàn)在HTTP頭中。

在PHP中,你可以通過(guò)setcookie()函數(shù)來(lái)設(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ì)通過(guò)HTTP發(fā)送這個(gè)頭部信息來(lái)驗(yàn)證用戶。當(dāng)瀏覽器看到頭部有這個(gè)響應(yīng)時(shí)就會(huì)打開一個(gè)彈出窗。

WWW-Authenticate: Basic realm="Restricted Area"

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

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://css9.net/all-about-http-headers/ 

標(biāo)簽:崇左 青海 北海 河池 營(yíng)口 眉山 晉中 阜陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《了解HTTP Headers的方方面面 圖文說(shuō)明》,本文關(guān)鍵詞  了解,HTTP,Headers,的,方方面面,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《了解HTTP Headers的方方面面 圖文說(shuō)明》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于了解HTTP Headers的方方面面 圖文說(shuō)明的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    成人午夜免费在线| 精品国产二区三区| free性m.freesex欧美| 精品久久久精品| 四虎成人永久地址| 亚洲电影成人成人影院| 日本女人性视频| 成人在线视频一区二区| 日韩欧美不卡视频| 给我免费播放片在线观看| 欧美先锋影音| 亚洲肉体裸体xxxx137| 国产成人在线亚洲欧美| 青青青在线视频| a级免费视频| 尤物九九久久国产精品的分类| 亚洲成人福利片| 无码人妻丰满熟妇奶水区码| 成人av影音| 国产伦精品一区二区三区视频金莲| 日韩欧美中文在线| 欧美午夜视频一区二区| 亚洲一区 在线播放| 欧美性xxxx在线播放| 欧美日韩国产成人在线| 欧美日韩亚洲国内综合网| 亚洲精品电影院| 成人av在线观| 亚洲国产欧美国产第一区| 久一视频在线观看| 亚洲尤物视频网| 99在线观看免费视频精品观看| 情趣视频在线观看| 91丝袜呻吟高潮美腿白嫩在线观看| 亚洲综合一区在线| 国产精品视频免费观看www| 国产又大又粗又硬| 在线午夜精品自拍| 亚洲福利视频导航| 欧美巨大xxxx做受沙滩| 亚洲成在人线av| 亚洲春色h网| 捆绑调教一区二区三区| 五月婷婷丁香色| 婷婷久久综合九色综合99蜜桃| 精品国产一区二区三区av片| 国产在线观看免费av| 亚洲精品免费在线| 日韩美女视频在线观看| 日日av拍夜夜添久久免费| 五月天激情视频在线观看| 在线观看av网站永久| 亚洲欧洲视频在线| 日本免费一区二区三区等视频| www中文字幕在线观看| 成人在线观看网址| 四虎精品欧美一区二区免费| 欧美大片免费播放器| 国产一级在线观看| 中文字幕在线看精品乱码| 九九精品免费视频| 日本韩国欧美一区二区三区| 偷拍视屏一区| 性高潮久久久久久久久久| 日韩欧美在线观看一区二区| 日韩中文字幕影院| 欧美二区不卡| 涩视频在线观看| 日本精品一区二区在线观看| 亚洲国产视频二区| 黑鬼狂亚洲人videos| 久久av网址| 日韩欧美国产一区二区三区| 少妇被狂c下部羞羞漫画| 69久久精品| 欧美日韩国产一级二级| 中文字幕一区日韩精品欧美| 一级特级黄色片| 久久999免费视频| 农村一级毛片| 免费av中文字幕| 亚洲天堂网在线观看视频| 性疯狂做受xxxx高清视频| 欧美国产专区| 欧美日韩免费视频| 亚洲成人影院麻豆| 精品久久网站| 国产污视频在线| 日本h片久久| 东京热一区二区三区四区| 欧美男人天堂网| 三上悠亚在线一区二区| 国产综合在线视频| 精品国产91久久久久久久妲己| 奇米一区二区三区四区久久| 天堂va欧美va亚洲va老司机| 亚洲一区二区三区四区在线观看| 欧美超级免费视 在线| 欧美三级第一页| 日韩欧美国产免费| 色撸撸在线观看| 在线观看国产日韩| 日本韩国欧美超级黄在线观看| 羞羞视频在线观看一区二区| а 天堂 在线| 国产一区二区三区丝袜| 亚洲一区二区精品久久av| 欧美激情视频一区二区三区不卡| 日产精品99久久久久久| 黄色免费av网站| 欧洲一区二区在线| 日日夜夜国产| 在线视频日韩欧美| 国产一线二线在线观看| 国产盗摄一区二区| 2021中文字幕一区亚洲| 亚洲天堂日韩电影| 日韩欧美中文字幕制服| 一区二区三区日韩在线| 五月婷婷开心网| 青青青伊人色综合久久| 日韩精品资源二区在线| 欧美精品在欧美一区二区| 国产中文字幕91| 日韩精品人妻中文字幕| 欧美久久一区| 亚洲精品不卡在线| 区一区二区三区中文字幕| 亚洲人视频在线观看| 国产精品美乳在线观看| 亚洲精品中文字幕在线| 在线观看国产福利视频| 国产黄色美女视频| 日本黄色电影网站| 国产玉足榨精视频在线观看| 日韩国产精品久久| 69**夜色精品国产69乱| 免费av片在线观看一道本| 4虎在线播放1区| av电影在线观看不卡| 国产99在线观看| 影音先锋日韩| av毛片久久久久**hd| japanese国产精品| 久久久久久国产精品免费免费| 国产精品一二三视频| 久久这里只精品| 艳妇乳肉亭妇荡乳av| 欧美大波大乳巨大乳| 国产极品美女在线| 国产农村妇女毛片精品久久莱园子| 国模精品视频一区二区三区| 国产自产在线视频一区| 国产精欧美一区二区三区蓝颜男同| 久久久一区二区| 国产乱国产乱老熟| 中文字幕1区2区3区| 99re免费视频精品全部| 亚洲成人18| 可以免费看的黄色网址| 尤蜜粉嫩av国产一区二区三区| 99国产精品久久久久久久成人热| 无码日韩人妻精品久久蜜桃| www 久久久| 亚洲va久久久噜噜噜久久狠狠| 亚洲av无码片一区二区三区| 向日葵视频成人app网址| a美女胸又www黄视频久久| 尤物视频免费观看| 国产精品美女久久久久久久久久久| 欧美日韩一区二区三区四区不卡| 在线观看视频污| 99视频精品全部免费在线| 亚洲午夜免费福利视频| 国产一区二区三区直播精品电影| 91亚洲精品一区二区乱码| 精品久久人人做人人爱| 色婷婷精品视频| 欧美综合一区二区三区| 亚洲欧美国产三级| 成人一区在线看| 欧美床上激情在线观看| 一级毛片高清视频| 亚洲深深色噜噜狠狠爱网站| b站大片免费直播| 久久精品三级视频| 日本桃色视频| 欧美日韩在线影院| 国产亚洲精品自拍| 求av网址在线观看| 91麻豆国产福利在线观看| 日韩中文字幕三区| 国产精品一区不卡| 波多野结衣av在线免费观看| av蓝导航精品导航| 大地资源网在线观看免费官网| 中文字幕精品视频在线| 91在线视频官网| 污视频在线免费观看一区二区三区| 国产 日韩 欧美 综合| 日韩和一区二区| 无码任你躁久久久久久老妇| 手机精品视频在线| 菠萝菠萝蜜网站| 欧美日韩国产在线观看| 久久久9999久久精品小说| 久久久久久视频| 欧美精品少妇| 亚洲一区久久久| 久久久久久久极品内射| 欧美成人精品一区二区三区| 国产伦精品一区二区三区视频网站| 在线heyzo| **精品中文字幕一区二区三区| 蜜桃无码一区二区三区| 中文字幕无码精品亚洲资源网久久| 精品国产99| 一本久中文高清| 在线观看免费视频a| 成人看片视频| 内射后入在线观看一区| 中文在线免费一区三区高中清不卡| 天天草夜夜草| 小黄文在线观看| 久久伊人一区二区| 国产.欧美.日韩| 亚洲黄色a级片| 亚洲中文字幕一区二区| 国产一区私人高清影院| 亚洲精品永久免费精品| 国产三级精品在线| 国产精品av一区二区| 97人人爽人人澡人人精品| 精品国产一区二区三区四区四| 美女日批免费视频| 久久久久久久久久国产| 青草青青国产| 欧美色图俺去了| 亚洲av无一区二区三区| 亚洲精品免费电影| 欧美 日韩精品| 日本加勒比一区| 国产无遮挡又黄又爽免费软件| 99久久亚洲精品日本无码| 九九热爱视频精品视频| 亚洲精品欧美日韩专区| 好吊妞视频这里有精品| 精久久久久久| 五月婷婷六月婷婷| www中文字幕| 天使と恶魔の榨精在线播放| 国产视色精品亚洲一区二区| 国产又黄又粗视频| 亚洲精品国产精品乱码不99| 国产成人精品久久| 岛国大片在线免费观看| 久久久久久久av麻豆果冻| a视频在线播放| 国产日本欧美视频| 亚洲精品少妇网址| 国产中文字幕免费观看| 日韩在线视频一区| 啪啪av大全导航福利综合导航| 暴力调教一区二区三区| 亚洲午夜av久久乱码| 国产露脸91国语对白| 91精品国产综合久久小美女| 国产精品国产三级国产专区51| 亚洲国产乱码最新视频| 色拍拍在线精品视频8848| 91丨九色丨蝌蚪丨少妇在线观看| 国产自产2019最新不卡| 狠狠v欧美v日韩v亚洲ⅴ| 国产剧情av在线播放| 黄色在线播放| 欧美羞羞视频| 欧美国产视频在线观看| hitomi一区二区三区精品| 6080yy午夜一二三区久久| 国产免费福利视频| 日韩在线xxx| 一本久久a久久精品vr综合| 欧美一区国产在线| 日韩一区精品字幕| 久久品道一品道久久精品| 精品按摩偷拍| 久久久久久久久久网站| 青娱乐精品在线视频| 性色88av老女人视频| 99re在线观看视频| 欧美一区二区三区四区在线观看| 国产经典一区二区三区| 国产成人8x视频一区二区| 亚洲激情国产精品| 男人的天堂网页| 青青草97国产精品免费观看无弹窗版| 亚洲无限乱码一二三四麻| 免费在线看黄网址| 成人羞羞视频免费| 美女在线免费视频| 免费观看一级一片| 天堂影院一区二区| 久久午夜国产精品| 在线尤物九色自拍| 中文字幕2区| 91麻豆产精品久久久久久夏晴子| 在线免费观看黄| 97精品人妻一区二区三区| 最近中文字幕2019第二页视频| 久久久久九九精品影院| 免费av福利| 久色成人在线| 美女任你摸久久| 九色精品91| 国产xxxx视频| 国产免费拔擦拔擦8x高清在线人| 91成人福利在线| 视频精品二区| 在线看女人毛片| 50路60路老熟妇啪啪| 午夜精品99久久免费| 一区二区三区视频国产日韩| h色网站在线观看| 亚洲免费在线观看| 夜夜精品浪潮av一区二区三区| 欧美一级做一级爱a做片性| 日韩女同一区二区三区| 色婷婷亚洲十月十月色天|