http協議詳解(新手必看)

1.簡介

  • http協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。

  • http是一個基於TCP/IP通信協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。

  • http是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。

  • http協議工作於客戶端-服務端架構爲上。瀏覽器作爲http客戶端通過URL向http服務端即WEB服務器發送所有請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。

  • 講到http協議,我們首先簡單瞭解什麼是url

  • 在瀏覽器輸入URL,會經歷以下過程:
    ①瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址。
    ②解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器建立TCP連接。
    ③瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文作爲 TCP 三次握手的第三個報文的數據發送給服務器。
    ④服務器對瀏覽器請求作出響應,並把對應的 html 文本發送給瀏覽器。
    ⑤釋放 TCP連接。
    ⑥瀏覽器將該 html 文本並顯示內容

2.http協議特點
HTTP 協議一共有五大特點:1、支持客戶/服務器模式;2、簡單快速;3、靈活;4、無連接;5、無狀態。(重點介紹無連接和無狀態)

  • 無連接

  • 無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。

  • 早期這麼做的原因是 HTTP 協議產生於互聯網,因此服務器需要處理同時面向全世界數十萬、上百萬客戶端的網頁訪問,但每個客戶端(即瀏覽器)與服務器之間交換數據的間歇性較大(即傳輸具有突發性、瞬時性),並且網頁瀏覽的聯想性、發散性導致兩次傳送的數據關聯性很低,大部分通道實際上會很空閒、無端佔用資源。因此 HTTP 的設計者有意利用這種特點將協議設計爲請求時建連接、請求完釋放連接,以儘快將資源釋放出來服務其他客戶端。

  • 隨着時間的推移,網頁變得越來越複雜,裏面可能嵌入了很多圖片,這時候每次訪問圖片都需要建立一次 TCP 連接就顯得很低效。後來,Keep-Alive 被提出用來解決這效率低的問題。

  • Keep-Alive 功能使客戶端到服務器端的連接持續有效,當出現對服務器的後繼請求時,Keep-Alive 功能避免了建立或者重新建立連接。市場上的大部分 Web 服務器,包括 iPlanet、IIS 和 Apache,都支持 HTTP Keep-Alive。對於提供靜態內容的網站來說,這個功能通常很有用。但是,對於負擔較重的網站來說,這裏存在另外一個問題:雖然爲客戶保留打開的連接有一定的好處,但它同樣影響了性能,因爲在處理暫停期間,本來可以釋放的資源仍舊被佔用。當Web服務器和應用服務器在同一臺機器上運行時,Keep-Alive 功能對資源利用的影響尤其突出。

  • 協議規定HTTP/1.0如果想要保持長連接,需要在請求頭中加上Connection: keep-alive,而HTTP/1.1默認是支持長連接的,有沒有這個請求頭都行。

  • 無狀態

  • 無狀態是指協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態。即我們給服務器發送 HTTP 請求之後,服務器根據請求,會給我們發送數據過來,但是,發送完,不會記錄任何信息。

  • 缺少狀態意味着如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。HTTP 協議這種特性有優點也有缺點,優點在於解放了服務器,每一次請求“點到爲止”不會造成不必要連接佔用,缺點在於每次請求會傳輸大量重複的內容信息。

  • 客戶端與服務器進行動態交互的 Web 應用程序出現之後,HTTP 無狀態的特性嚴重阻礙了這些應用程序的實現,畢竟交互是需要承前啓後的,簡單的購物車程序也要知道用戶到底在之前選擇了什麼商品。於是,兩種用於保持 HTTP 連接狀態的技術就應運而生了,一個是 Cookie,而另一個則是 Session

  • Cookie可以保持登錄信息到用戶下次與服務器的會話,換句話說,下次訪問同一網站時,用戶會發現不必輸入用戶名和密碼就已經登錄了(當然,不排除用戶手工刪除Cookie)。而還有一些Cookie在用戶退出會話的時候就被刪除了,這樣可以有效保護個人隱私。
  • Cookies 最典型的應用是判定註冊用戶是否已經登錄網站,用戶可能會得到提示,是否在下一次進入此網站時保留用戶信息以便簡化登錄手續,這些都是 Cookies 的功用。另一個重要應用場合是“購物車”之類處理。用戶可能會在一段時間內在同一家網站的不同頁面中選擇不同的商品,這些信息都會寫入 Cookies,以便在最後付款時提取信息。
  • 與 Cookie 相對的一個解決方案是 Session,它是通過服務器來保持狀態的。
  • 當客戶端訪問服務器時,服務器根據需求設置 Session,將會話信息保存在服務器上,同時將標示 Session 的 SessionId 傳遞給客戶端瀏覽器,瀏覽器將這個 SessionId 保存在內存中,我們稱之爲無過期時間的 Cookie。瀏覽器關閉後,這個 Cookie 就會被清掉,它不會存在於用戶的 Cookie 臨時文件。
  • 以後瀏覽器每次請求都會額外加上這個參數值,服務器會根據這個 SessionId,就能取得客戶端的數據信息。
  • 如果客戶端瀏覽器意外關閉,服務器保存的 Session 數據不是立即釋放,此時數據還會存在,只要我們知道那個 SessionId,就可以繼續通過請求獲得此 Session 的信息,因爲此時後臺的 Session 還存在,當然我們可以設置一個 Session 超時時間,一旦超過規定時間沒有客戶端請求時,服務器就會清除對應 SessionId 的 Session 信息。

3.http協議格式

3.1Http請求消息結構
抓包的request結構如下:
在這裏插入圖片描述
注:每行數據後面都有/r/n

  • 請求首行:GET爲請求類型, / 爲要訪問的資源,HTTP/1.1是協議版本
  • 請求頭部:從第二行起爲請求頭部,Host指出請求的目的地(主機域名);User-Agent是客戶端的信息,它是檢測瀏覽器類型的重要信息,由瀏覽器定義,並且在每個請求中自動發送。
  • 空行:請求頭後面必須有一個空行。
  • 請求數據:請求的數據也叫請求體,可以添加任意的其它數據。

3.2響應
在這裏插入圖片描述

  • 狀態行:狀態行由協議版本號、狀態碼、狀態消息組成。

  • 響應頭:響應頭是客戶端可以使用的一些信息,如:Date(生成響應的日期)、Content-Type(MIME類型及編碼格式)、Connection(默認是長連接)等等。

  • 空行:響應頭和響應體之間必須有一個空行。

  • 響應體:響應正文。

  • HTTP常見Header

  • Content-Type: 數據類型(text/html等)
  • Content-Length: Body的長度
  • Host: 客戶端告知服務器, 所請求的資源是在哪個主機的哪個端口上;
  • User-Agent: 聲明用戶的操作系統和瀏覽器版本信息;
  • referer: 當前頁面是從哪個頁面跳轉過來的;
  • ocation: 搭配3xx狀態碼使用, 告訴客戶端接下來要去哪裏訪問;
  • Cookie: 用於在客戶端存儲少量信息. 通常用於實現會話(session)的功能;

4.http狀態碼
在這裏插入圖片描述
常見的http狀態碼

200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
403 Forbidden //服務器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

6.http的方法
在這裏插入圖片描述
下面講一下GET和POST的區別

  • GET提交的數據會放在URL之後,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456.(注意對於用戶登錄來說,get是不安全的,網頁直接顯示你的用戶名和密碼) POST方法是把提交的數據放在HTTP包的Body中。
  • GET提交的數據大小有限制(因爲瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制。
  • GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值。
  • GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時,用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就可以從歷史記錄獲得該用戶的賬號和密碼。當然,安全只是相對的,不管是GET還是POST都能直接獲取到數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章