瞭解學習Http協議

Http協議

1.概念

協議是指計算機通信網絡中兩臺計算機之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(http)是一種通信協議,它允許將超文本標記語言(html)文檔從web服務器傳送至客戶端的瀏覽器。

2.瀏覽器顯示網頁內容原理

我們在瀏覽器的地址欄中輸入地址URL後,就能看到網頁,它的原理實際是:在瀏覽器器的地址欄中輸入URL後,瀏覽器會向web服務器發送請求(Request),服務器接收到請求後進行處理,生成相應的結果(Response),再將結果發送給瀏覽器,瀏覽器解析Response中的Html文檔,之後我們就看到了網頁。

3.打開一個網頁需要瀏覽器向web服務器發送多個請求

當在瀏覽器中輸入URL時,瀏覽器發送一個Request去獲取html文檔,服務器再將Response發送回給瀏覽器。

瀏覽器解析Response的html文檔,發現其中引用很多個文件,例如:imag,js文件,css文件。

瀏覽器會再自動發送Request去獲取這些文件。待所有的文件都下載成功後,網頁就顯示出來了。

4.代理服務器

當我們的瀏覽器向web發送請求時,有可能會經過代理服務器,最後再到web服務器。

代理服務器   a.可以提高訪問速度,且多數代理服務器都有緩存功能。b.可以隱藏自己身份。c.可以科學上網,突破當前限制。

5.URL結構詳解

URL(Uniform Resource Locator) 地址用於描述一個網絡上的資源,  基本格式如下

schema://host[:port#]/path/.../[?query-string][#anchor]   
例如:https://www.baidu.com/s?ie=utf-8&f=8#stuff
schema 指的是底層使用的協議   host 指的是IP地址與域名  port# 指的是端口號,默認是80可以省略不寫,使用其他的端口必須指明 path 指的是請求的資源路徑 query-string 指的是發送給服務器的數據 anchor 指的是錨

schema:   http      host:www.baidu.com     path:s    query-string:ie=utf-8&f=8    anchor:stuff

6.HTTP消息的結構

1)Request消息結構

Request消息分爲3部分,Request line、Request header、 body。header與body之間有個空格。

首行中METHOD指的是請求方法,path-to-resource 指的是請求資源,HTTP/Version-number指的是http協議的版本號。

使用的“get”方法時,body爲空。

2)Response消息結構

Response消息分爲3部分,Response line、Response header、body。header與body之間有個空格。

首行中HTTP/Version-number指的是http協議的版本號,status code 指的是狀態碼,message指的是狀態信息。

7.請求方法get、post的區別

http協議與服務器交互最基本的4種方法爲get、post、put、delete,它們分別對應查詢、更新、增加、刪除4個操作。目前我們常見的是get、post這兩種請求方法。它們的區別如下:

a)get方法一般是爲了獲取或查詢資源信息,而post方法一般是爲了更新資源信息。

b)get方法提交的數據會放在URL之後,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. post方法是把提交的數據放在HTTP包的Body中。

c) get方法提交的數據大小有限制(因瀏覽器對url的長度有限制),而post方法提交的數據無限制。

d) get方法需要通過Request.query-string獲取變量的值,而post方法通過Response.form獲取變量的值。

e) get 方法提交的數據會帶來安全問題,例如一個網站登錄頁面,通過get方式提交數據時,用戶名、密碼出現在Url中,若該頁面可以被緩存或其他人可以訪問這臺機器,從歷史記錄中就可以獲取該用戶的賬戶和密碼。

8.狀態碼

狀態碼是用來告訴客戶端,服務器是否產生了預期的Response。

HTTP/1.1中定義了5類狀態碼,狀態碼有三位數字組成,第一個數字定義了響應的類別。

1XX  提示信息->表示請求已被成功接收,繼續處理

2XX 成功->表示請求已被成功接收,理解,接受

3XX 重定向->要完成請求必須進行更進一步的處理

4XX 客戶端錯誤->請求有語法錯誤或請求無法實現

5XX 服務器錯誤->服務器未能實現合法的請求

下面是一些常見的狀態碼:

200   ok    這個表明該請求被成功的完成,所請求的資源發送回客戶端。

302  found   重定向,新的url會在response中的location中返回,瀏覽器將會自動使用新的url發出新的request。

304  not modified  代表上次的文檔已被緩存,還可以繼續使用。若不想使用本地緩存可以強制刷新頁面。

400  bad Request  客戶端請求與語法錯誤,不能被服務器所理解。

403  forbidden  服務器收到請求,但是拒絕提供服務。

404  not found  請求資源不存在(用戶輸錯了url)。

500 Internet server error  服務器發生了不可預期的錯誤。

503 server unavailable 服務器當前不能處理客戶端的請求,一段時間後可能恢復正常。

9.HTTP協議是無狀態的

無狀態是指協議對於事務處理沒有記憶能力,服務器不知道客戶端是什麼狀態,同一個客戶端的這次請求和上次請求時沒有對應關係的,即服務器並不知道這兩個請求來自同一個客戶端。爲了解決這個問題,web程序引入了Cookie機制來維護狀態。

Http是一個無狀態的面向連接的協議,無狀態不代表Http不能保持Tcp連接,更不代表http使用的是udp協議。

Http/1.1,默認開啓了keep-alive,保持連接特性,簡單地說,當一個網頁打開完成後,客戶端和服務器之間用於傳輸http數據的Tcp鏈接不會關閉,如果客戶端再次訪問這個服務器上的網頁,會繼續使用這一條已經建立的連接。

keep-alive不會永久保持連接,它有一個保持的時間,可以在不同的服務器軟件中設定這個時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章