重溫Http協議--請求報文和響應報文


  http協議是位於應用層的協議,我們在日常瀏覽網頁比如在導航網站請求百度首頁的時候,會先通過http協議把請求做一個類似於編碼的工作,發送給百度的服務器,然后在百度服務器響應請求時把相應的內容再通過http協議做一個類似於解碼的工作,這樣瀏覽器才能理解這個數據,然后為我們展示出來百度首頁.

  這相當於是一種規范,網絡中數據的傳輸在位於應用之下的各層(傳輸層,應用層)來完成的,在tcp/ip協議接收到數據時,我們是不能直接使用和瀏覽的,需要先通過一種規范來進行梳理,也就是解碼,得到瀏覽器支持的一種格式,才能被我們使用.

  在web開發中,熟悉http協議中的報文結構是很重要的,比如,如果對http報文不熟悉,在使用httpServletRequest很多方法的時候,就會陷入懵逼.

  http報文分為請求報文和響應報文.

請求報文(request message)

  請求報文分為三部分:首行,請求頭,請求體.

  首行包括:請求類型,URL,HTTP版本.

  請求頭部保存一些鍵值對的屬性.

  請求體保存具體內容,一般為POST類型的參數.

  

常見的HTTP請求頭屬性

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

  Accept:告訴服務端,該請求所能支持的響應數據類型,專業術語稱為MIME 類型,上圖中表示支持text/html的響應格式.

  擴展:text/html,application/xhtml+xml,application/xml 都是 MIME 類型,也可以稱為媒體類型和內容類型,斜杠前面的是 type(類型),斜杠后面的是 subtype(子類型)

Cookie:seraph.confluence=6389808%3A04c906749aac37bbfe595ff3149ac5c17bfcd298;Hm_lvt_4a7d8ec50cfd6af753c4f8aee3425070=1477401172,1479201037,1479895114; _ga=GA1.2.1021401543.1477401172; JSESSIONID=6C331887C562AF7839384C41D590CA9A;

  Cookie:將客戶端的cookie放在請求頭里一並發送給服務器端.

  這里就出了一個問題,網站A怎么保證自己請求體中保存的cookie就是網站A的cookie而不是網站B的cookie呢,這就和cookie里面的jsessionid有關系了,關於cookie,session,sessionid,jsessionid的區別聯系,可以參考這個博文http://www.cnblogs.com/fnng/archive/2012/08/14/2637279.html

referer:https://www.baidu.com/linkurl=fjKPqTaoZV2a2g2H2kbBwdz0mgBgI06WLrVLrQhiKgu&wd=&eqid=841d77d20000a7ae00000004586b7070

  Referer:表示這個請求是從哪個url跳過來的,通過百度來搜索淘寶網,那么在進入淘寶網的請求報文中,Referer的值就是:www.baidu.com

  Cache-Control:max-age=0

  Cache-control:對服務端返回的相應內容進行緩存控制,即是否需要在客戶端保存下來,如上表示不緩存.

  User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36

  User-Agent:用戶代理,簡稱 UA,是一個特殊字符串頭,使得服務器能夠識別客戶端使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息

  Connection:keep-alive

  Connection:表示客戶端與服務連接類型;Keep-Alive表示持久連接

  更多請求頭屬性可以參考這篇文章:HTTP響應頭和請求頭信息對照表

響應報文(response message)

  響應報文也由三部分組成,首行,響應頭,響應體.

  首行分為報文協議及版本,響應碼及狀態描述

  

  狀態碼

1XX:信息性狀態碼

2XX:成功狀態碼,200 表示成功

3XX:重定向狀態碼

4XX:客戶端錯誤狀態碼,404表示沒有找到請求的資源

5XX:服務器端錯誤狀態碼,500表示內部錯誤

  關於響應報文的響應頭屬性,可以詳見上面那個對照表鏈接.

  需要提一下的是,我們可以通過HttpServletResponse的setHeader()方法來自行添加響應頭屬性.


免責聲明!

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



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