一、HTTP簡介
01.什么是HTTP
HTTP(HyperText Transfer Protocol ,超文本傳輸協(xié)議),是一個(gè)基于請求與響應(yīng)的,無狀態(tài)的,應(yīng)用層的協(xié)議,常基于TCP/IP協(xié)議傳輸數(shù)據(jù),互聯(lián)網(wǎng)上應(yīng)用最廣泛的一種協(xié)議,所有的WWW文件必須遵守這個(gè)標(biāo)準(zhǔn)。
HTTP協(xié)議的設(shè)計(jì)初衷是為了提供一種發(fā)送和接受HTML頁面的方法
02.HTTP發(fā)展史
特點(diǎn):
-
- 不涉及數(shù)據(jù)包傳輸,服務(wù)器只能回應(yīng)HTML格式的字符串,不能回應(yīng)別的格式
- 只能以GET方式請求
- 每次請求都需要重新建立TCP連接,服務(wù)器發(fā)送完畢就關(guān)閉TCP連接
- 沒有成為正式的標(biāo)準(zhǔn)
請求示例:
響應(yīng)示例:
<html>
<body>Hello World</body>
</html>
特點(diǎn):
-
- 傳輸內(nèi)容格式?jīng)]有限制
- 增加POST、HEAD命令
- 請求和響應(yīng)的格式變了,除了數(shù)據(jù)部分,每次通訊都必須包含頭信息(HTTP Header)來描述一些元數(shù)據(jù)
- 新增功能還包括狀態(tài)碼(status code)、多字符集支持、多部分發(fā)送(multi-part type)、權(quán)限(authorization)、緩存(cache)、內(nèi)容編碼(content encoding)等
- 每次請求都需要重新建立TCP連接,服務(wù)器發(fā)送完畢就關(guān)閉TCP連接
- 正式作為標(biāo)準(zhǔn)
請求示例:
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*
響應(yīng)示例:
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
<body>Hello World</body>
</html>
特點(diǎn):
-
- 增加持久連接(persistent connection),即TCP連接默認(rèn)不關(guān)閉,可以被多個(gè)請求復(fù)用
- 引入管道機(jī)制(pipelining),即在同一個(gè)TCP連接里面,客戶端可以同時(shí)發(fā)送多個(gè)請求。這樣就進(jìn)一步改進(jìn)了HTTP協(xié)議的效率
- 引入分塊傳輸編碼 (Chunked transfer encoding)機(jī)制,允許HTTP由網(wǎng)頁伺服器發(fā)送給客戶端應(yīng)用( 通常是網(wǎng)頁瀏覽器)的數(shù)據(jù)可以分成多個(gè)部分
- 引入了許多動詞方法:PUT、PATCH、OPTIONS、DELETE
- 客戶端請求的頭信息新增了Host字段,用來指定服務(wù)器的域名
缺點(diǎn):
雖然1.1版允許復(fù)用TCP連接,但是同一個(gè)TCP連接里面,所有的數(shù)據(jù)通信是按次序進(jìn)行的。服務(wù)器只有處理完一個(gè)回應(yīng),才會進(jìn)行下一個(gè)回應(yīng)。要是前面的回應(yīng)特別慢,后面就會有許多請求排隊(duì)等著。這稱為"隊(duì)頭堵塞"(Head-of-line blocking)。
為了避免這個(gè)問題,只有兩種方法:一是減少請求數(shù),二是同時(shí)多開持久連接。這導(dǎo)致了很多的網(wǎng)頁優(yōu)化技巧,比如合并腳本和樣式表、將圖片嵌入CSS代碼、域名分片(domain sharding)等等。如果HTTP協(xié)議設(shè)計(jì)得更好一些,這些額外的工作是可以避免的。
請求示例:
GET /?mkt=zh-CN HTTP/1.1
Host: cn.bing.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: SRCHD=AF=NOFORM; SRCHUID=V=2&GUID=8004E55B8C8B4137BACF748D4213FE40&dmnchg=1; SRCHUSR=DOB=20191024&T=1580718980000; _EDGE_V=1; MUID=19ADA0EFC0FC60B715E2AD10C1D26108; MUIDB=19ADA0EFC0FC60B715E2AD10C1D26108; SRCHHPGUSR=CW=1536&CH=728&DPR=1.25&UTC=480&WTS=63717770478&HV=1582173694; ABDEF=MRB=1580624806993&MRNB=0; SNRHOP=I=&TS=; _EDGE_S=mkt=zh-cn&SID=32482CF6BD916165130F2280BCBF60A9; _SS=SID=32482CF6BD916165130F2280BCBF60A9&bIm=376; ipv6=hit=1582177279658&t=4
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
響應(yīng)示例:
HTTP/1.1 200 OK
Cache-Control: private, max-age=0
Content-Length: 112682
Content-Type: text/html; charset=utf-8
Vary: Accept-Encoding
P3P: CP="NON UNI COM NAV STA LOC CURa DEVa PSAa PSDa OUR IND"
Set-Cookie: SNRHOP=I=&TS=; domain=.bing.com; path=/
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-MSEdge-Ref: Ref A: A5F96665F8534BC1858A0E1C7D198764 Ref B: BJ1EDGE0106 Ref C: 2020-02-20T04:43:04Z
Set-Cookie: _EDGE_S=mkt=zh-cn&SID=32482CF6BD916165130F2280BCBF60A9; path=/; httponly; domain=bing.com
Date: Thu, 20 Feb 2020 04:43:03 GMT
Connection: close
特點(diǎn):
-
- 徹底的二進(jìn)制協(xié)議,頭信息和數(shù)據(jù)體都是二進(jìn)制,并且統(tǒng)稱為"幀"(frame):頭信息幀和數(shù)據(jù)幀。
- 多工(Multiplexing),復(fù)用TCP連接,在一個(gè)連接里,客戶端和瀏覽器都可以同時(shí)發(fā)送多個(gè)請求或回應(yīng),而且不用按照順序一一對應(yīng),這樣就避免了"隊(duì)頭堵塞"。
- 引入數(shù)據(jù)流機(jī)制
- 引入了頭信息壓縮機(jī)制(header compression)。
- 允許服務(wù)器未經(jīng)請求,主動向客戶端發(fā)送資源,這叫做服務(wù)器推送(server push)。
04.什么是C/S架構(gòu)?什么是B/S架構(gòu)?
- C/S(Client/Sever)客戶機(jī)和服務(wù)器架構(gòu)
- B/S(Bower/Sever)瀏覽器和服務(wù)器架構(gòu)
二、HTTP消息結(jié)構(gòu)
01.統(tǒng)一資源定位符(URL)
URL,全稱是UniformResourceLocator, 中文叫統(tǒng)一資源定位符,是互聯(lián)網(wǎng)上用來標(biāo)識某一處資源的地址。
協(xié)議方案名:http、ftp、mailto、file
登錄信息:如果需要網(wǎng)頁認(rèn)證時(shí),需要填寫該參數(shù),所以是可選項(xiàng)
服務(wù)器地址:可以是IP地址形式,也可以是能被DNS服務(wù)器解析成IP地址的域名形式
端口號:指定服務(wù)器連接的端口號,選填,不填則默認(rèn)為本協(xié)議的端口號(HTTP:80,HTTPS:443)
帶層次的文件路徑:獲取資源在服務(wù)器中的具體地址
查詢字符串:針對以指定路徑的資源,可使用查詢字符串來獲取想要的參數(shù),此項(xiàng)也是可選項(xiàng)
片段標(biāo)識符:又名hash,來標(biāo)記以獲取資源中的子資源(在文檔中的某個(gè)位置)
02.統(tǒng)一資源標(biāo)識符 (URI)
統(tǒng)一資源標(biāo)識符(Uniform Resource Identifier)一個(gè)用于標(biāo)識某一互聯(lián)網(wǎng)資源名稱的字符串。
該種標(biāo)識允許用戶對網(wǎng)絡(luò)中(一般指萬維網(wǎng))的資源通過特定的協(xié)議進(jìn)行交互操作。URI的最常見的形式是統(tǒng)一資源定位符(URL),經(jīng)常指定為非正式的網(wǎng)址。更罕見的用法是統(tǒng)一資源名稱(URN),其目的是通過提供一種途徑。用于在特定的命名空間資源的標(biāo)識,以補(bǔ)充網(wǎng)址。
03.HTTP之請求消息Request
1.HTTP報(bào)文格式(HTTP請求)
HTTP請求由請求行(request line)、請求頭部(header)、空行和請求數(shù)據(jù)四個(gè)部分組成。
2.HTTP請求方法
HTTP/1.1協(xié)議中共定義了八種方法(有時(shí)也叫“動作”)來表明Request-URI指定的資源的不同操作方式:
OPTIONS - 返回服務(wù)器針對特定資源所支持的HTTP請求方法。也可以利用向Web服務(wù)器發(fā)送'*'的請求來測試服務(wù)器的功能性。
HEAD- 向服務(wù)器索要與GET請求相一致的響應(yīng),只不過響應(yīng)體將不會被返回。這一方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下,就可以獲取包含在響應(yīng)消息頭中的元信息。該方法常用于測試超鏈接的有效性,是否可以訪問,以及最近是否更新。
GET - 向特定的資源發(fā)出請求。注意:GET方法不應(yīng)當(dāng)被用于產(chǎn)生“副作用”的操作中,例如在web app.中。其中一個(gè)原因是GET可能會被網(wǎng)絡(luò)蜘蛛等隨意訪問。
POST - 向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中。POST請求可能會導(dǎo)致新的資源的建立和/或已有資源的修改。
PUT - 向指定資源位置上傳其最新內(nèi)容。
DELETE - 請求服務(wù)器刪除Request-URI所標(biāo)識的資源。
TRACE- 回顯服務(wù)器收到的請求,主要用于測試或診斷。
CONNECT - HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。
PATCH - 用來將局部修改應(yīng)用于某一資源,添加于規(guī)范RFC5789。
3.HTTP常見的請求頭部字段名(在HTTP/1.1 協(xié)議中,所有的請求頭,除Host外,都是可選的)
-
X-Forwarded-For:用來表示HTTP請求端的真實(shí)IP,被各大HTTP代理、負(fù)載均衡等轉(zhuǎn)發(fā)服務(wù)廣泛使用
-
Cache-Control:指定請求和響應(yīng)遵循的緩存機(jī)制。緩存指令是單向的(響應(yīng)中出現(xiàn)的緩存指令在請求中未必會出現(xiàn)),且是獨(dú)立的(在請求消息或響應(yīng)消息中設(shè)置Cache-Control并不會修改另一個(gè)消息處理過程中的緩存處理過程)。請求時(shí)的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應(yīng)消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
Cache-Control:Public 可以被任何緩存所緩存 Cache-Control:Private 內(nèi)容只緩存到私有緩存中 Cache-Control:no-cache 所有內(nèi)容都不會被緩存 Cache-Control:no-store 用于防止重要的信息被無意的發(fā)布。在請求消息中發(fā)送將使得請求和響應(yīng)消息都不使用緩存。 Cache-Control:max-age 指示客戶機(jī)可以接收生存期不大于指定時(shí)間(以秒為單位)的響應(yīng)。 Cache-Control:min-fresh 指示客戶機(jī)可以接收響應(yīng)時(shí)間小于當(dāng)前時(shí)間加上指定時(shí)間的響應(yīng)。 Cache-Control:max-stale 指示客戶機(jī)可以接收超出超時(shí)期間的響應(yīng)消息。如果指定max-stale消息的值,那么客戶機(jī)可以接收超出超時(shí)期指定值之內(nèi)的響應(yīng)消息。
-
Accept:瀏覽器端可以接受的MIME類型。例如:Accept: text/html 代表瀏覽器可以接受服務(wù)器回發(fā)的類型為 text/html 也就是我們常說的html文檔,如果服務(wù)器無法返回text/html類型的數(shù)據(jù),服務(wù)器應(yīng)該返回一個(gè)406錯(cuò)誤(non acceptable)。通配符 * 代表任意類型,例如 Accept: */* 代表瀏覽器可以處理所有類型,(一般瀏覽器發(fā)給服務(wù)器都是發(fā)這個(gè))。
-
Accept-Encoding:瀏覽器申明自己可接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate);Servlet能夠向支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁面。許多情形下這可以減少5到10倍的下載時(shí)間。例如: Accept-Encoding: gzip, deflate。如果請求消息中沒有設(shè)置這個(gè)域,服務(wù)器假定客戶端對各種內(nèi)容編碼都可以接受。
-
Accept-Language:瀏覽器申明自己接收的語言。語言跟字符集的區(qū)別:中文是語言,中文有多種字符集,比如big5,gb2312,gbk等等;例如:Accept-Language: en-us。如果請求消息中沒有設(shè)置這個(gè)報(bào)頭域,服務(wù)器假定客戶端對各種語言都可以接受。
-
Accept-Charset:瀏覽器可接受的字符集。如果在請求消息中沒有設(shè)置這個(gè)域,缺省表示任何字符集都可以接受。
-
User-Agent:告訴HTTP服務(wù)器,客戶端使用的操作系統(tǒng)和瀏覽器的名稱和版本。例如: User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; CIBA; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.2; .NET4.0E)。
-
Content-Type:例如:Content-Type: application/x-www-form-urlencoded。
-
Referer:包含一個(gè)URL,用戶從該URL代表的頁面出發(fā)訪問當(dāng)前請求的頁面。提供了Request的上下文信息的服務(wù)器,告訴服務(wù)器我是從哪個(gè)鏈接過來的,比如從我主頁上鏈接到一個(gè)朋友那里,他的服務(wù)器就能夠從HTTP Referer中統(tǒng)計(jì)出每天有多少用戶點(diǎn)擊我主頁上的鏈接訪問他的網(wǎng)站。例如: Referer:http://translate.google.cn/?hl=zh-cn&tab=wT
-
Connection:例如:Connection: keep-alive 當(dāng)一個(gè)網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會關(guān)閉,如果客戶端再次訪問這個(gè)服務(wù)器上的網(wǎng)頁,會繼續(xù)使用這一條已經(jīng)建立的連接。HTTP 1.1默認(rèn)進(jìn)行持久連接。利用持久連接的優(yōu)點(diǎn),當(dāng)頁面包含多個(gè)元素時(shí)(例如Applet,圖片),顯著地減少下載所需要的時(shí)間。要實(shí)現(xiàn)這一點(diǎn),Servlet需要在應(yīng)答中發(fā)送一個(gè)Content-Length頭,最簡單的實(shí)現(xiàn)方法是:先把內(nèi)容寫入ByteArrayOutputStream,然后在正式寫出內(nèi)容之前計(jì)算它的大小。Connection: close 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會關(guān)閉,當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
-
Host:(發(fā)送請求時(shí),該頭域是必需的)主要用于指定被請求資源的Internet主機(jī)和端口號,它通常從HTTP URL中提取出來的。HTTP/1.1請求必須包含主機(jī)頭域,否則系統(tǒng)會以400狀態(tài)碼返回。例如: 我們在瀏覽器中輸入:http://www./index.html,瀏覽器發(fā)送的請求消息中,就會包含Host請求頭域:Host:http://www.,此處使用缺省端口號80,若指定了端口號,則變成:Host:指定端口號。
-
Cookie:最重要的請求頭之一, 將cookie的值發(fā)送給HTTP服務(wù)器。
-
Content-Length:表示請求消息正文的長度。例如:Content-Length: 38。
-
Authorization:授權(quán)信息,通常出現(xiàn)在對服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中。主要用于證明客戶端有權(quán)查看某個(gè)資源。當(dāng)瀏覽器訪問一個(gè)頁面時(shí),如果收到服務(wù)器的響應(yīng)代碼為401(未授權(quán)),可以發(fā)送一個(gè)包含Authorization請求報(bào)頭域的請求,要求服務(wù)器對其進(jìn)行驗(yàn)證。
-
From:請求發(fā)送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。
-
Range:可以請求實(shí)體的一個(gè)或者多個(gè)子范圍。例如,
04.HTTP之響應(yīng)消息Response
1.HTTP報(bào)文格式(HTTP響應(yīng))
- 狀態(tài)行由三部分組成,分別為:協(xié)議版本、狀態(tài)碼、狀態(tài)碼描述,之間由空格間隔
- 響應(yīng)頭部與請求頭部類似,也包含了很多有用信息
- 空行,這一行非常重要,表示響應(yīng)頭的結(jié)束
- 響應(yīng)正文,服務(wù)器返回的文檔,最常見的為HTML網(wǎng)頁
2.HTTP常見的狀態(tài)碼
狀態(tài)代碼有三位數(shù)字組成,第一個(gè)數(shù)字定義了響應(yīng)的類別,共分五種類別:
1xx:指示信息--表示請求已接收,繼續(xù)處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進(jìn)行更進(jìn)一步的操作
4xx:客戶端錯(cuò)誤--請求有語法錯(cuò)誤或請求無法實(shí)現(xiàn)
5xx:服務(wù)器端錯(cuò)誤--服務(wù)器未能實(shí)現(xiàn)合法的請求
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized //請求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden //服務(wù)器收到請求,但是拒絕提供服務(wù)
404 Not Found //請求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable //服務(wù)器當(dāng)前不能處理客戶端的請求,一段時(shí)間后可能恢復(fù)正常
3.HTTP常見響應(yīng)頭部字段名
-
Allow:服務(wù)器支持哪些請求方法(如GET、POST等)
-
Date:表示消息發(fā)送的時(shí)間,時(shí)間的描述格式由rfc822定義。
-
Expires:指明應(yīng)該在什么時(shí)候認(rèn)為文檔已經(jīng)過期,從而不再緩存它,重新從服務(wù)器獲取,會更新緩存。過期之前使用本地緩存。HTTP1.1的客戶端和緩存會將非法的日期格式(包括0)看作已經(jīng)過期。
-
P3P:用于跨域設(shè)置Cookie, 這樣可以解決iframe跨域訪問cookie的問題
-
Set-Cookie:非常重要的header, 用于把cookie發(fā)送到客戶端瀏覽器,每一個(gè)寫入cookie都會生成一個(gè)Set-Cookie。
-
ETag:和If-None-Match 配合使用。
-
Last-Modified:用于指示資源的最后修改日期和時(shí)間。Last-Modified也可用setDateHeader方法來設(shè)置。
-
Content-Type:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對象的類型和字符集。Servlet默認(rèn)為text/plain,但通常需要顯式地指定為text/html。由于經(jīng)常要設(shè)置Content-Type,因此HttpServletResponse提供了一個(gè)專用的方法setContentType。可在web.xml文件中配置擴(kuò)展名和MIME類型的對應(yīng)關(guān)系。
-
Content-Range:用于指定整個(gè)實(shí)體中的一部分的插入位置,他也指示了整個(gè)實(shí)體的長度。在服務(wù)器向客戶返回一個(gè)部分響應(yīng),它必須描述響應(yīng)覆蓋的范圍和整個(gè)實(shí)體長度。一般格式:Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-length。
-
Content-Length:指明實(shí)體正文的長度,以字節(jié)方式存儲的十進(jìn)制數(shù)字來表示。在數(shù)據(jù)下行的過程中,Content-Length的方式要預(yù)先在服務(wù)器中緩存所有數(shù)據(jù),然后所有數(shù)據(jù)再一股腦兒地發(fā)給客戶端。只有當(dāng)瀏覽器使用持久HTTP連接時(shí)才需要這個(gè)數(shù)據(jù)。如果你想要利用持久連接的優(yōu)勢,可以把輸出文檔寫入ByteArrayOutputStram,完成后查看其大小,然后把該值放入Content-Length頭,最后通過byteArrayStream.writeTo(response.getOutputStream()發(fā)送內(nèi)容。
-
Content-Encoding:WEB服務(wù)器表明自己使用了什么壓縮方法(gzip,deflate)壓縮響應(yīng)中的對象。只有在解碼之后才可以得到Content-Type頭指定的內(nèi)容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時(shí)間。Java的GZIPOutputStream可以很方便地進(jìn)行g(shù)zip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet應(yīng)該通過查看Accept-Encoding頭(即request.getHeader("Accept-Encoding"))檢查瀏覽器是否支持gzip,為支持gzip的瀏覽器返回經(jīng)gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面。
-
Content-Language:WEB服務(wù)器告訴瀏覽器自己響應(yīng)的對象所用的自然語言。沒有設(shè)置該域則認(rèn)為實(shí)體內(nèi)容將提供給所有的語言閱讀。
-
Server:指明HTTP服務(wù)器用來處理請求的軟件信息。。
-
X-AspNet-Version:如果網(wǎng)站是用ASP.NET開發(fā)的,這個(gè)header用來表示ASP.NET的版本。
-
X-Powered-By:表示網(wǎng)站是用什么技術(shù)開發(fā)的。
-
Connection:例如:Connection: keep-alive 當(dāng)一個(gè)網(wǎng)頁打開完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會關(guān)閉,如果客戶端再次訪問這個(gè)服務(wù)器上的網(wǎng)頁,會繼續(xù)使用這一條已經(jīng)建立的連接。Connection: close 代表一個(gè)Request完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接會關(guān)閉,當(dāng)客戶端再次發(fā)送Request,需要重新建立TCP連接。
-
Location:用于重定向一個(gè)新的位置,包含新的URL地址。表示客戶應(yīng)當(dāng)?shù)侥睦锶ヌ崛∥臋n。Location通常不是直接設(shè)置的,而是通過HttpServletResponse的sendRedirect方法,該方法同時(shí)設(shè)置狀態(tài)代碼為302。Location響應(yīng)報(bào)頭域常用在更換域名的時(shí)候。
-
Refresh:表示瀏覽器應(yīng)該在多少時(shí)間之后刷新文檔,以秒計(jì)。除了刷新當(dāng)前文檔之外,你還可以通過setHeader("Refresh", "5; URL=http://host/path")讓瀏覽器讀取指定的頁面。注意這種功能通常是通過設(shè)置HTML頁面HEAD區(qū)的<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://host/path">實(shí)現(xiàn),這是因?yàn)?,自動刷新或重定向?qū)τ谀切┎荒苁褂肅GI或Servlet的HTML編寫者十分重要。但是,對于Servlet來說,直接設(shè)置Refresh頭更加方便。注意Refresh的意義是“N秒之后刷新本頁面或訪問指定頁面”,而不是“每隔N秒刷新本頁面或訪問指定頁面”。因此,連續(xù)刷新要求每次都發(fā)送一個(gè)Refresh頭,而發(fā)送204狀態(tài)代碼則可以阻止瀏覽器繼續(xù)刷新,不管是使用Refresh頭還是<META HTTP-EQUIV="Refresh" ...>。注意Refresh頭不屬于HTTP 1.1正式規(guī)范的一部分,而是一個(gè)擴(kuò)展,但Netscape和IE都支持它。
三、HTTP工作原理
-
A.客戶端通過TCP三次握手與服務(wù)器建立連接
-
B.TCP建立連接成功后,向服務(wù)器發(fā)送HTTP請求
-
C.服務(wù)器接收到HTTP請求后,向客戶端發(fā)送HTTP響應(yīng)
-
D.客戶端通過TCP四次斷開,與服務(wù)器斷開TCP連接
四、引用鏈接
-
-
-
HTTP, by Wikipedia
-
《圖解HTTP》
|