(技術文章翻譯)HTTP消息(一)

  HTTP消息

     若是把http比做互聯網的快遞員,那麼http消息就是向全世界發送的包裹。在第一章,咱們展現了http程序如何彼此發送消息,從而使得它能工做,在這一章中,將告訴你關於http消息--如何建立他們,以及如何理解他們。在讀完這一章以後,你將會明白你本身編寫的http應用的大多數細節。尤爲是你將理解:java

消息如何傳輸web

http消息的三個組成部分(開始行,頭部行,主體行)服務器

request和response之間的不一樣之處post

request所支持的一些方法url

response 消息返回的狀態碼.net

http 頭部行作了些什麼代理

消息的傳輸

      http消息是http應用之間傳輸的數據塊,這些數據塊以一些元信息(meta-information)文本內容開始,其次是一些可選的數據。這些消息傳輸與客戶端和服務器之間。用術語"inbound","outbound","upstream","downstream"來描述信息傳輸的方向。http rfc code

上游和下游描述了消息的流動:全部消息都從上游流到下游.
向內/向外(inbound/outbound)
向內和向外指的是消息的請求和響應路徑:"向內"即"移向源服務器","向外"即"移向用戶代理(user agent)".orm

消息流向源服務器

http經常使用向內(inbound),向外(outbound)來描述傳輸方向,http消息向內移向源服務器,向外就是移向用戶代理(user agent)server

http3-1

消息向內移向源服務器,向外則返回客戶端。

消息流向下游

http消息流向像河流。不管它是request消息仍是response消息,全部的消息都在向下遊流動。消息的發送者也就是上游的接受者。

圖3-2,當發送request請求時代理1(proxy1)是上游對於代理3(proxy3)來講,反之,當發送response爲下游

http3-2

3-2

消息的組成部分

http消息是簡單的,格式化的數據塊。觀察一下圖3-3這個例子

http3-3

每個消息包含一個來自客戶端的request請求,和一個來自服務器的響應。他們主要包括三部分:一個開始行描述協議,一個頭部行包含屬性,和一個主體行包含數據。

開始行和頭部行是ascii的文本,一橫線分割。每一行結束,以雙字符序列,一個回車符(ascii13)和一個換行符(ascii10)結尾。尾部序列被寫做「CRLF」(表示換行)。它對指出http規範以換行(「CRLF」)結尾是有價值的,健壯的應用應該接受這個換行字符。一些比較陳舊的http應用不會發送這個換行字符。

實體,或者消息體是簡單的數據塊。和開始行和頭部行不一樣。消息體包括文本或者二進制數據,或者能夠爲空。

在例子3-3中,消息頭給你了一些關於主體的信息。content-type行告訴你主體信息,在3-3例子中。他是一個plain-text文本。content-length告訴你這個主體有多大。這裏表示有19個字節。

消息語法

全部的http消息分爲兩種類型:request消息,和response消息。request消息是請求web server的行爲。response消息將request請求的結果返回給客戶端(client)。request和response消息有相同的消息結構。圖-3-4展現了請求一個gif圖片的消息。這裏是一個規範的request消息

<method> <request-URL> <version>

<headers>

<entity-body>

http3-4

圖3-4

這裏是一個規範的response消息(注意:只有在開始行的語法不同)

<version> <status> <reason-phrase>

<headers>

<entity-body>

這裏是對這幾部分的快速描述

方法(method):

客戶端從服務器請求資源的的行爲。他們是一個簡單的詞,如:「get」,「head」,「post」,咱們將詳細討論這些方法的細節,在後續的章節中。

request-url:

一個完整的url名稱表示了所要請求的資源。關於url路徑的組成部分,若是你想直接和服務器交互,最好的方式就是用絕對路徑,去請求服務器如host/port的方式,在第二章有關於url的語法細節。

version:

版本號在http消息中被使用。他的規範以下:

HTTP/<major>.<minor>

這裏的major,minor表示整數。咱們將在這一章節小幅的討論http版本。

status-code:

一個三位數,用來描述在request請求中發生了什麼。每個狀態嗎的第一位表示一種狀態(「success」,「error」,等等);

詳盡的狀態嗎在http規範中列出,他們的意思,在這一章將會說明。

reason-phrase(緣由):

一個可讀數字狀態碼,包含全部的文本直到換行結束。每一種狀態碼錶明一種緣由在http規範中。這些緣由爲了令人們更好的理解。例如:response 消息中包含「HTTP/1.0 200 NOT OK」 and 「HTTP/1.0 200 OK」等同與請求成功。不然用其餘狀態碼來表示。

headers:

0或多個headers,每個名字後面跟着(:)後面加一個空格,而後再跟一個值。再跟一個回車換行。頭部行結束用一行空格和回車換行來表示。意味着頭部消息結束,主體開始。在http1.1中用一些標題來表示request和response是有效的。

entity-body:

在主體行包括一個任意大小的數據塊。並非全部的消息都包含一個實體。有時,一個消息頭只包含一個回車換行。咱們將在第15章中討論實體的細節。

在圖3-5中演示了假想的request和response消息

http3-5

相關文章
相關標籤/搜索