HTTP協(xié)議
HTTP協(xié)議是學(xué)習(xí)java web 開發(fā)的基石,不深入了解HTTP協(xié)議,就不能說掌握了WEB開發(fā),更無法管理和維護一些復(fù)雜的WEB站點.
OSI七層協(xié)議:
- 應(yīng)用層
- HTTP協(xié)議
- FTP
- SMTP
- POP3
- TELNET
- 表示層
- 會話層
- 傳輸層
- TCP
- UDP
- 網(wǎng)絡(luò)層
- 數(shù)據(jù)鏈路層
- 物理層
基本定義:
- 基于TCP/IP(傳輸層)協(xié)議的應(yīng)用層協(xié)議
- 規(guī)定客戶端和服務(wù)器如何進行交互;
- HTTP基于請求響應(yīng)模型;
- 一次請求對應(yīng)一次相應(yīng),且請求只能由客戶端發(fā)出,服務(wù)器只能被動的等待而做出響應(yīng).
HTTP1.1和HTTP1.0的區(qū)別
在HTTP1.0協(xié)議中,客戶端與web服務(wù)器建立連接后,只能獲得一個web資源,用后就斷開了服務(wù)器.
HTTP1.1 協(xié)議中,允許客戶端與web服務(wù)器建立連接后,在一個連接上獲得多個web資源.keep alive
http協(xié)議詳情
一個http協(xié)議分為兩個部分,一個是響應(yīng)部分,一個是請求部分.
http 請求
請求是由客戶端發(fā)出的
GET /news/1.html HTTP/1.1 -- 請求頭
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)
Accept-Encoding: gzip, deflate
Host: 127.0.0.1
Connection: Keep-Alive
GET /news/1.html HTTP/1.1
請求頭分為三個部分:
請求頭(GET)+請求的資源部分的名稱(/news/1.htm)+所遵循的協(xié)議版本(HTTP/1.1)
七種請求方式:
- POST;
- GET;
- HEAD;
- OPTIONS;
- DELETE;
- TRACE;
- PUT.
真正使用的時候:POST/GET是常用的.
GET請求方式和POST請求區(qū)別在于請求參數(shù)在傳遞的過程中方式不同
如果是GET提交,請求參數(shù)將會附加在請求的URL后面作為請求地址的一部分帶到服務(wù)器端,可以傳輸?shù)臄?shù)據(jù)大小有限制一般不允許超過1K.
http://127.0.0.1/news/1.html?username=99999&password=0000000000
如果是POST提交,請求參數(shù)將會在http請求的實體內(nèi)容中進行傳輸,這種方式傳輸?shù)臄?shù)據(jù)沒有大小限制.
利用form表單提交數(shù)據(jù)時,form表明明確的聲明要用POST提交,這是請求參數(shù)就是POST提交
<form action="#" Method="POST">
用戶名:<Input type="text" name="username" />
密碼:<Input type="password" name="password">
<input type="submit" value="提交"/>
</form>
除此以外所有方式的請求參數(shù)都是GET提交
一些主要的請求頭:
請求頭 | 含義 |
---|---|
Accept: / | //接受的文件類型; 可以接受各種類型的文件 |
Accept-Charset: ISO-8859-1 | 所接受的字符節(jié)編碼; |
Accept-Encoding: gzip, deflate | 所接受的數(shù)據(jù)的壓縮格式; |
Accept-Language: zh-CN | 語言環(huán)境;當(dāng)前瀏覽器的首選語言環(huán)境; |
Host: 127.0.0.1 | 訪問的虛擬主機名稱; |
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT | |
Referer: http://www.it315.org/index.jsp | 當(dāng)前頁面來自哪一個頁面. |
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) | 當(dāng)前瀏覽器的基本信息; |
Cookie | |
Connection: close/Keep-Alive | 控制請求響應(yīng)完的,是否關(guān)閉或保持. |
Date: Tue, 11 Jul 2000 18:23:51 GMT | 當(dāng)前請求發(fā)送的時間. |
<空格>
請求實體
http響應(yīng)
- 狀態(tài)行
格式: HTTP版本號 狀態(tài)碼 原因敘述
eg: HTTP/1.1 200 OK
協(xié)議版本
狀態(tài)碼 // 用來表示本次的請求的處理結(jié)果代碼.
狀態(tài)碼 | 含義 |
---|---|
200 | 請求完成,并完成整個處理過程; |
302 | 請求重定向; |
304/307 | 使用緩存資源有關(guān) eg: HTTP/1.1 304 Not Modified |
404 | 客戶端請求錯誤 |
500 | 服務(wù)器端出現(xiàn)錯誤. |
- 若干響應(yīng)頭
響應(yīng)頭 | 含義 |
---|---|
Location: http://www.it315.org/index.jsp | 302和location 實現(xiàn)請求重定項 |
Server:apache tomcat | 服務(wù)器的基本信息 |
Content-Encoding: gzip | 服務(wù)器發(fā)送出去的文件所使用的的格式 |
Content-Length: 80 | 發(fā)送回去數(shù)據(jù)的總長度 |
Content-Language: zh-cn | 發(fā)送數(shù)據(jù)的語言環(huán)境 |
Content-Type: text/html; charset=GB2312 | 當(dāng)前發(fā)送過去的數(shù)據(jù)是什么格式的數(shù)據(jù),編碼格式 |
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT | |
Refresh: 1;url=http://www.it315.org | 若干秒以后訪問指定的網(wǎng)站 |
Content-Disposition: attachment;filename=aaa.zip | 下載有關(guān)的數(shù)據(jù) |
Transfer-Encoding: chunked | ... |
Set-Cookie:SS=Q0=5Lb_nQ; path=/search | ... |
ETag: W/"83794-1208174400000" | |
Expires: -1 | 通知瀏覽器是否緩存當(dāng)前資源,如果這個頭的值是一個以毫秒為單位值就是通知瀏覽器緩存資源到指定的時間點,如果值是0或-1則是通知瀏覽器禁止緩存. |
Cache-Control: no-cache | 通知瀏覽器是否緩存資源 |
Pragma: no-cache | 通知瀏覽器是否緩存資源 |
Connection: close/Keep-Alive | 是否繼續(xù)保持連接 |
Date: Tue, 11 Jul 2000 18:23:51 GMT | 響應(yīng)時間 |
<空行>
實體內(nèi)容 返回的內(nèi)容.
作業(yè):
1.請寫一篇關(guān)于HTTP協(xié)議的筆記经宏,要求:
描述清楚HTTP請求頭、響應(yīng)頭的格式
請求頭和響應(yīng)頭中各個頭字段的含義
2.如果瀏覽器傳遞給WEB服務(wù)器的參數(shù)內(nèi)容超過1K,應(yīng)該使用那種方式發(fā)送請求消息?
post
3.請描述200般眉、302吨娜、304问拘、404和500等響應(yīng)狀態(tài)碼所表示的意義巷折。
狀態(tài)碼 | 含義 |
---|---|
200 | 請求完成,并完成整個處理過程; |
302 | 請求重定向; |
304/307 | 使用緩存資源有關(guān) eg: HTTP/1.1 304 Not Modified |
404 | 客戶端請求錯誤 |
500 | 服務(wù)器端出現(xiàn)錯誤. |
4.請列舉三種禁止瀏覽器緩存的頭字段压鉴,并寫出相應(yīng)的設(shè)置值。
響應(yīng)頭 | 含義 |
---|---|
Expires: -1 | 通知瀏覽器是否緩存當(dāng)前資源,如果這個頭的值是一個以毫秒為單位值就是通知瀏覽器緩存資源到指定的時間點,如果值是0或-1則是通知瀏覽器禁止緩存. |
Cache-Control: no-cache | 通知瀏覽器是否緩存資源 |
Pragma: no-cache | 通知瀏覽器是否緩存資源 |