1. 程式人生 > >HTTP知識點小集合

HTTP知識點小集合

HTTP協議

對於HTTP之前我自己瞭解的不是很多,雖然我的專業是網工……現在瞭解也還不晚,這就整理了一些知識點和大家分享一下。

1.定義


HTTP協議(Hyper Text Transfer Protocol,超文字傳輸協議)的縮寫,是用於從全球資訊網(WWW)伺服器傳輸超文字到本地瀏覽器的傳送協議。
HTTP是一個基於TCP/IP通訊協議來傳遞資料(HTML檔案,圖片檔案,查詢結果等)。

2.工作原理:

HTTP協議工作於客戶端-伺服器端。瀏覽器作為HTTP客戶端通過URL向HTTP服務端(WEB伺服器)傳送所有請求。
WEB伺服器根據接收到的請求後,向客戶傳送響應資訊。
HTTP預設埠號為80,但是也可以改為8080或者其他埠。

其實說簡單點,HTTP工作過程可分為四步:建立連線傳送請求資訊傳送響應資訊、斷開連線

3.注意事項:

HTTP是無連線的:每次連結處理一個請求,伺服器處理完請求並收到客戶應答,斷開連線,節省時間。
HTTP是媒體獨立的:只要客戶端和伺服器知道如何處理資料內容,任何型別的資料都可以通過HTTP傳送。
HTTP是無狀態的:協議對於事務處理沒有記憶。
*

4.HTTP訊息結構

HTTP使用統一資源識別符號(URI)來傳輸資料和建立連線;

客戶端請求訊息
客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式:請求行(request line)、請求頭部(header)、空行

請求資料四個部分組成

請求報文格式:
請求行 - 通用資訊頭 - 請求頭 - 實體頭 - 報文主體

下圖給出了請求報文的一般格式。

伺服器響應訊息

應答報文格式:
狀態行 - 通用資訊頭 - 響應頭 - 實體頭 - 報文主體

HTTP響應由四個部分組成:狀態行、訊息報頭、空行和響應正文。

例項(菜鳥教程裡面的例項)

下面例項是一點典型的使用GET來傳遞資料的例項:
客戶端請求:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

服務端響應

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

輸出結果

Hello World! My payload includes a trailing CRLF.

5.HTTP請求方法

根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POSTHEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。
下面列個表具體說說:
HTTP請求方法

6.響應頭資訊

HTTP響應頭、請求頭中與快取控制的相關欄位

1.Expires:過期時間。(HTTP 1.0的欄位)
瀏覽器再次發起請求的時候會先檢查是否超過這個時間,如果沒超過則直接從快取中讀取資訊。但是如果瀏覽器的時間和伺服器的時間不一致,就會出現問題。
2.Cache-control:max-age=6000(毫秒)/no-cache/no-store/private/public (HTTP 1.1的欄位)
同時設定Expires和max-age的情況下,使用max-age
3.Last-Modified:最後一次修改時間。
4.Etag:被請求變數的實體標記

響應頭資訊這個有點多,大家只需要瞭解就好,我在這就不寫了,給大家分享一個連結來學習……
HTTP響應頭資訊詳細介紹

7.HTTP狀態碼

HTTP狀態碼這一塊比較重要,需要我們記住常用的狀態碼
HTTP狀態碼的英文為HTTP Status Code。
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在伺服器發出請求。當瀏覽器接收並顯示網頁前,此網頁所在的伺服器會返回一個包含HTTP狀態碼的資訊頭(server header)用以響應瀏覽器的請求。
常見的狀態碼有以下幾種:

  1. 200 - 請求成功
  2. 301- 資源(網頁)等被永久地轉移到其它URL
  3. 404- 請求的資源(網頁)不存在
  4. 500- 內部伺服器錯誤

    HTTP狀態碼分類
    HTTP狀態碼由三個十進位制的陣列成,第一個十進位制數字定義了狀態碼的類 型,後兩個數字沒有分類的作用。
    HTTP狀態碼共分為5種類型
    1** ——資訊,伺服器收到請求,需要請求者繼續執行操作
    2** ——成功,請求被成功接收並處理
    3** ——重定向,需要進一步的操作以完成請求
    4** ——客戶端錯誤,請求包含語法錯誤或無法完成請求
    5** ——伺服器錯誤,伺服器在處理請求的過程中發生了錯誤

下面給大家一個連結,有具體的狀態碼及其描述
HTTP狀態碼列表

8.HTTP content-type

Content-Type,表示內容型別,用於定義網路檔案的型別和網頁的編碼,決定瀏覽器將以什麼形式、什麼編碼讀取這個檔案
這就是為什麼我們經常看到一些Asp網頁點選的結果卻是下載到的一個檔案或一張圖片的原因
其實對於HTTP content-type,我個人理解的不是很透徹……

9.版本歷史

超文字傳輸協議已經演化出了很多版本,它們大部分都是向下相容的。
客戶端在發出請求的時候就會告訴它採用的協議版本號,這樣在響應中後者就會採用相同的版本號協議響應請求。

0.9版本,已經過時。它只支援GET一種請求方式,客戶端無法向伺服器傳更多的資訊。
1.0版本,這是第一個在通訊中指定版本號的HTTP 協議版本,至今仍被廣泛採用,特別是在 代理伺服器中。
1.1版本,當前版本。持久連線被預設採用,並能很好地配合代理伺服器工作。還支援以管道方式同時傳送多個請求,以便降低線路負載,提高傳輸速度。

HTTP/1.1相較於 HTTP/1.0 協議的區別主要體現在:
1 快取處理
2 頻寬優化及網路連線的使用
3 錯誤通知的管理
4 訊息在網路中的傳送
5 網際網路地址的維護
6 安全性及完整性

下次分享HTTP和HTTPS的區別,期待吧,期待就對了……