通訊協議(一)HTTP協議


協議是指計算機通信網絡中兩台計算機之間進行通信所必須共同遵守的規定或規則,超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言(HTML)文檔從Web服務器傳送到客戶端的瀏覽器。目前我們使用的是HTTP/1.1 版本。

當我們打開瀏覽器,在地址欄中輸入URL,我們的瀏覽器給Web服務器發送了一個Request, Web服務器接到Request后進行處理,生成相應的Response,然后發送給瀏覽器, 瀏覽器解析Response中的HTML,這樣我們就看到了網頁。

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

schema://host[:port#]/path/.../[?query-string][#anchor]

scheme

指定低層使用的協議(例如:http, https, ftp)

host

HTTP服務器的IP地址或者域名
port#  HTTP服務器的默認端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明
path 訪問資源的路徑
query-string 發送給http服務器的數據
anchor

 

http://www.test.com:8080/v1/user?name=cellphone#introduction
Schema:                 http
host: www.mywebsite.com
port:            8080
path: /v1/user
Query String: name=cellphone
Anchor: introduction

瀏覽器訪問網頁時,瀏覽器需要發送多次Request。當在瀏覽器輸入URL http://www.cnblogs.com 的時候,瀏覽器發送一個Request去獲取 http://www.cnblogs.com 的html。 服務器把Response發送回給瀏覽器。瀏覽器分析Response中的 HTML,發現其中引用了很多其他文件,比如圖片,CSS文件,JS文件。瀏覽器會自動再次發送Request去獲取圖片,CSS文件,或者JS文件。等所有的文件都下載成功后。 網頁就被顯示出來了。

HTTP協議是無狀態的,同一個客戶端的這次請求和上次請求是沒有對應關系,對http服務器來說,它並不知道這兩個請求來自同一個客戶端。 為了解決這個問題, Web程序引入了Cookie機制來維護狀態。

HTTP消息體結構

先看Request 消息的結構,   Request 消息分為3部分,第一部分叫Request line,第二部分叫Request header,第三部分是body。header和body之間有個空行, 結構如下:

METHOD/path-to-resource HTTP/Version-number

Head-Name-1: value

Head-Name-2: value

 
Optional request body

 

 

 

 

 

 

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

為了加深對HTTP的理解,我們用Fiddler,實際的看看Request和Response。

 

再看Response消息的結構, 和Request消息的結構基本一樣。 同樣也分為三部分,第一部分叫Response line,第二部分叫Response header,第三部分是body. header和body之間也有個空行,  結構如下:

HTTP/Version-number                 Status Code

Head-Name-1: value

Head-Name-2: value

 
Optional response body

 

 

 

 

 

 

Response 消息中的第一行叫做狀態行,由HTTP協議版本號,狀態碼,狀態消息 三部分組成。狀態碼用來告訴HTTP客戶端,HTTP服務器是否產生了預期的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 Internal Server Error:服務器發生了不可預期的錯誤;

503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間后可能恢復正常;

 

參考:HTTP協議詳解

 


免責聲明!

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



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