HTTP協議請求


  前言:這幾天在學習HTTP協議的請求響應等知識點,使我也慢慢地了解了HTTP協議,以前寫網站的時候根本不考慮這些,也就是所謂的”托控件”,這幾天學習了這些知識點感覺真的是一個提升,由於我比較笨,所以寫個筆記記錄一下,要是以后忘了可以再研究研究。順便也共享一下,可能有錯誤,希望大家能夠指出來。

1. 什么是瀏覽器? 什么是服務器?

  (1)我們一直在瀏覽網頁,比如我們去博客園www.cnblogs.com,那么我們知道當我們輸入這段網址的時候我們的瀏覽器以及服務器做了什么嗎?下面簡單的看一下這張圖:

  

  (2)當我們在瀏覽器中輸入:http://127.0.0.1:8080/proscenium/的時候,瀏覽器請求后台服務器,后台服務器會返回給我們一個網頁,那么后台服務器到底干了什么呢?我們可以使用Chrome,IE自帶的開發者人員工具,或者DebugBur,Fiddler,和HttpWatch查看,下面就是我查看的網站的訪問記錄    

  注解:當我們輸入網址回車的時候,瀏覽器自動的將我們請求的地址封裝成了HTTP報文,HTTP報文就是一串字符串,而后通過Socket發送到服務器對應的IP和端口上去,請求的報文格式如下:

  GET /proscenium/ HTTP/1.1

  Host: localhost:8080

  Connection: keep-alive

  Cache-Control: max-age=0

  User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Encoding: gzip,deflate,sdch

  Accept-Language: zh-CN,zh;q=0.8 Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3 Cookie: ASP.NET_SessionId=myc2esb4m0io50gf0t52jvtl

  將上面的HTTP報文發送給服務器,服務器來解析這些HTTP協議,然后將解析出來的頁面封裝成一個響應的報文,發送回給瀏覽器,瀏覽器將會解析服務器發送回來的這個響應的報文,顯示出相應的信息來

  HTTP/1.1 200 OK

  Cache-Control: private

  Content-Type: text/html; charset=utf-8

  Content-Encoding: gzip

  Vary: Accept-Encoding

  Server: Microsoft-IIS/8.0

  X-AspNet-Version: 4.0.30319

  X-Powered-By: ASP.NET

  Date: Sat, 27 Oct 2012 11:46:29 GMT

  Content-Length: 52728

  (3)最后使用圖形來說明上面的這個請求響應的過程

  

  (4)解析服務器發回來的數據的HTML頁面的時候,瀏覽器是一行一行的解析的,當遇到添加的Jquery的引入文件的時候,就會在發送一個請求解析JS文件,解析到CSS和圖片等都一樣的執行格式,所以瀏覽器是一邊解析一邊執行的一個過程,當然里面還是有特殊的一些控件(Table)。

  (5) 在.NET平台下面我們經常使用的是IIS管理器,我們可以將我們的網站寄宿到IIS中,我們就可以查看我們的網站了。

  (6)瀏覽器和服務器語言

       1)瀏覽器只負責解釋執行HTML+CSS+Javascript代碼

       2)服務器可執行服務器端語言,.net,Java分別由不同的運行環境執行代碼(FrameWork,JVM)

  (7)靜態頁面和動態頁面的區別?

       1) 在服務器就相當於直接讀取文件字符串然后返回客戶端瀏覽器;(任何時候訪問看到的都是一樣的界面)。

       2) 在服務器是先交給某語言環境虛擬機編譯運行,按照語法生成代碼返回客戶端瀏覽器。(不同條件和時候訪問看到的都界面也不同)。

2. HTTP協議

  (1) Web開發是和Http協議打交道的,必須了解HTTP協議,HTTP協議版本:HTTP/0.9,HTTP/1.0,HTTP/1.1。

  (2) HTTP協議的幾個概念

    1)連接(Connection),瀏覽器和服務器之間傳輸數據的通道,一般請求完畢就關閉,HTTP不保持連接,不保持連接會降低處理速度(因為建立連接速度很慢),保持連接的話就會降低服務器的處理的客戶端請求數,而不保持連接服務器可以處理更多的請求

    2)請求(Request),瀏覽器向服務器發送”什么什么”的消息,包含請求的類型,請求的數據,瀏覽器的信息(語言,瀏覽器版本等信息)。

    3)響應(Response),服務器對瀏覽器的請求返回數據,包含是否成功,狀態碼等信息。

  (3) HTTP協議消息結構圖

  

  (4 HTTP協議-請求報文格式

  

    

  (5)HTTP協議-請求報文詳解

    1) 用httpwatch查看訪問一個網站的響應情況。敲入一個網址后,瀏覽器向服務器發出請求。頁面中的圖片、js、css在單獨的請求中

    2) Host:請求的發送給那一個服務器

    3) Accept-Encoding gzip,deflate表示瀏覽器支持gzip,deflate兩種壓縮算法

    4) Accept-Language zh-cn表示瀏覽器支持的語言,很多進入后自動就是中文界面的國際網站就是通過讀取這個頭的值實現的。

    5) Connection Keep-Alive。一般情況下,一旦web服務器向瀏覽器發送了請求數據,他就要關閉TCP連接,然后如果瀏覽器或者服務器在其頭信息加入了Connection:keep-alive,則TCP連接在發送后仍將保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求,保持連接節省了為每個請求建立新連接所需要的時間,還節約了網絡帶寬。

    6) Cookie是瀏覽器相服務器發送和當前網站關聯的Cookie,這樣在服務器端也能讀取到瀏覽器端的Cookie了。

    7) User-Agent為瀏覽器的版本信息,通過這個信息可以讀取瀏覽器是IE還是FireFox,支持的插件和.net版本等信息

    8)Referer:表示請求的地址,也就是從那個頁面來的。

    9)Content-Length:表示下面的請求體的長度

  (6) HTTP協議-相應報文格式

  

    

  (7) HTTP協議-相應報文詳解

    1)  瀏覽器相服務器發出請求,服務器處理可能成功,可能是失敗,可能沒有權限訪問等原因,服務器會通過相應嗎來告訴瀏覽器處理結果

      1)"200":表示執行成功,返回OK。

      2)"302":Found重定向。

      3)"400":Bad Rquest錯誤請求,發出錯誤的不符合HTTP協議的請求。

      4)"403":Forbidden禁止。

      5)"404":Not Found未找到,演示訪問一個不存在的頁面看報文。

      6)"500":Internal Server Error服務器內部錯誤,演示頁面拋出異常

      7)"503":Service Unavailable。一般是訪問人數過多,可以用12306網站實驗一樣,可能會得到這個結果。

    2)  200段是成功,300段需要對請求做進一步的處理,400段表示客戶端請求錯誤,500段是服務器的錯誤。

    3)  Server:Cassini/3.5.0.5表示服務器的類型

    4)  Content-Type:text/html;charset=utf-8表示返回數據的類型

  5)  服務器通過Content-Type告訴客戶端響應的數據的類型,這樣瀏覽器就根據返回數據的類型來進行不同的處理,如果是圖片類型的顯示,如果是文本類型就直接顯示內容,如果用HTML類型就用瀏覽器顯示內容,如果是下載類型就彈出下載工具等。

  6)常用Content-Type:text/HTML、image/GIF、image/JPEG、text/plain、text/javascript、application/x-excel 、application/octet-stream(二進制文件)

  7) Content-Length: 19944表示響應報文體的字節長度,報文頭只是描述,返回的具體數據(比如HTML文本、圖片數據等)在兩個回車之后的內容中。

  8) HTTP協議的其他的一些介紹

    1)HTTP是無狀態的,不會記得“上一個請求是什么”,所以哪怕是同一個頁面中的JS,CSS,JPG也都要重復的提交Accept-Language,Accept-Encoding,Cookie等。

    2)網頁中如果有圖片,CSS,JS等外部文件的話,圖片、CSS、JS都在單獨的請求中,也就是並不是頁面的使所有內容都在一個請求中完成,而是每個資源一個請求。

    3)一般情況下,只有瀏覽器請求服務器端,服務器端才會給瀏覽器響應數據,服務器不會主動向瀏覽器推送數據,這樣是安全考慮,也是提高服務器的性能考慮,如果要服務器向瀏覽器推送數據,這需要使用ServerPush(Ajax隔一段時間到服務器請求最新的數據)等額外的技術。

    4)HTTP是“請求-響應”的工作模式

  (9)模擬HTTP協議的過程。

  1)這個小項目實現的功能是:圖形展示

  

  2)實現的效果是:

  

  

  3)代碼下載地址是:http://files.cnblogs.com/hanyinglong/AnalogIISDemo.zip


免責聲明!

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



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