JavaWeb學習----http協議


 

 

一、什么是HTTP協議:

1、概念:

客戶端連上web服務器后,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義客戶端與web服務器通迅的格式(規定客戶端和服務器如何進行交互)。

HTTP是hypertext transfer protocol(超文本傳輸協議)的簡寫,它是基於TCP/IP協議的一個應用層協議,用於定義WEB瀏覽器與WEB服務器之間交換數據的過程。

注:HTTP協議是學習JavaWeb開發的基石,不深入了解HTTP協議,就不能說掌握了WEB開發,更無法管理和維護一些復雜的WEB站點。

OSI網絡七層協議:

應用層(HTTP、FTP、SMTP、POP3、TELNET)-》表示層-》會話層-》傳輸層(TCP、UDP)-》網絡層(IP)-》數據鏈路層-》物理層

注:傳輸層和網絡層的協議統稱為TCP/IP協議。

2、HTTP請求:

HTTP使用請求-響應的方式進行傳輸,一個請求對應一個響應,並且請求只能由客戶端發出,服務器只能被動的等待請求做出響應。

3、Win7自帶的Telnet工具:

利用Telnet可以簡單地演示請求與響應的過程。Win7默認沒有打開telnet功能,要在控制面板中開啟:

9b2aa6e0-d942-43f1-b762-2f8dfe86e52e

操作如下:

我們先在D:\apache-tomcat-8.0.14\webapps\MyTest目錄下建一個test.html頁面,效果如下:(Tomcat端口已改為80)

aef6d095-dbd3-4699-b790-40717cc84f0f

然后在cmd中輸入如下命令:

telnet localhost 80 

然后馬上按住快捷鍵ctrl+],回車。緊接着輸入如下命令:

GET /MyTest/test.html HTTP/1.1
Host:localhost 

兩次回車后,就可以看到網頁上的內容了:

60e1dd41-5f0b-4c82-8865-cd940e4479ff

這種方式太麻煩了,建議用下面介紹的httpwatch

4、httpwatch工具:

httpwatch是專門為IE瀏覽器和火狐瀏覽器提供的,用來查看HTTP請求和相應的工具,對於我們開發者很有幫助,可以使我們更好的學習HTTP協議。

安裝完成后,就可以在IE瀏覽器中看到這個插件了:

清空瀏覽器緩存,重新輸入網址,效果如下:

bcf4f53c-8690-4b3c-a73c-74f96c54d373

上圖中,左邊是瀏覽器發出的響應,右邊是服務器返回的請求。

同樣,在chrome瀏覽器中看到的效果是這樣的:

41d4b93a-a702-4058-8861-4b2b55cd01d3

5、HTTP1.0和HTTP1.1的區別:

  • 在HTTP1.0協議中,客戶端與web服務器建立連接后,只能獲得一個web資源。
  • HTTP1.1協議,允許客戶端與web服務器建立連接后,在一個連接上獲取多個web資源。

注:通俗來講,區別只有一個:當客戶端與web服務器建立連接后(底層是流的操作),如果采用HTTP1.0協議,流會立即斷開;HTTP1.1協議,流會保存一段時間,下次重新連接時,還繼續使用這個流

問題:一個web頁面中,使用img標簽引用了三幅圖片,當客戶端訪問服務器中的這個web頁面時,客戶端總共會訪問幾次服務器,即向服務器發送了幾次HTTP請求。

答案:3次。

 

二、get/post請求的區別:

注:GET請求方式和POST請求區別在於請求參數在傳遞的過程中方式不同

  • get請求方式:顯式請求方式,請求參數會在URL上顯示,相對快,安全性較低,請求數據的大小一般不超過1kb。
  • post請求方式:隱式請求方式,請求參數將會在http請求的實體內容中進行傳輸,相對慢,安全性較高 ,請求數據的大小沒有限制

 

三、常見請求頭與相應頭:

還是來看上面這個網頁:

4818f597-a42f-4778-8eb2-81932bce9809

第一行為請求行,剩下的內容為請求頭、實體內容。

請求行:GET /MyTest/test.html HTTP/1.1      請求方式、請求的資源部分的名稱、所遵循的協議版本

1、常見請求頭:

  • Host:www.baidu.com      本次請求訪問的主機地址(虛擬主機名稱)
  • Cache-control:no-cache        設置網頁緩存的使用方法
  • Pragma:no-cache
  • Accept:text/html,xxxxxx…..客戶端可以接收的數據類型(如果內容是:*/*,表示接收所有類型)
  • User-Agent:Mozilla/5.0xxxxx 主要表示客戶端類型
  • Accept-Encoding:gzip,deflate,sdch 瀏覽器能夠接收的數據壓縮編碼方式表示瀏覽器能夠接收什么格式的壓縮的數據
  • Accept-Language:zh-CN,zh;q=0.8 瀏覽器期望的接受的語言種類
  • Accept-Charset: ISO-8859-1      客戶端所接收的字符集編碼
  • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT   和緩存機制相關的頭
  • Referer: http://www.smyh.me/index.jsp   當前頁面來自哪個頁面(可能是由之前的頁面通過超鏈接點進到這個頁面來)
  • Cookie
  • Connection: close/Keep-Alive   請求完之后,是關閉此連接,還是繼續保持連接
  • Date: Tue, 11 Jul 2013 18:23:51 GMT 當前請求的時間

注:上面的這些指的是get請求的請求頭。

接着來看第一段網頁中右邊的內容:

8839e0d9-5c20-44db-b557-4486c92cdd7d

第一行為狀態行,后面的內容為響應頭、實體內容。

狀態行:HTTP/1.1 200 OK   協議版本、狀態碼、原因敘述<CRLF>

【狀態碼】

狀態碼:用於表示服務器對本次請求的處理結果,它是一個三位的十進制數。響應狀態碼分為5類,如下所示:

78a3c867-4d45-4395-a52d-9bb7e6438535

常見狀態碼如下:

  • 200      成功接收請求
  • 302      實現重定向的功能
  • 304/307  使用瀏覽器中內置的緩存資源
  • 404      客戶端請求錯誤
  • 500      服務器段出現錯誤

2、常見響應頭:

常見的響應頭鍵值對的含義:

  • Location: http://www.smyh.me/index.jsp    重定向(302+Location實現重定向) 
  • Server                       服務器類型
  • Content-Encoding       服務器當前返回給客戶端的數據壓縮格式
  • Content-Length          返回給客戶端的數據量的大小
  • Content-Language: zh-cn  語言種類
  • Content-Type: text/html; charset=GB2312        返回的數據的類型、返回的字符集編碼方式(通過設置charset,讓瀏覽器用指定的方式進行解碼
  • Last-Modified             資源最后一次修改的時間(配合請求頭中的If-Modified-Since+304/307實現緩存機制)
  • Refresh: 1;url=http://www.it315.org    隔多少秒以后,讓當前頁面去訪問哪個地址(例如網頁登陸成功,3秒后跳回原來的界面,就是用的這個頭)
  • Content-Disposition: attachment;filename=aaa.zip   和下載相關,通知瀏覽器以附件的形式下載服務器發送過去的數據
  • Transfer-Encoding: chunked  數據傳輸模式
  • Set-Cookie:SS=Q0=5Lb_nQ; path=/search     和cookie相關的頭
  • ETag: W/"83794-1208174400000"       和cookie相關的頭
  • Expires: -1        通知瀏覽器是否緩存當前資源:如果這個頭的值是一個以毫秒為單位值,則通知瀏覽器緩存資源到指定的時間點;如果值是0或-1,則通知瀏覽器禁止緩存
  • Cache-Control: no-cache   通知瀏覽器是否緩存資源
  • Pragma: no-cache         -- 通知瀏覽器是否緩存資源

注: 之所以上面的三個頭是一個功能,是因為歷史原因。不同的瀏覽器對這三個頭支持的不同,一般來說這三個頭要同時使用,以確保不同的瀏覽器都能實現控制緩存的功能

  • Connection: close/Keep-Alive   是否繼續保持連接
  • Date: Tue, 11 Jul 2000 18:23:51 GMT    當前響應的時間


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM