1. 程式人生 > >HTTP請求和響應1:概述

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 ------以一個空格或者製表符開始