1. 程式人生 > >不定期更新的新問題(http協議當你在瀏覽器裏輸入一個url後發生了什麽?)

不定期更新的新問題(http協議當你在瀏覽器裏輸入一個url後發生了什麽?)

服務器 兩種 解釋 private 字段 互聯網 cookie值 求和 過期

HTTP協議:
超文本傳輸協議是互聯網上應用最為廣泛的一種網絡協議 https是以安全為目標的http通道,就是http的安全版。
為什麽會有這個協議呢?

         為了建立客戶端與服務器的連接,讓兩者進行溝通(自我理解:讓計算機按照規矩說話,你問我答,你怎麽問我怎麽答,否則計算機會各說各話沒辦法溝通)

     http是通過報文進行溝通的:

         請求報文:請求頭、請求行、請求體

         響應報文:響應頭、響應行、響應體

         請求頭:

              Accept: 指定客戶端能夠接收的內容類型

              Cache-Control:指定請求和響應遵循的緩存機制

              Cookie: HTTP請求發送時,會把保存在該請求域名下的所有cookie值一起發送給web服務器

              Date:請求發送的日期和時間

              If-None-Match: 匹配etag,如果它修改了就不取緩存

              If-Modified-Since: 將之前服務器端發送過來的最後修改時間戳發送回去

  請求行:請求方法(常用的post和get)、請求地址(url)、請求協議及版本(HTTP/1.1)
         請求體:就像用post表單傳遞數據如:name=aimee  age=18     name=aimee&age=18會出現在請求體中

         響應行:響應協議及版本號(HTTP/1.1)、響應狀態碼(200)響應狀態文字(ok)

         響應頭:Allow:對於特定資源的有效動作 、Connection: 針對該鏈接所預期的選項 

         響應體:就是我們請求回來的數據   

   狀態碼:

        1xx        接到請求繼續處理

        2xx        成功

        3xx        重定向

        4xx        客戶端錯誤

        5xx        服務器錯誤

    常見的狀態碼 :

        成功狀態碼:200 表示成功、301/302臨時/永久重定向  304資源未被修改  

        失敗狀態碼:404請求內容不存在、500服務器暫時不可用、503服務器內部錯誤

    請求方法get和post的區別:

         get使用url或cookie傳參,而post將數據放在body中

         get的url有長度上的限制,post可以傳很多的數據

         post比get安全 

HTTP緩存:
HTTP緩存機制是web性能優化的重要手段,HTTP緩存有多種規則,根據是否需要重新向服務器發送請求來分類,將其分為兩大類:強制緩存、對比緩存。
強制緩存的意思就是瀏覽器在緩存過期之前只會使用瀏覽器緩存的文件,不會發送HTTP請求,對比緩存的意思先請求服務器判斷瀏覽器緩存是否有效,然後再決定是否使用瀏覽器緩存。
強制緩存怎麽判斷緩存數據是否過期:
在沒有緩存數據的時候,瀏覽器向服務器請求數據時,服務器會將數據和緩存規則一並返回,緩存規則信息包含在響應頭中,對於強制緩存來說,響應頭中有兩個字段來標 明過期規則:Expires或Cache-Control,不過Expires是HTTP1.0的東西現在默認瀏覽器默認使用HTTP1.1所以它的作用基本忽略。HTTP1.1版本使用Cache-Control

        Cache-Control 是最重要的規則,常見取值有:

            private:客戶端可以緩存

            public:客戶端和代理服務器都可以緩存

            max-age=xxx:緩存內容將在xxx秒後失效

            no-cache:需要使用對比緩存來驗證緩存數據

            no-store:所有的內容都不會緩存,強制緩存,對比緩存都不會觸發                                                                                                                                                                                   

    對比緩存也有兩種類型:Etag/If-None-Match和If-Modified-Since/Last-Modified                  

        Etag : 服務器響應請求時,告訴瀏覽器當前資源在服務器的唯一標識

        Last-Modified: 服務器最後修改的時間,和Etag配合使用

        If-None-Match:再次請求服務器時,通過此字段通知服務器客戶端緩存數據的唯一標識。

        Last-Modified-since  :再次請求服務器時,通過此字段通知服務器上次請求時,服務器返回的資源的最後修改時間。                 

        Etag和If-None-Match的工作原理是在HTTP Response中添加ETags信息。當客戶端再次請求該資源的時,將在HTTP Resquest中加入If-None-Match信息(Etag的值),如果服務器驗證資源的Etags沒有改變(該資源沒有改變),將返回一個304狀態,否則服務器將返回200狀態,並返回該資源和新的Etags                                  

當在瀏覽器下輸入一個url發生了什麽:
1.瀏覽器通過DNS域名解析到服務IP
DNS:它可以將域名和IP地址相互映射的一個分布式數據庫,能夠使人更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP地址數串。

    IP地址:是Internet主機的作為路由尋址用的數字體標識,人不容易記憶。因而產生了域名這一種字符型標識。

2.客戶端通過TCP協議建立到服務器的TCP連接
TCP協議(傳輸層協議):在正式收發數據前,必須要和對方建立可靠的連接。一個TCP連接要經過三次‘對話’才能建立起來。
UDP協議:面向非連接的協議,就是在正式通信前不必與對方先建立連接,不管對方狀態就直接發送,我覺得這個與手機短信非常相似,在發短信的時候,只需要輸入對方的手機號就可以啦

3.客戶端向服務器端發送http協議包,請求服務器的資源文檔
4.服務器向客戶端發送http協議應答包
5.客戶端和服務器斷開,客戶端開始解釋處理HTML文檔

不定期更新的新問題(http協議當你在瀏覽器裏輸入一個url後發生了什麽?)