HTTP(超文本傳輸協議)

HTTP是訪問萬維網使用的核心通信協議,它使用一種基於消息的模型:客戶端送出一條請求消息,而後由服務器返回一條響應消息。該協議基本上不需要連接,雖然HTTP使用有狀態的TCP協議作爲它的傳輸機制,但每次請求與響應交換都自動完成,並且可能使用不同的TCP連接。

1、HTTP請求

所有HTTP消息(請求與響應)中都包含一個或幾個單行顯示的消息頭(header),然後是一個強制空白行,最後是消息主體(可選)。

每個HTTP請求的第一行都由三個以空格間隔的項目組成。

    一個說明HTTP方法的動詞。最常用的方法爲GET,它的主要作用是從Web服務器獲取一個資源。GET請求並沒有消息主體,因此在消息頭後的空白行中沒有其他數據。
    被請求的URL。URL由被請求的資源名稱,以及一個包含客戶端向該資源提交的參數的可選查詢字符串結成。在URL中,查詢字符串以?號標識。
    使用的HTTP版本。因特網上常用的HTTP版本爲1.0和1.1,多數瀏覽器默認使用1.1版本。

請求頭中的其他一些要點如下:

    Referer消息頭用於表示發出請求的原始URL(如,因爲用戶單擊頁面上的一個鏈接)。
    User-Agent消息頭提供與瀏覽器或其他生成請求的客戶軟件有關的信息。
    Host消息頭用於指定出現在被訪問的完整RUL中的主機名稱。如果幾個Web站點以相同的一臺服務器爲主機,就需要使用Host消息頭,因爲請求第一行中的URL內通常並不包含主機名稱。
    Cookie消息頭用於提交服務器向客戶發佈的其他參數。
    Accept用於告訴服務器客戶願意接受哪些內容,如圖像類型、辦公文檔格式等。
    Accept-Encoding用於告訴服務器,客戶願意接受哪些內容編碼。
    Authorization用於爲一種內置HTTP身份驗證向服務器提交證書。
    If-Modified-Since用於說明瀏覽器最後一次收到被請求的資源的時間。如果自那以後資源沒有發生變化,服務器就會發出一個帶狀態碼304的響應,提示客戶使用資源的緩存副本。
    If-None-Match用於指定一個實體標籤。實體標籤是一個說明消息主體內容的標識符。當最後一次收到被請求的資源時,瀏覽器提交服務器發佈的實體標籤。服務器可以使用實體標籤確定瀏覽器是否使用資源的緩存副本。

2、HTTP響應

每個HTTP響應的第一行由三個以空格間隔的項目組成。

    使用的HTTP版本。
    表示請求結果的數字狀態碼。
    一段文本形式的“原因短語”,進一步說明響應狀態。這個短語中可包含任何值,當前瀏覽器不將其用於任何目的。

響應頭中的其他要點如下:

    Server消息頭中包含一個標題,指明所使用的Web服務器軟件。有時還包括其他信息,如所安裝的模塊和服務器操作系統。
    Sett-Cookie消息頭向瀏覽器發送另一個cookie,它將在隨後向服務器發送的請求中由Cookie消息頭返回。
    Pragma消息頭指示瀏覽器不要將響應保存在緩存中。Expires消息頭還指出響應內容已經過期,因此不應保存在緩存中。當返回動態內容時常常會發送這些指令,以確保瀏覽器隨時獲得最新內容。
    幾乎所有的HTTP響應在消息頭後的空白行下面都包含消息主體,Content-Type消息頭表示這個消息主體中包含一個HTML文檔。
    Content-Length消息頭支付寶消息主體的字節長度。
    Cache-Control用於向瀏覽器傳送緩存指示(如no-cache).
    ETag用於指定一個實體標籤。客戶可在將來的請求中提交這個標識符,獲得和If-None_Match消息頭中相同的資源,通知服務器瀏覽器當前緩存中保存的是哪個版本的資源。
    Expires用於向瀏覽器說明消息主體內容的有效時間,在這個時間之前,瀏覽器可以使用這個資源的緩存副本。
    Location用於在重定向響應中說明重定向的目標。
    WWW-Authenticate用在帶401狀態碼的響應中,提供與服務器所支持的身份驗證類型有關的信息。

3、常用消息頭

    Connection--用於告訴通信的另一端,在完成HTTP傳輸後是關閉TCP連接,還是保持連接開放以接收其他消息。
    Content-Encoding--爲消息主體中的內容指定編碼形式(如gzip),一些應用程序使用它來壓縮響應以加快傳輸速度。
    Content-Length--用於規定消息主體的字節長度。(HEAD語法的響應例外,它在對應的GET請求的響應中指出主體的長度。)
    Content-Type--用於規定消息主體的內容類型。
    Transfer-Encoding--爲方便其通過HTTP傳輸而對消息主體使用的任何編碼。如果使用這個消息頭,通常用它指定塊編碼。

4、HTTP方法

    GET方法的作用在於獲取資源。它可以URL查詢字符串的形式向被請求的資源發送請求。這使得用戶可將一個包含動態資源的URL標註爲書籤,用戶自己或其他用戶可重複利用它隨後獲取的等價資源。
    POST方法的主要作用是執行操作。使用這個方法可以在URL查詢字符串與消息主體中發送請求參數。儘管仍然可以將URL標爲書籤,但書籤並不包含消息主體發送的任何參數。
    HEAD方法的功能與GET方法相似,不同之外在於服務器不會在其響應中返回消息主體。服務器返回的消息頭應與對應GET請求返回的消息頭相同。因此,這種方法可用於檢查某一資源在向其提交GET請求前是否存在。
    TRACE方法主要用於診斷目的。服務器應在響應主體中返回其收到的請求消息的具體內容。這種方法可用於檢測客戶與服務器之間是否存在任何操作請求的代理服務器。
    OPTIONS方法要求服務器報告對某一特殊資源有效的HTTP方法。服務器通常返回一個包含Allow消息頭的響應,並在其中列出所有有效的方法。

    PUT方法試圖使用包含在請求主體中的內容,向服務器上傳指定的資源。如果激活這個方法,可以上傳任意一段腳本並在服務器上執行該腳本來攻擊應用程序。

DELETE 刪除指定的資源。

COPY 將指定的資源複製到Destination消息頭指定的位置。

MOVE 瘵指定的資源移動到Destination消息頭指定的位置。

SEARCH 在一個目錄路徑中搜索資源。

PROPFIND 獲取與指定資源有關的信息,如作者、大小與內容類型。

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