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é)議)的縮寫,是用于從萬(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)系的類型不同掀鹅。由于HTTP協(xié)議簡(jiǎn)單,使得HTTP服務(wù)器的程序規(guī)模小捐友,因而通信速度很快淫半。
2、靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對(duì)象匣砖。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記科吭。這意味著昏滴,只要客戶端和服務(wù)器知道如何處理的數(shù)據(jù)內(nèi)容,任何類型的數(shù)據(jù)都可以通過(guò)HTTP發(fā)送对人∫ナ猓客戶端以及服務(wù)器指定使用適合的MIME-type內(nèi)容類型。
3.無(wú)連接:無(wú)連接的含義是限制每次連接只處理一個(gè)請(qǐng)求牺弄。服務(wù)器處理完客戶的請(qǐng)求姻几,并收到客戶的應(yīng)答后,即斷開連接势告。采用這種方式可以節(jié)省傳輸時(shí)間蛇捌。
4.無(wú)狀態(tài):HTTP協(xié)議是無(wú)狀態(tài)協(xié)議。無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力咱台。缺少狀態(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ò)類似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 | 類似于get請(qǐng)求症杏,只不過(guò)返回的響應(yīng)中沒有具體的內(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由三部分組成:資源類型、存放資源的主機(jī)域名振定、資源文件名必怜。
URL的一般語(yǔ)法格式為:(帶方括號(hào)[]的為可選項(xiàng)):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
格式說(shuō)明
protocol(協(xié)議)
指定使用的傳輸協(xié)議,下表列出 protocol 屬性的有效方案名稱后频。 最常用的是HTTP協(xié)議梳庆,它也是目前WWW中應(yīng)用最廣的協(xié)議。
file 資源是本地計(jì)算機(jī)上的文件卑惜。格式file:///膏执,注意后邊應(yīng)是三個(gè)斜杠。
ftp 通過(guò) FTP訪問資源露久。格式 FTP://
gopher 通過(guò) Gopher 協(xié)議訪問該資源更米。
http 通過(guò) HTTP 訪問該資源。 格式 HTTP://
https 通過(guò)安全的 HTTPS 訪問該資源毫痕。 格式 HTTPS://
mailto 資源為電子郵件地址征峦,通過(guò) SMTP 訪問纸巷。 格式 mailto:
MMS 通過(guò) 支持MMS(流媒體)協(xié)議的播放該資源。(代表軟件:Windows Media Player)格式 MMS://
ed2k 通過(guò) 支持ed2k(專用下載鏈接)協(xié)議的P2P軟件訪問該資源眶痰。(代表軟件:電驢) 格式 ed2k://
Flashget 通過(guò) 支持Flashget:(專用下載鏈接)協(xié)議的P2P軟件訪問該資源瘤旨。(代表軟件:快車) 格式 Flashget://
thunder 通過(guò) 支持thunder(專用下載鏈接)協(xié)議的P2P軟件訪問該資源。(代表軟件:迅雷) 格式 thunder://
news 通過(guò) NNTP 訪問該資源竖伯。
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)隔開的字符串足淆,一般用來(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)隔開卜高,每個(gè)參數(shù)的名和值用“=”符號(hào)隔開。
fragment(信息片斷)
字符串南片,用于指定網(wǎng)絡(luò)資源中的片斷。例如一個(gè)網(wǎng)頁(yè)中有多個(gè)名詞解釋庭敦,可使用fragment直接定位到某一名詞解釋疼进。
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è)“/”開始到最后一個(gè)“/”為止,是虛擬目錄部分宴杀。虛擬目錄也不是一個(gè)URL必須的部分癣朗。本例中的虛擬目錄是“/news/”
5.文件名部分:從域名后的最后一個(gè)“/”開始到“?”為止旺罢,是文件名部分旷余,如果沒有“?”,則是從域名后的最后一個(gè)“/”開始到“#”為止,是文件部分扁达,如果沒有“荣暮?”和“#”,那么從域名后的最后一個(gè)“/”開始到結(jié)束罩驻,都是文件名部分穗酥。本例中的文件名是“index.asp”。文件名部分也不是一個(gè)URL必須的部分惠遏,如果省略該部分砾跃,則使用默認(rèn)的文件名
6.錨部分:從“#”開始到最后,都是錨部分节吮。本例中的錨部分是“name”抽高。錨部分也不是一個(gè)URL必須的部分
7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分透绩,又稱搜索部分翘骂、查詢部分。本例中的參數(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)瀏覽者訪問一個(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岖赋。
下面是常見的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)碼分類
HTTP狀態(tài)碼由三個(gè)十進(jìn)制數(shù)字組成,第一個(gè)十進(jìn)制數(shù)字定義了狀態(tài)碼的類型瓮孙,后兩個(gè)數(shù)字沒有分類的作用唐断。HTTP狀態(tài)碼共分為5種類型:
<caption style="border: 0px; margin: 0px; padding: 0px;">HTTP狀態(tài)碼分類</caption>
分類 | 分類描述 |
---|---|
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)碼英文名稱 | 中文描述 |
---|---|---|
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類似竭贩。但資源只是臨時(shí)被移動(dòng)蚜印。客戶端應(yīng)繼續(xù)使用原有URI |
303 | See Other | 查看其它地址留量。與301類似窄赋。使用GET和POST請(qǐng)求查看 |
304 | Not Modified | 未修改。所請(qǐng)求的資源未修改楼熄,服務(wù)器返回此狀態(tài)碼時(shí)忆绰,不會(huì)返回任何資源】善瘢客戶端通常會(huì)緩存訪問過(guò)的資源错敢,通過(guò)提供一個(gè)頭信息指出客戶端希望只返回在指定日期之后修改的資源 |
305 | Use Proxy | 使用代理。所請(qǐng)求的資源必須通過(guò)代理訪問 |
306 | Unused | 已經(jīng)被廢棄的HTTP狀態(tài)碼 |
307 | Temporary Redirect | 臨時(shí)重定向缕粹。與302類似稚茅。使用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類似,但請(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)容類型蚁孔。利用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ì)结榄,可以把輸出文檔寫入 ByteArrayOutputStream中贝,完成后查看其大小,然后把該值放入Content-Length頭臼朗,最后通過(guò)byteArrayStream.writeTo(response.getOutputStream()發(fā)送內(nèi)容邻寿。 |
Content-Type | 表示后面的文檔屬于什么MIME類型。Servlet默認(rèn)為text/plain视哑,但通常需要顯式地指定為text/html绣否。由于經(jīng)常要設(shè)置Content-Type,因此HttpServletResponse提供了一個(gè)專用的方法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編寫者十分重要捷枯。但是,對(duì)于Servlet來(lái)說(shuō)专执,直接設(shè)置Refresh頭更加方便淮捆。 注意Refresh的意義是"N秒之后刷新本頁(yè)面或訪問指定頁(yè)面",而不是"每隔N秒刷新本頁(yè)面或訪問指定頁(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提供的專用方法addCookie博助。參見下文有關(guān)Cookie設(shè)置的討論险污。 |
WWW-Authenticate | 客戶應(yīng)該在Authorization頭中提供什么類型的授權(quán)信息?在包含401(Unauthorized)狀態(tài)行的應(yīng)答中這個(gè)頭是必需的富岳。例如蛔糯,response.setHeader("WWW-Authenticate", "BASIC realm=\"executives\"")。 注意Servlet一般不進(jìn)行這方面的處理城瞎,而是讓W(xué)eb服務(wù)器的專門機(jī)制來(lái)控制受密碼保護(hù)頁(yè)面的訪問(例如.htaccess)渤闷。 |
3.2.2 HTTP content-type
Content-Type,內(nèi)容類型脖镀,一般是指網(wǎng)頁(yè)中存在的Content-Type飒箭,用于定義網(wǎng)絡(luò)文件的類型和網(wǎng)頁(yè)的編碼狼电,決定瀏覽器將以什么形式、什么編碼讀取這個(gè)文件弦蹂,這就是經(jīng)臣绲看到一些Asp網(wǎng)頁(yè)點(diǎn)擊的結(jié)果卻是下載到的一個(gè)文件或一張圖片的原因。
文件擴(kuò)展名 | Content-Type(Mime-Type) | 文件擴(kuò)展名 | Content-Type(Mime-Type) |
---|---|---|---|
.*( 二進(jìn)制流凸椿,不知道下載文件類型) | 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 |
application/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 |