HTTP協(xié)議入門(mén)教程,一文就夠了!

1,摘要

本文講解了HTTP協(xié)議的定義,請(qǐng)求/響應(yīng)的消息體結(jié)構(gòu)定義,HTTP狀態(tài)碼等內(nèi)容。

2,HTTP協(xié)議介紹

HTTP協(xié)議是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)的縮寫(xiě),是用于從萬(wàn)維網(wǎng)(WWW:World Wide Web )服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。

HTTP是一個(gè)基于TCP/IP通信協(xié)議來(lái)傳遞數(shù)據(jù)(HTML 文件, 圖片文件, 查詢結(jié)果等)。

HTTP是一個(gè)屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡(jiǎn)捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年提出,經(jīng)過(guò)幾年的使用與發(fā)展,得到不斷地完善和擴(kuò)展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規(guī)范化工作正在進(jìn)行之中,而且HTTP-NG(Next Generation of HTTP)的建議已經(jīng)提出。

HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)為上。瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請(qǐng)求。Web服務(wù)器根據(jù)接收到的請(qǐng)求后,向客戶端發(fā)送響應(yīng)信息。

2.1,HTTP協(xié)議主要特點(diǎn)

1、簡(jiǎn)單快速:客戶向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。請(qǐng)求方法常用的有GET、HEAD、POST。每種方法規(guī)定了客戶與服務(wù)器聯(lián)系的類(lèi)型不同。由于HTTP協(xié)議簡(jiǎn)單,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。

2、靈活:HTTP允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象。正在傳輸?shù)念?lèi)型由Content-Type加以標(biāo)記。這意味著,只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類(lèi)型的數(shù)據(jù)都可以通過(guò)HTTP發(fā)送。客戶端以及服務(wù)器指定使用適合的MIME-type內(nèi)容類(lèi)型。

3.無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求,并收到客戶的應(yīng)答后,即斷開(kāi)連接。采用這種方式可以節(jié)省傳輸時(shí)間。

4.無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。

5、支持B/S及C/S模式。

2.2,HTTP協(xié)議交互原理

HTTP協(xié)議工作于客戶端-服務(wù)端架構(gòu)上。瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)端即WEB服務(wù)器發(fā)送所有請(qǐng)求。

Web服務(wù)器有:Apache服務(wù)器,IIS服務(wù)器(Internet Information Services)等。

Web服務(wù)器根據(jù)接收到的請(qǐng)求后,向客戶端發(fā)送響應(yīng)信息。

HTTP默認(rèn)端口號(hào)為80,但是你也可以改為8080或者其他端口。

3. HTTP 消息結(jié)構(gòu)

HTTP通過(guò)一個(gè)可靠的鏈接來(lái)交換信息,是一個(gè)無(wú)狀態(tài)的請(qǐng)求/響應(yīng)協(xié)議。

一個(gè)HTTP"客戶端"是一個(gè)應(yīng)用程序(Web瀏覽器或其他任何客戶端),通過(guò)連接到服務(wù)器達(dá)到向服務(wù)器發(fā)送一個(gè)或多個(gè)HTTP的請(qǐng)求的目的。

一個(gè)HTTP"服務(wù)器"同樣也是一個(gè)應(yīng)用程序(通常是一個(gè)Web服務(wù),如Apache Web服務(wù)器或IIS服務(wù)器等),通過(guò)接收客戶端的請(qǐng)求并向客戶端發(fā)送HTTP響應(yīng)數(shù)據(jù)。

HTTP使用統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifiers, URI)來(lái)傳輸數(shù)據(jù)和建立連接。

一旦建立連接后,數(shù)據(jù)消息就通過(guò)類(lèi)似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴(kuò)展(MIME)[RFC2045]來(lái)傳送。

3.1 客戶端請(qǐng)求消息

客戶端發(fā)送一個(gè)HTTP請(qǐng)求到服務(wù)器的請(qǐng)求消息包括以下格式:請(qǐng)求行(request line)、請(qǐng)求頭部(header)、空行和請(qǐng)求數(shù)據(jù)四個(gè)部分組成,下圖給出了請(qǐng)求報(bào)文的一般格式。

3.1.1 HTTP請(qǐng)求方法

根據(jù)HTTP標(biāo)準(zhǔn),HTTP請(qǐng)求可以使用多種請(qǐng)求方法。

HTTP1.0定義了三種請(qǐng)求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五種請(qǐng)求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

序號(hào) 方法 描述
1 GET 請(qǐng)求指定的頁(yè)面信息,并返回實(shí)體主體。
2 HEAD 類(lèi)似于get請(qǐng)求,只不過(guò)返回的響應(yīng)中沒(méi)有具體的內(nèi)容,用于獲取報(bào)頭
3 POST 向指定資源提交數(shù)據(jù)進(jìn)行處理請(qǐng)求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請(qǐng)求體中。POST請(qǐng)求可能會(huì)導(dǎo)致新的資源的建立和/或已有資源的修改。
4 PUT 從客戶端向服務(wù)器傳送的數(shù)據(jù)取代指定的文檔的內(nèi)容。
5 DELETE 請(qǐng)求服務(wù)器刪除指定的頁(yè)面。
6 CONNECT HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
7 OPTIONS 允許客戶端查看服務(wù)器的性能。
8 TRACE 回顯服務(wù)器收到的請(qǐng)求,主要用于測(cè)試或診斷。

3.1.2 URL格式定義

在WWW上,每一信息資源都有統(tǒng)一的且在網(wǎng)上唯一的地址,該地址就叫URL(Uniform Resource Locator,統(tǒng)一資源定位符),它是WWW的統(tǒng)一資源定位標(biāo)志,就是指網(wǎng)絡(luò)地址。

語(yǔ)法:

URL由三部分組成:資源類(lèi)型、存放資源的主機(jī)域名、資源文件名。
URL的一般語(yǔ)法格式為:(帶方括號(hào)[]的為可選項(xiàng)):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment

格式說(shuō)明

protocol(協(xié)議)

指定使用的傳輸協(xié)議,下表列出 protocol 屬性的有效方案名稱(chēng)。 最常用的是HTTP協(xié)議,它也是目前WWW中應(yīng)用最廣的協(xié)議。

file 資源是本地計(jì)算機(jī)上的文件。格式file:///,注意后邊應(yīng)是三個(gè)斜杠。

ftp 通過(guò) FTP訪問(wèn)資源。格式 FTP://

gopher 通過(guò) Gopher 協(xié)議訪問(wèn)該資源。

http 通過(guò) HTTP 訪問(wèn)該資源。 格式 HTTP://

https 通過(guò)安全的 HTTPS 訪問(wèn)該資源。 格式 HTTPS://

mailto 資源為電子郵件地址,通過(guò) SMTP 訪問(wèn)。 格式 mailto:

MMS 通過(guò) 支持MMS(流媒體)協(xié)議的播放該資源。(代表軟件:Windows Media Player)格式 MMS://

ed2k 通過(guò) 支持ed2k(專(zhuān)用下載鏈接)協(xié)議的P2P軟件訪問(wèn)該資源。(代表軟件:電驢) 格式 ed2k://

Flashget 通過(guò) 支持Flashget:(專(zhuān)用下載鏈接)協(xié)議的P2P軟件訪問(wèn)該資源。(代表軟件:快車(chē)) 格式 Flashget://

thunder 通過(guò) 支持thunder(專(zhuān)用下載鏈接)協(xié)議的P2P軟件訪問(wèn)該資源。(代表軟件:迅雷) 格式 thunder://

news 通過(guò) NNTP 訪問(wèn)該資源。

hostname(主機(jī)名)

是指存放資源的服務(wù)器的域名系統(tǒng)(DNS) 主機(jī)名或 IP 地址。有時(shí),在主機(jī)名前也可以包含連接到服務(wù)器所需的用戶名和密碼(格式:username:password@hostname)。

port(端口號(hào))

整數(shù),可選,省略時(shí)使用方案的默認(rèn)端口,各種傳輸協(xié)議都有默認(rèn)的端口號(hào),如http的默認(rèn)端口為80。如果輸入時(shí)省略,則使用默認(rèn)端口號(hào)。有時(shí)候出于安全或其他考慮,可以在服務(wù)器上對(duì)端口進(jìn)行重定義,即采用非標(biāo)準(zhǔn)端口號(hào),此時(shí),URL中就不能省略端口號(hào)這一項(xiàng)。

path(路徑)

由零或多個(gè)“/”符號(hào)隔開(kāi)的字符串,一般用來(lái)表示主機(jī)上的一個(gè)目錄或文件地址。

parameters(參數(shù))

這是用于指定特殊參數(shù)的可選項(xiàng)。

query(查詢)

可選,用于給動(dòng)態(tài)網(wǎng)頁(yè)(如使用CGI、ISAPI、PHP/JSP/ASP/ASP。NET等技術(shù)制作的網(wǎng)頁(yè))傳遞參數(shù),可有多個(gè)參數(shù),用“&”符號(hào)隔開(kāi),每個(gè)參數(shù)的名和值用“=”符號(hào)隔開(kāi)。

fragment(信息片斷)

字符串,用于指定網(wǎng)絡(luò)資源中的片斷。例如一個(gè)網(wǎng)頁(yè)中有多個(gè)名詞解釋?zhuān)墒褂胒ragment直接定位到某一名詞解釋。

3.1.3 HTTP之URL

以下面這個(gè)URL為例,介紹下普通URL的各部分組成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name

從上面的URL可以看出,一個(gè)完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁(yè)使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議,如HTTP,F(xiàn)TP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符

2.域名部分:該URL的域名部分為“www.aspxfans.com”。一個(gè)URL中,也可以使用IP地址作為域名使用

3.端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個(gè)URL必須的部分,如果省略端口部分,將采用默認(rèn)端口

4.虛擬目錄部分:從域名后的第一個(gè)“/”開(kāi)始到最后一個(gè)“/”為止,是虛擬目錄部分。虛擬目錄也不是一個(gè)URL必須的部分。本例中的虛擬目錄是“/news/”

5.文件名部分:從域名后的最后一個(gè)“/”開(kāi)始到“?”為止,是文件名部分,如果沒(méi)有“?”,則是從域名后的最后一個(gè)“/”開(kāi)始到“#”為止,是文件部分,如果沒(méi)有“?”和“#”,那么從域名后的最后一個(gè)“/”開(kāi)始到結(jié)束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分,如果省略該部分,則使用默認(rèn)的文件名

6.錨部分:從“#”開(kāi)始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個(gè)URL必須的部分

7.參數(shù)部分:從“?”開(kāi)始到“#”為止之間的部分為參數(shù)部分,又稱(chēng)搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個(gè)參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。

3.2 服務(wù)器響應(yīng)消息

HTTP響應(yīng)也由四個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、空行和響應(yīng)正文。

3.2.1 HTTP狀態(tài)碼

當(dāng)瀏覽者訪問(wèn)一個(gè)網(wǎng)頁(yè)時(shí),瀏覽者的瀏覽器會(huì)向網(wǎng)頁(yè)所在服務(wù)器發(fā)出請(qǐng)求。當(dāng)瀏覽器接收并顯示網(wǎng)頁(yè)前,此網(wǎng)頁(yè)所在的服務(wù)器會(huì)返回一個(gè)包含HTTP狀態(tài)碼的信息頭(server header)用以響應(yīng)瀏覽器的請(qǐng)求。

HTTP狀態(tài)碼的英文為HTTP Status Code。

下面是常見(jiàn)的HTTP狀態(tài)碼:

  • 200 - 請(qǐng)求成功
  • 301 - 資源(網(wǎng)頁(yè)等)被永久轉(zhuǎn)移到其它URL
  • 404 - 請(qǐng)求的資源(網(wǎng)頁(yè)等)不存在
  • 500 - 內(nèi)部服務(wù)器錯(cuò)誤

HTTP狀態(tài)碼分類(lèi)

HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類(lèi)型,后兩個(gè)數(shù)字沒(méi)有分類(lèi)的作用。HTTP狀態(tài)碼共分為5種類(lèi)型:

<caption style="border: 0px; margin: 0px; padding: 0px;">HTTP狀態(tài)碼分類(lèi)</caption>

分類(lèi) 分類(lèi)描述
1** 信息,服務(wù)器收到請(qǐng)求,需要請(qǐng)求者繼續(xù)執(zhí)行操作
2** 成功,操作被成功接收并處理
3** 重定向,需要進(jìn)一步的操作以完成請(qǐng)求
4** 客戶端錯(cuò)誤,請(qǐng)求包含語(yǔ)法錯(cuò)誤或無(wú)法完成請(qǐng)求
5** 服務(wù)器錯(cuò)誤,服務(wù)器在處理請(qǐng)求的過(guò)程中發(fā)生了錯(cuò)誤

HTTP狀態(tài)碼列表:

<caption style="border: 0px; margin: 0px; padding: 0px;">HTTP狀態(tài)碼列表</caption>

狀態(tài)碼 狀態(tài)碼英文名稱(chēng) 中文描述
100 Continue 繼續(xù)。客戶端應(yīng)繼續(xù)其請(qǐng)求
101 Switching Protocols 切換協(xié)議。服務(wù)器根據(jù)客戶端的請(qǐng)求切換協(xié)議。只能切換到更高級(jí)的協(xié)議,例如,切換到HTTP的新版本協(xié)議
200 OK 請(qǐng)求成功。一般用于GET與POST請(qǐng)求
201 Created 已創(chuàng)建。成功請(qǐng)求并創(chuàng)建了新的資源
202 Accepted 已接受。已經(jīng)接受請(qǐng)求,但未處理完成
203 Non-Authoritative Information 非授權(quán)信息。請(qǐng)求成功。但返回的meta信息不在原始的服務(wù)器,而是一個(gè)副本
204 No Content 無(wú)內(nèi)容。服務(wù)器成功處理,但未返回內(nèi)容。在未更新網(wǎng)頁(yè)的情況下,可確保瀏覽器繼續(xù)顯示當(dāng)前文檔
205 Reset Content 重置內(nèi)容。服務(wù)器處理成功,用戶終端(例如:瀏覽器)應(yīng)重置文檔視圖。可通過(guò)此返回碼清除瀏覽器的表單域
206 Partial Content 部分內(nèi)容。服務(wù)器成功處理了部分GET請(qǐng)求
300 Multiple Choices 多種選擇。請(qǐng)求的資源可包括多個(gè)位置,相應(yīng)可返回一個(gè)資源特征與地址的列表用于用戶終端(例如:瀏覽器)選擇
301 Moved Permanently 永久移動(dòng)。請(qǐng)求的資源已被永久的移動(dòng)到新URI,返回信息會(huì)包括新的URI,瀏覽器會(huì)自動(dòng)定向到新URI。今后任何新的請(qǐng)求都應(yīng)使用新的URI代替
302 Found 臨時(shí)移動(dòng)。與301類(lèi)似。但資源只是臨時(shí)被移動(dòng)??蛻舳藨?yīng)繼續(xù)使用原有URI
303 See Other 查看其它地址。與301類(lèi)似。使用GET和POST請(qǐng)求查看
304 Not Modified 未修改。所請(qǐng)求的資源未修改,服務(wù)器返回此狀態(tài)碼時(shí),不會(huì)返回任何資源??蛻舳送ǔ?huì)緩存訪問(wèn)過(guò)的資源,通過(guò)提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源
305 Use Proxy 使用代理。所請(qǐng)求的資源必須通過(guò)代理訪問(wèn)
306 Unused 已經(jīng)被廢棄的HTTP狀態(tài)碼
307 Temporary Redirect 臨時(shí)重定向。與302類(lèi)似。使用GET請(qǐng)求重定向
400 Bad Request 客戶端請(qǐng)求的語(yǔ)法錯(cuò)誤,服務(wù)器無(wú)法理解
401 Unauthorized 請(qǐng)求要求用戶的身份認(rèn)證
402 Payment Required 保留,將來(lái)使用
403 Forbidden 服務(wù)器理解請(qǐng)求客戶端的請(qǐng)求,但是拒絕執(zhí)行此請(qǐng)求
404 Not Found 服務(wù)器無(wú)法根據(jù)客戶端的請(qǐng)求找到資源(網(wǎng)頁(yè))。通過(guò)此代碼,網(wǎng)站設(shè)計(jì)人員可設(shè)置"您所請(qǐng)求的資源無(wú)法找到"的個(gè)性頁(yè)面
405 Method Not Allowed 客戶端請(qǐng)求中的方法被禁止
406 Not Acceptable 服務(wù)器無(wú)法根據(jù)客戶端請(qǐng)求的內(nèi)容特性完成請(qǐng)求
407 Proxy Authentication Required 請(qǐng)求要求代理的身份認(rèn)證,與401類(lèi)似,但請(qǐng)求者應(yīng)當(dāng)使用代理進(jìn)行授權(quán)
408 Request Time-out 服務(wù)器等待客戶端發(fā)送的請(qǐng)求時(shí)間過(guò)長(zhǎng),超時(shí)
409 Conflict 服務(wù)器完成客戶端的PUT請(qǐng)求是可能返回此代碼,服務(wù)器處理請(qǐng)求時(shí)發(fā)生了沖突
410 Gone 客戶端請(qǐng)求的資源已經(jīng)不存在。410不同于404,如果資源以前有現(xiàn)在被永久刪除了可使用410代碼,網(wǎng)站設(shè)計(jì)人員可通過(guò)301代碼指定資源的新位置
411 Length Required 服務(wù)器無(wú)法處理客戶端發(fā)送的不帶Content-Length的請(qǐng)求信息
412 Precondition Failed 客戶端請(qǐng)求信息的先決條件錯(cuò)誤
413 Request Entity Too Large 由于請(qǐng)求的實(shí)體過(guò)大,服務(wù)器無(wú)法處理,因此拒絕請(qǐng)求。為防止客戶端的連續(xù)請(qǐng)求,服務(wù)器可能會(huì)關(guān)閉連接。如果只是服務(wù)器暫時(shí)無(wú)法處理,則會(huì)包含一個(gè)Retry-After的響應(yīng)信息
414 Request-URI Too Large 請(qǐng)求的URI過(guò)長(zhǎng)(URI通常為網(wǎng)址),服務(wù)器無(wú)法處理
415 Unsupported Media Type 服務(wù)器無(wú)法處理請(qǐng)求附帶的媒體格式
416 Requested range not satisfiable 客戶端請(qǐng)求的范圍無(wú)效
417 Expectation Failed 服務(wù)器無(wú)法滿足Expect的請(qǐng)求頭信息
500 Internal Server Error 服務(wù)器內(nèi)部錯(cuò)誤,無(wú)法完成請(qǐng)求
501 Not Implemented 服務(wù)器不支持請(qǐng)求的功能,無(wú)法完成請(qǐng)求
502 Bad Gateway 作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從遠(yuǎn)程服務(wù)器接收到了一個(gè)無(wú)效的響應(yīng)
503 Service Unavailable 由于超載或系統(tǒng)維護(hù),服務(wù)器暫時(shí)的無(wú)法處理客戶端的請(qǐng)求。延時(shí)的長(zhǎng)度可包含在服務(wù)器的Retry-After頭信息中
504 Gateway Time-out 充當(dāng)網(wǎng)關(guān)或代理的服務(wù)器,未及時(shí)從遠(yuǎn)端服務(wù)器獲取請(qǐng)求
505 HTTP Version not supported 服務(wù)器不支持請(qǐng)求的HTTP協(xié)議的版本,無(wú)法完成處理

3.2.2 HTTP 響應(yīng)頭信息

在本章節(jié)中我們將具體來(lái)介紹HTTP響應(yīng)頭信息。

應(yīng)答頭 說(shuō)明
Allow 服務(wù)器支持哪些請(qǐng)求方法(如GET、POST等)。
Content-Encoding 文檔的編碼(Encode)方法。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類(lèi)型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時(shí)間。Java的GZIPOutputStream可以很方便地進(jìn)行g(shù)zip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet應(yīng)該通過(guò)查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經(jīng)gzip壓縮的HTML頁(yè)面,為其他瀏覽器返回普通頁(yè)面。
Content-Length 表示內(nèi)容長(zhǎng)度。只有當(dāng)瀏覽器使用持久HTTP連接時(shí)才需要這個(gè)數(shù)據(jù)。如果你想要利用持久連接的優(yōu)勢(shì),可以把輸出文檔寫(xiě)入 ByteArrayOutputStream,完成后查看其大小,然后把該值放入Content-Length頭,最后通過(guò)byteArrayStream.writeTo(response.getOutputStream()發(fā)送內(nèi)容。
Content-Type 表示后面的文檔屬于什么MIME類(lèi)型。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html。由于經(jīng)常要設(shè)置Content-Type,因此HttpServletResponse提供了一個(gè)專(zhuān)用的方法setContentType。
Date 當(dāng)前的GMT時(shí)間。你可以用setDateHeader來(lái)設(shè)置這個(gè)頭以避免轉(zhuǎn)換時(shí)間格式的麻煩。
Expires 應(yīng)該在什么時(shí)候認(rèn)為文檔已經(jīng)過(guò)期,從而不再緩存它?
Last-Modified 文檔的最后改動(dòng)時(shí)間。客戶可以通過(guò)If-Modified-Since請(qǐng)求頭提供一個(gè)日期,該請(qǐng)求將被視為一個(gè)條件GET,只有改動(dòng)時(shí)間遲于指定時(shí)間的文檔才會(huì)返回,否則返回一個(gè)304(Not Modified)狀態(tài)。Last-Modified也可用setDateHeader方法來(lái)設(shè)置。
Location 表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n。Location通常不是直接設(shè)置的,而是通過(guò)HttpServletResponse的sendRedirect方法,該方法同時(shí)設(shè)置狀態(tài)代碼為302。
Refresh 表示瀏覽器應(yīng)該在多少時(shí)間之后刷新文檔,以秒計(jì)。除了刷新當(dāng)前文檔之外,你還可以通過(guò)setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁(yè)面。 注意這種功能通常是通過(guò)設(shè)置HTML頁(yè)面HEAD區(qū)的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實(shí)現(xiàn),這是因?yàn)椋詣?dòng)刷新或重定向?qū)τ谀切┎荒苁褂肅GI或Servlet的HTML編寫(xiě)者十分重要。但是,對(duì)于Servlet來(lái)說(shuō),直接設(shè)置Refresh頭更加方便。 注意Refresh的意義是"N秒之后刷新本頁(yè)面或訪問(wèn)指定頁(yè)面",而不是"每隔N秒刷新本頁(yè)面或訪問(wèn)指定頁(yè)面"。因此,連續(xù)刷新要求每次都發(fā)送一個(gè)Refresh頭,而發(fā)送204狀態(tài)代碼則可以阻止瀏覽器繼續(xù)刷新,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...> 注意Refresh頭不屬于HTTP 1.1正式規(guī)范的一部分,而是一個(gè)擴(kuò)展,但Netscape和IE都支持它。
Server 服務(wù)器名字。Servlet一般不設(shè)置這個(gè)值,而是由Web服務(wù)器自己設(shè)置。
Set-Cookie 設(shè)置和頁(yè)面關(guān)聯(lián)的Cookie。Servlet不應(yīng)使用response.setHeader("Set-Cookie", ...),而是應(yīng)使用HttpServletResponse提供的專(zhuān)用方法addCookie。參見(jiàn)下文有關(guān)Cookie設(shè)置的討論。
WWW-Authenticate 客戶應(yīng)該在Authorization頭中提供什么類(lèi)型的授權(quán)信息?在包含401(Unauthorized)狀態(tài)行的應(yīng)答中這個(gè)頭是必需的。例如,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。 注意Servlet一般不進(jìn)行這方面的處理,而是讓W(xué)eb服務(wù)器的專(zhuān)門(mén)機(jī)制來(lái)控制受密碼保護(hù)頁(yè)面的訪問(wèn)(例如.htaccess)。

3.2.2 HTTP content-type

Content-Type,內(nèi)容類(lèi)型,一般是指網(wǎng)頁(yè)中存在的Content-Type,用于定義網(wǎng)絡(luò)文件的類(lèi)型和網(wǎng)頁(yè)的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個(gè)文件,這就是經(jīng)??吹揭恍〢sp網(wǎng)頁(yè)點(diǎn)擊的結(jié)果卻是下載到的一個(gè)文件或一張圖片的原因。

文件擴(kuò)展名 Content-Type(Mime-Type) 文件擴(kuò)展名 Content-Type(Mime-Type)
.*( 二進(jìn)制流,不知道下載文件類(lèi)型) application/octet-stream .tif image/tiff
.001 application/x-001 .301 application/x-301
.323 text/h323 .906 application/x-906
.907 drawing/907 .a11 application/x-a11
.acp audio/x-mei-aac .ai application/postscript
.aif audio/aiff .aifc audio/aiff
.aiff audio/aiff .anv application/x-anv
.asa text/asa .asf video/x-ms-asf
.asp text/asp .asx video/x-ms-asf
.au audio/basic .avi video/avi
.awf application/vnd.adobe.workflow .biz text/xml
.bmp application/x-bmp .bot application/x-bot
.c4t application/x-c4t .c90 application/x-c90
.cal application/x-cals .cat application/vnd.ms-pki.seccat
.cdf application/x-netcdf .cdr application/x-cdr
.cel application/x-cel .cer application/x-x509-ca-cert
.cg4 application/x-g4 .cgm application/x-cgm
.cit application/x-cit .class java/*
.cml text/xml .cmp application/x-cmp
.cmx application/x-cmx .cot application/x-cot
.crl application/pkix-crl .crt application/x-x509-ca-cert
.csi application/x-csi .css text/css
.cut application/x-cut .dbf application/x-dbf
.dbm application/x-dbm .dbx application/x-dbx
.dcd text/xml .dcx application/x-dcx
.der application/x-x509-ca-cert .dgn application/x-dgn
.dib application/x-dib .dll application/x-msdownload
.doc application/msword .dot application/msword
.drw application/x-drw .dtd text/xml
.dwf Model/vnd.dwf .dwf application/x-dwf
.dwg application/x-dwg .dxb application/x-dxb
.dxf application/x-dxf .edn application/vnd.adobe.edn
.emf application/x-emf .eml message/rfc822
.ent text/xml .epi application/x-epi
.eps application/x-ps .eps application/postscript
.etd application/x-ebx .exe application/x-msdownload
.fax image/fax .fdf application/vnd.fdf
.fif application/fractals .fo text/xml
.frm application/x-frm .g4 application/x-g4
.gbr application/x-gbr . application/x-
.gif image/gif .gl2 application/x-gl2
.gp4 application/x-gp4 .hgl application/x-hgl
.hmr application/x-hmr .hpg application/x-hpgl
.hpl application/x-hpl .hqx application/mac-binhex40
.hrf application/x-hrf .hta application/hta
.htc text/x-component .htm text/html
.html text/html .htt text/webviewhtml
.htx text/html .icb application/x-icb
.ico image/x-icon .ico application/x-ico
.iff application/x-iff .ig4 application/x-g4
.igs application/x-igs .iii application/x-iphone
.img application/x-img .ins application/x-internet-signup
.isp application/x-internet-signup .IVF video/x-ivf
.java java/* .jfif image/jpeg
.jpe image/jpeg .jpe application/x-jpe
.jpeg image/jpeg .jpg image/jpeg
.jpg application/x-jpg .js application/x-javascript
.jsp text/html .la1 audio/x-liquid-file
.lar application/x-laplayer-reg .latex application/x-latex
.lavs audio/x-liquid-secure .lbm application/x-lbm
.lmsff audio/x-la-lms .ls application/x-javascript
.ltr application/x-ltr .m1v video/x-mpeg
.m2v video/x-mpeg .m3u audio/mpegurl
.m4e video/mpeg4 .mac application/x-mac
.man application/x-troff-man .math text/xml
.mdb application/msaccess .mdb application/x-mdb
.mfp application/x-shockwave-flash .mht message/rfc822
.mhtml message/rfc822 .mi application/x-mi
.mid audio/mid .midi audio/mid
.mil application/x-mil .mml text/xml
.mnd audio/x-musicnet-download .mns audio/x-musicnet-stream
.mocha application/x-javascript .movie video/x-sgi-movie
.mp1 audio/mp1 .mp2 audio/mp2
.mp2v video/mpeg .mp3 audio/mp3
.mp4 video/mpeg4 .mpa video/x-mpg
.mpd application/vnd.ms-project .mpe video/x-mpeg
.mpeg video/mpg .mpg video/mpg
.mpga audio/rn-mpeg .mpp application/vnd.ms-project
.mps video/x-mpeg .mpt application/vnd.ms-project
.mpv video/mpg .mpv2 video/mpeg
.mpw application/vnd.ms-project .mpx application/vnd.ms-project
.mtx text/xml .mxp application/x-mmxp
.net image/pnetvue .nrf application/x-nrf
.nws message/rfc822 .odc text/x-ms-odc
.out application/x-out .p10 application/pkcs10
.p12 application/x-pkcs12 .p7b application/x-pkcs7-certificates
.p7c application/pkcs7-mime .p7m application/pkcs7-mime
.p7r application/x-pkcs7-certreqresp .p7s application/pkcs7-signature
.pc5 application/x-pc5 .pci application/x-pci
.pcl application/x-pcl .pcx application/x-pcx
.pdf application/pdf .pdf application/pdf
.pdx application/vnd.adobe.pdx .pfx application/x-pkcs12
.pgl application/x-pgl .pic application/x-pic
.pko application/vnd.ms-pki.pko .pl application/x-perl
.plg text/html .pls audio/scpls
.plt application/x-plt .png image/png
.png application/x-png .pot application/vnd.ms-powerpoint
.ppa application/vnd.ms-powerpoint .ppm application/x-ppm
.pps application/vnd.ms-powerpoint .ppt application/vnd.ms-powerpoint
.ppt application/x-ppt .pr application/x-pr
.prf application/pics-rules .prn application/x-prn
.prt application/x-prt .ps application/x-ps
.ps application/postscript .ptn application/x-ptn
.pwz application/vnd.ms-powerpoint .r3t text/vnd.rn-realtext3d
.ra audio/vnd.rn-realaudio .ram audio/x-pn-realaudio
.ras application/x-ras .rat application/rat-file
.rdf text/xml .rec application/vnd.rn-recording
.red application/x-red .rgb application/x-rgb
.rjs application/vnd.rn-realsystem-rjs .rjt application/vnd.rn-realsystem-rjt
.rlc application/x-rlc .rle application/x-rle
.rm application/vnd.rn-realmedia .rmf application/vnd.adobe.rmf
.rmi audio/mid .rmj application/vnd.rn-realsystem-rmj
.rmm audio/x-pn-realaudio .rmp application/vnd.rn-rn_music_package
.rms application/vnd.rn-realmedia-secure .rmvb application/vnd.rn-realmedia-vbr
.rmx application/vnd.rn-realsystem-rmx .rnx application/vnd.rn-realplayer
.rp image/vnd.rn-realpix .rpm audio/x-pn-realaudio-plugin
.rsml application/vnd.rn-rsml .rt text/vnd.rn-realtext
.rtf application/msword .rtf application/x-rtf
.rv video/vnd.rn-realvideo .sam application/x-sam
.sat application/x-sat .sdp application/sdp
.sdw application/x-sdw .sit application/x-stuffit
.slb application/x-slb .sld application/x-sld
.slk drawing/x-slk .smi application/smil
.smil application/smil .smk application/x-smk
.snd audio/basic .sol text/plain
.sor text/plain .spc application/x-pkcs7-certificates
.spl application/futuresplash .spp text/xml
.ssm application/streamingmedia .sst application/vnd.ms-pki.certstore
.stl application/vnd.ms-pki.stl .stm text/html
.sty application/x-sty .svg text/xml
.swf application/x-shockwave-flash .tdf application/x-tdf
.tg4 application/x-tg4 .tga application/x-tga
.tif image/tiff .tif application/x-tif
.tiff image/tiff .tld text/xml
.top drawing/x-top .torrent application/x-bittorrent
.tsd text/xml .txt text/plain
.uin application/x-icq .uls text/iuls
.vcf text/x-vcard .vda application/x-vda
.vdx application/vnd.visio .vml text/xml
.vpg application/x-vpeg005 .vsd application/vnd.visio
.vsd application/x-vsd .vss application/vnd.visio
.vst application/vnd.visio .vst application/x-vst
.vsw application/vnd.visio .vsx application/vnd.visio
.vtx application/vnd.visio .vxml text/xml
.wav audio/wav .wax audio/x-ms-wax
.wb1 application/x-wb1 .wb2 application/x-wb2
.wb3 application/x-wb3 .wbmp image/vnd.wap.wbmp
.wiz application/msword .wk3 application/x-wk3
.wk4 application/x-wk4 .wkq application/x-wkq
.wks application/x-wks .wm video/x-ms-wm
.wma audio/x-ms-wma .wmd application/x-ms-wmd
.wmf application/x-wmf .wml text/vnd.wap.wml
.wmv video/x-ms-wmv .wmx video/x-ms-wmx
.wmz application/x-ms-wmz .wp6 application/x-wp6
.wpd application/x-wpd .wpg application/x-wpg
.wpl application/vnd.ms-wpl .wq1 application/x-wq1
.wr1 application/x-wr1 .wri application/x-wri
.wrk application/x-wrk .ws application/x-ws
.ws2 application/x-ws .wsc text/scriptlet
.wsdl text/xml .wvx video/x-ms-wvx
.xdp application/vnd.adobe.xdp .xdr text/xml
.xfd application/vnd.adobe.xfd .xfdf application/vnd.adobe.xfdf
.xhtml text/html .xls application/vnd.ms-excel
.xls application/x-xls .xlw application/x-xlw
.xml text/xml .xpl audio/scpls
.xq text/xml .xql text/xml
.xquery text/xml .xsd text/xml
.xsl text/xml .xslt text/xml
.xwd application/x-xwd .x_b application/x-x_b
.sis application/vnd.symbian.install .sisx application/vnd.symbian.install
.x_t application/x-x_t .ipa application/vnd.iphone
.apk application/vnd.android.package-archive .xap application/x-silverlight-app

4. 參考

(1)HTTP 教程
(2)關(guān)于HTTP協(xié)議,一篇就夠了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容