HTTP請求和響應1:概述
HTTP的報文分為請求報文和響應報文,開啟一個web頁面後,瀏覽器將發起一個HTTP請求報文,HTTP伺服器收到請求後將回送一個響應報文。
報文的基本結構
HTTP的請求和響應報文都由三個部分組成:對報文進行描述的起始行(start line)、包含屬性的首部(header)塊、以及可選的包含資料的主體(body)部分。
請求報文和響應報文在語法上有些差別,下面是請求報文的格式:
<method> <request-URL> <version>
<headers>
<entity-body>
下面是響應報文的格式:
<version> <status> <reason-phrase> <headers> <entity-body>
1)方法(method)
客戶端希望伺服器對資源執行的動作。
2)請求URL(request-URL)
命名了所請求資源,或者URL路徑元件的完整URL。
3)版本(ersion)
報文所使用的HTTP版本,格式為:
HTTP/<major>.<minor>
目前使用的是1.1版本。
4)狀態碼(status)
描述了請求過程中所發生的情況。
5)原因短語(reason-phrase)
狀態碼的可讀版本,只對人類有意義。
6)首部(header)
HTTP/1.1要求有效的請求或響應報文中必須包含特定的首部,每個首部都包含一個名字,後面跟著一個冒號(:),然後是一個可選的空格,然後是一個值,最後是一個換行(CRLF)。首部由一個空行結束。
7)實體(entity-body)
包含由任意資料組成的資料框,報文可以不包含實體部分。
下面看一個具體的例子,請求報文:
GET /test/hi-there.txt HTTP/1.1
Accept: text/*
Host: www.joes-hardware.com
響應報文:
HTTP/1.1 200 OK
Content-type: text/plain
Content-length: 19
Hi! I'm a message!
方法
常用的HTTP方法包括:
GET:從伺服器獲取一份文件
HEAD:只從伺服器獲取文件的首部
POST:向伺服器傳送需要處理的資料
PUT:將請求的主體部分儲存在伺服器上
TRACE:對可能經過代理伺服器傳送到伺服器上去的報文進行跟蹤
OPTIONS:決定可以在伺服器上執行哪些方法
DELETE:從伺服器上刪除一份文件
注意並不是每個伺服器都實現了所有的方法。
狀態碼
狀態碼用於告訴客戶端,發生了什麼事情,狀態碼的分類如下:
100~199:資訊提示
200~299:成功
300~399:重定向
400~499:客戶端錯誤
500~599:伺服器錯誤
下面列舉了一些最常見的狀態碼:
200 OK:成功。請求的所有資料都在響應主體中
401 Unauthorized:需要輸入使用者名稱和密碼
404 Not Found:伺服器無法找到所請求URL對應的資源
首部
首部是一些名/值對的列表,向請求和響應報文中新增一些附加資訊。
HTTP規範定義了幾種首部欄位,應用程式也可以隨意發明自己所用的首部。HTTP首部可以分為以下幾類:
1)通用首部;
--既可以出現在請求報文中,也可以出現在響應報文中
2)請求首部;
3)響應首部;
4)實體首部;
--描述主體的長度和內容,或者資源自身
5)擴充套件首部。
--規範中沒有定義的新首部
常用的首部如下:
Date:Tue,3Oct 1997 02:16:03 GMT ------伺服器產生響應的日期
Content-length:15040 ------實體的主體部分包含了15040位元組的資料
Content-type:image/gif ------實體的主體部分是一個GIF圖片
Accept:image/gif,image/jpeg,text/html ------客戶端可以接收GIF圖片和JPEG圖片以及HTML
長的首部行可以分為多行,提高可讀性,多出來的每行前面要有一個空格或製表符(tab),如:
Server: Test Server
Version 10 ------以一個空格或者製表符開始