<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] ## **什么是HTTP協議** 協議是指計算機通信網絡中兩臺計算機之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。 目前我們使用的是HTTP/1.1 版本 <br /> ## **Web服務器,瀏覽器,代理服務器** 當我們打開瀏覽器,在地址欄中輸入URL,然后我們就看到了網頁。 原理是怎樣的呢? 實際上我們輸入URL后,我們的瀏覽器給Web服務器發送了一個Request, Web服務器接到Request后進行處理,生成相應的Response,然后發送給瀏覽器, 瀏覽器解析Response中的HTML,這樣我們就看到了網頁,過程如下圖所示: ![](https://img.kancloud.cn/a3/98/a3988581ba0422584247cc4ae5c6ef8c_758x353.png) 我們的Request 有可能是經過了代理服務器,最后才到達Web服務器的。 過程如下圖所示: ![](https://img.kancloud.cn/f8/a0/f8a03a4fefa4809af95d7837c4b4ca92_793x349.png) ``` 代理服務器就是網絡信息的中轉站,有什么功能呢? 1. 提高訪問速度, 大多數的代理服務器都有緩存功能。 2. 突破限制, 也就是翻墻了 3. 隱藏身份。 ``` <br /> ## **URL詳解** ?URL(Uniform Resource Locator) 地址用于描述一個網絡上的資源,? 基本格式如下: ~~~ schema://host[:port#]/path/.../[?query-string][#anchor] ~~~ ``` scheme?????指定底層使用的協議(例如:http, https, ftp) host???????HTTP服務器的IP地址或者域名 port???????HTTP服務器的默認端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/ path???????訪問資源的路徑 query-string?????發送給http服務器的數據 anchor-?????錨 ``` URL 的一個例子 ``` http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff Schema: http host: www.mywebsite.com path: /sj/test/test.aspx Query String: name=sviergn&x=true Anchor: stuff ``` <br /> ## **HTTP協議是無狀態的** http協議是無狀態的,同一個客戶端的這次請求和上次請求是沒有對應關系,對http服務器來說,它并不知道這兩個請求來自同一個客戶端。 為了解決這個問題, Web程序引入了Cookie機制來維護狀態. <br /> ## **打開一個網頁需要瀏覽器發送很多次Request** 1. 當你在瀏覽器輸入URL http://www.cnblogs.com 的時候,瀏覽器發送一個Request去獲取 http://www.cnblogs.com 的html.? 服務器把Response發送回給瀏覽器. 2. 瀏覽器分析Response中的 HTML,發現其中引用了很多其他文件,比如圖片,CSS文件,JS文件。 3. 瀏覽器會自動再次發送Request去獲取圖片,CSS文件,或者JS文件。 4. 等所有的文件都下載成功后。 網頁就被顯示出來了。 ## **HTTP消息的結構** 先看Request 消息的結構,?? Request 消息分為3部分,第一部分叫Request line, 第二部分叫Request header, 第三部分是body. header和body之間有個空行, 結構如下圖 ![](https://img.kancloud.cn/24/8e/248ee14abc41c38ded99cdcf806e7427_430x194.png) 第一行中的Method表示請求方法,比如"POST","GET",? Path-to-resoure表示請求的資源, Http/version-number 表示HTTP協議的版本號 當使用的是"GET" 方法的時候, body是為空的 比如我們打開博客園首頁的request 如下: ``` GET http://www.cnblogs.com/ HTTP/1.1 Host: www.cnblogs.com ``` 抽象的東西,難以理解,老感覺是虛的, 所謂眼見為實, 實際見到的東西,我們才能理解和記憶。 我們今天用Fiddler,實際的看看Request和Response. 下面我們打開Fiddler 捕捉一個博客園登錄的Request 然后分析下它的結構, 在Inspectors tab下以Raw的方式可以看到完整的Request的消息, ? 如下圖: ![](https://img.kancloud.cn/e2/7b/e27b8715230eb02b91845cd1154e8b89_671x735.png) <br /> 我們再看Response消息的結構, 和Request消息的結構基本一樣。 同樣也分為三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. header和body之間也有個空行,? 結構如下圖: ![](https://img.kancloud.cn/d8/54/d854901906e80a4f9b2edcb1c234adc0_430x194.png) HTTP/version-number表示HTTP協議的版本號,? status-code 和message 請看下節\[[狀態代碼](https://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html#statecode)\]的詳細解釋. 我們用Fiddler 捕捉一個博客園首頁的Response然后分析下它的結構, 在Inspectors tab下以Raw的方式可以看到完整的Response的消息, ? 如下圖: ![](https://img.kancloud.cn/4f/57/4f574d6a03747a77ebfc7db977359117_720x734.png) <br /> ## **Get和Post方法的區別** Http協議定義了很多與服務器交互的方法,最基本的有4種,分別是GET,POST,PUT,DELETE. 一個URL地址用于描述一個網絡上的資源,而HTTP中的GET, POST, PUT, DELETE就對應著對這個資源的查,改,增,刪4個操作。 我們最常見的就是GET和POST了。GET一般用于獲取/查詢資源信息,而POST一般用于更新資源信息。 ``` 我們看看GET和POST的區別: 1. GET提交的數據會放在URL之后,以?分割URL和傳輸數據,參數之間以&相連, 如EditPosts.aspx?name=test1&id=123456.? POST方法是把提交的數據放在HTTP 包的Body中. 2. GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方 法提交的數據沒有限制. 3. GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form 來獲取變量的值。 4. GET方式提交數據,會帶來安全問題,比如一個登錄頁面,通過GET方式提交數據時, 用戶名和密碼將出現在URL上,如果頁面可以被緩存或者其他人可以訪問這臺機器,就 可以從歷史記錄獲得該用戶的賬號和密碼. ``` <br /> ## **狀態碼** Response 消息中的第一行叫做狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。 狀態碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的Response. ``` HTTP/1.1中定義了5類狀態碼, 狀態碼由三位數字組成,第一個數字定義了響應的類別: 1XX? 提示信息 - 表示請求已被成功接收,繼續處理 2XX? 成功 - 表示請求已被成功接收,理解,接受 3XX? 重定向 - 要完成請求必須進行更進一步的處理 4XX? 客戶端錯誤 -? 請求有語法錯誤或請求無法實現 5XX? 服務器端錯誤 -?? 服務器未能實現合法的請求 ``` 看看一些常見的狀態碼 200 OK 最常見的就是成功響應狀態碼200了, 這表明該請求被成功地完成,所請求的資源發送回客戶端 如下圖, 打開博客園首頁: ![](https://img.kancloud.cn/77/c2/77c276d25806d403e53372a736166699_729x627.png) <br /> 302 Found 重定向,新的URL會在response 中的Location中返回,瀏覽器將會自動使用新的URL發出新的Request。 例如在IE中輸入, http://www.google.com. HTTP服務器會返回302, IE取到Response中Location header的新URL, 又重新發送了一個Request。 ![](https://img.kancloud.cn/50/47/5047c52af41532ed9d41e0aacd295757_877x604.png) <br /> 304 Not Modified 代表上次的文檔已經被緩存了, 還可以繼續使用, 例如打開博客園首頁, 發現很多Response 的status code 都是304 ![](https://img.kancloud.cn/39/bb/39bb5394eb53f01026789ac0ecddd932_760x534.png) 提示: 如果你不想使用本地緩存可以用Ctrl+F5 強制刷新頁面 <br /> 400 Bad Request? 客戶端請求與語法錯誤,不能被服務器所理解 403 Forbidden 服務器收到請求,但是拒絕提供服務 404 Not Found 請求資源不存在(輸錯了URL) 比如在IE中輸入一個錯誤的URL, http://www.cnblogs.com/tesdf.aspx ![](https://img.kancloud.cn/06/ab/06ab2d34f4d03f386f3d23476cd2072f_725x784.png) 500 Internal Server Error 服務器發生了不可預期的錯誤 503 Server Unavailable 服務器當前不能處理客戶端的請求,一段時間后可能恢復正常
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看