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

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
.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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市脑漫,隨后出現(xiàn)的幾起案子髓抑,更是在濱河造成了極大的恐慌,老刑警劉巖优幸,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吨拍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡网杆,警方通過(guò)查閱死者的電腦和手機(jī)羹饰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)碳却,“玉大人队秩,你說(shuō)我怎么就攤上這事≈缙郑” “怎么了馍资?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)座柱。 經(jīng)常有香客問我迷帜,道長(zhǎng),這世上最難降的妖魔是什么色洞? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任戏锹,我火速辦了婚禮,結(jié)果婚禮上火诸,老公的妹妹穿的比我還像新娘锦针。我一直安慰自己,他們只是感情好置蜀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布奈搜。 她就那樣靜靜地躺著,像睡著了一般盯荤。 火紅的嫁衣襯著肌膚如雪馋吗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天秋秤,我揣著相機(jī)與錄音宏粤,去河邊找鬼脚翘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛绍哎,可吹牛的內(nèi)容都是我干的来农。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼崇堰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沃于!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起海诲,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤繁莹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后饿肺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒋困,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年敬辣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片零院。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡溉跃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出告抄,到底是詐尸還是另有隱情撰茎,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布打洼,位于F島的核電站龄糊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏募疮。R本人自食惡果不足惜炫惩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望阿浓。 院中可真熱鬧他嚷,春花似錦、人聲如沸芭毙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)退敦。三九已至粘咖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侈百,已是汗流浹背瓮下。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工忠聚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人唱捣。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓两蟀,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親震缭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子赂毯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容