1. 程式人生 > >HTTP協議訊息報頭,MIME

HTTP協議訊息報頭,MIME

HTTP請求由三部分組成,分別是:

請求行,訊息報頭,請求正文。



請求行(格式):

Method Request-URI HTTP-Version CRLF

Method:方法。

 GET     請求獲取由Request-URI所標識的資源。

 POST 在Request-URI所標識的資源後附加新的資料。

 HEAD 請求獲取由Request-URI所標識的資源的響應訊息報頭。

 PUT 請求伺服器儲存一個資源,並用Request-URI作為其標識。

 DELETE 請求伺服器刪除由Request-URI所標識的資源。

 TRACE 請求伺服器回送收到的請求資訊,主要用語測試或診斷。

 CONNECT 保留將來使用。

 OPTIONS 請求查詢伺服器的效能,或查詢與資源相關的選項和需求。

Request-URI:統一資源標識。

HTTP-Version:HTTP的版本。

CRLF:回車換行。(/r/n)

例:

GET /form.html HTTP/1.1 /r/n



HTTP響應

在接收和解釋請求訊息後,伺服器會返回一個HTTP響應訊息。

與HTTP請求類似,HTTP響應也是三個部分組成,分別是:

狀態行、訊息報頭、響應正文。

狀態行:

 狀態行由協議版本、數字形式的狀態程式碼、及相應的狀態描述,各元素之間以空格分隔。

 格式:   HTTP-Version Status-Code Reason-Phrase CRLF

 

 例如:   HTTP/1.1 200 OK /r/n

狀態程式碼:

 狀態程式碼由3位數字組成,表示請求是否被理解或被滿足。

狀態描述:

 狀態描述給出了關於狀態程式碼的簡短的文字描述。

狀態程式碼的第一個數字定義了響應的類別,後面兩位沒有具體的分類。

第一個數字有五種可能的取值:

- 1xx:  指示資訊—表示請求已接收,繼續處理。

- 2xx:  成功—表示請求已經被成功接收、理解、接受。

- 3xx:  重定向—要完成請求必須進行更進一步的操作。

- 4xx:  客戶端錯誤—請求有語法錯誤或請求無法實現。

- 5xx: 伺服器端錯誤—伺服器未能實現合法的請求。



狀態程式碼 狀態描述   說明

  200     OK   客戶端請求成功

  400        Bad Request  由於客戶端請求有語法錯誤,不能被伺服器所理解。

  401        Unauthonzed  請求未經授權。這個狀態程式碼必須和WWW-Authenticate報頭域一起使用

  403  Forbidden  伺服器收到請求,但是拒絕提供服務。伺服器通常會在響應正文中給出不提供服務的原因

  404  Not Found  請求的資源不存在,例如,輸入了錯誤的URL。

  500    Internal Server Error 伺服器發生不可預期的錯誤,導致無法完成客戶端的請求。

  503     Service Unavailable  伺服器當前不能夠處理客戶端的請求,在一段時間之後,伺服器可能會恢復正常。



HTTP訊息

 HTTP訊息由客戶端到伺服器的請求和伺服器到客戶端的響應組成。請求訊息和響應訊息都是由開始行,訊息報頭(可選的),空行(只有CTLF的行),訊息正文(可選的)組成。

 對於請求訊息,開始行就是請求行。

 對於響應訊息,開始行就是狀態行。



訊息報頭

 HTTP訊息報頭包括普通報頭、請求報頭、響應報頭、實體報頭。

 每一個報頭域都是由(名字+":"+空格+值)組成,訊息報頭域的名字是大小寫無關的。



 

 普通報頭:

  在普通報頭中,有少數報頭域應用於所有的請求和響應訊息,但並不用於被傳輸的實體,這些報頭域只用於傳輸的訊息。

 常用的普通報頭域:Cache-Control,Date,Connection,Pragma.

 

 

 

 請求報頭:

  請求報頭允許客戶端向伺服器端傳遞該請求的附加資訊以及客戶端自身的資訊。

 常用的請求報頭域:

  Accept

     Accept請求報頭域用語指定客戶端接受哪些型別的資訊。例如:Accept: image/gif,表明客戶端希望接受GIF圖象格式的資源;Accept: text/html,表明客戶端希望接受html文字。

  Accept-Charset

     Accept-Charset請求報頭域用於指定客戶端接受的字符集。例如:Accept-Charset: ios-8859-1,gb2312。如果在請求訊息中沒有設定這個域,預設是任何字符集都可以接受。

  Accept-Encoding

     Accept-Encoding請求報頭域類似Accept,但是它是用於指定可接受的內容編碼。例如:Accept-Encoding: gzip,deflate。如果請求訊息中沒有設定這個域,伺服器假定客戶端對各種內容編碼都可接受。

  Accept-Language

     Accept-Language請求報頭域類似於Accept,但是它是用於指定一種自然語言。例如:Accept-Language: zh-cn。如果請求訊息中沒有設定這個域,伺服器假定客戶端對各種語言都可接受。

  Authorization

     Authorization請求報頭域主要用於證明客戶端有權檢視某個資源。當瀏覽器訪問一個頁面時,如果收到伺服器的響應程式碼為401(未授權),可以傳送一個包含Authorization請求報頭域的請求,要伺服器對其進行驗證。

  Host

     Host請求報頭域主要用於指定被請求資源的Internet主機和埠號,它通常是從HTTP URL中提取出來的。

例如:http://www.sunxin.org/index.html。瀏覽器傳送的請求訊息中,就會包含Host請求報頭域,如下:Host: www.sunxin.org

後面沒有跟埠號,表明使用的是預設埠號80,如果埠號不是80,那麼就要在主機名後面加上一個冒號(":"),然後接上埠號,例如:

Host: www.sunxin.org:8080。  要注意的是,在傳送HTTP請求的時候,這個報頭域是必須的。

  User-Agent

     User-Agent允許客戶端將它的作業系統瀏覽器和其他屬性告訴伺服器。我們上網登陸論壇的時候,往往看到些歡迎資訊,其中列出了你的作業系統的名稱 和版本等等資訊。原因是:伺服器從User-Agent請求報頭域中獲取的這些資訊,自己編寫瀏覽器可以不用這個請求報頭域。伺服器就無法得知了。

 響應報頭

  響應報頭允許伺服器傳遞不能放在狀態行中的附加響應資訊,以及關於伺服器的資訊和對Request-URI所標識的資源進行下一步訪問的資訊。

 常用的響應報頭域:

  Location

     Location響應報頭域用於重定向接受者到一個新的位置。例如:客戶端所請求的頁面已不存在原先的位置,為了讓客戶端重定向到這個頁面新的位置,服務 器端可以發回Location響應報頭後使用重定向語句,讓客戶端去訪問新的域名所對應的伺服器上的資源。當我們在JSP中使用重定向語句的時候,伺服器 端向客戶端發回的響應報頭中,就會有Location響應報頭域。下面是Location響應報頭域的一個例子:Location: http://www.sunxin.org

  Server

     Server響應報頭域包含了伺服器用來處理請求的軟體資訊。它和User-Agent請求報頭域是相對應的,前者傳送伺服器端軟體的資訊,後者傳送客戶 端軟體(瀏覽器)和作業系統的資訊。下面是Server響應報頭域的一個例子:Server: Apache-Coyote/1.1

  WWW-Authenticate

     WWW-Authenticate響應報頭域必須被包含在401(未授權的)響應訊息中,這個報頭域和前面講到的Authorization請求報頭域是 相關的,當客戶端收到401響應訊息,就要決定是否請求伺服器對其進行驗證。如果要求伺服器對其進行驗證,就可以傳送一個包含了 Authorization報頭域的請求,下面是WWW-Authenticate響應報頭域的一個例子:WWW-Authenticate: Basic realm="Basic Auth Test!"

從這個響應報頭域,可以知道伺服器端對我們所請求的資源採用的是基本驗證機制。



 實體報頭

  請求和響應訊息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,大多數情況下,實體正文就是請求訊息中的請求正文或者響應訊息中的響應正 文。但是在傳送時,並不是說實體報頭域和實體正文要在一起傳送,例如:有些響應可以只包含實體報頭域。實體就好象我們寫的書信,在信中,我們可以寫上標 題,加上頁號等,這部分就相當於是實體報頭域,而我們所寫的書信的內容,就相當於實體正文。前面說講的普通報頭、請求報頭、響應報頭我們可以看成是寫在信 封上的郵編、接收者,傳送者等內容。

 實體報頭定義了關於實體正文(例如:有無實體正文)和請求所標識的資源的元資訊。

 所謂元資訊,是指描述其他資訊的資訊。

 

 常用的實體報頭域:

  Content-Encoding

      Content-Encoding實體報頭域被使用作媒體型別的修飾符,它的值指示了已經被應用到實體正文的附加內容編碼,因而要獲得Content- Type報頭域中所引用的媒體型別,必須採用相應的解碼機制。Content-Encoding主要用語記錄文件的壓縮方法,下面是它的一個例子: Content-Encoding: gzip。如果一個實體正文采用了編碼方式儲存,在使用之前就必須進行解碼。

  Content-Language

      Content-Language實體報頭域描述了資源所用的自然語言。Content-Language允許使用者遵照自身的首選語言來識別和區分實體。 如果這個實體內容僅僅打算提供給丹麥的閱讀者,那麼可以按照如下的方式設定這個實體報頭域:Content-Language: da。

如果沒有指定Content-Language報頭域,那麼實體內容將提供給所以語言的閱讀者。

  Content-Length

      Content-Length實體報頭域用於指明正文的長度,以位元組方式儲存的十進位制數字來表示,也就是一個數字字元佔一個位元組,用其對應的ASCII碼儲存傳輸。

      要注意的是:這個長度僅僅是表示實體正文的長度,沒有包括實體報頭的長度。

  Content-Type

      Content-Type實體報頭域用語指明發送給接收者的實體正文的媒體型別。例如:

   Content-Type: text/html;charset=ISO-8859-1

   Content-Type: text/html;charset=GB2312

  Last-Modified

      Last-Modified實體報頭域用於指示資源最後的修改日期及時間。

  Expires

      Expires實體報頭域給出響應過期的日期和時間。通常,代理伺服器或瀏覽器會快取一些頁面。當用戶再次訪問這些頁面時,直接從快取中載入並顯示給用 戶,這樣縮短了響應的時間,減少伺服器的負載。為了讓代理伺服器或瀏覽器在一段時間後更新頁面,我們可以使用Expires實體報頭域指定頁面過期的時 間。當用戶又一次訪問頁面時,如果Expires報頭域給出的日期和時間比Date普通報頭域給出的日期和時間要早(或相同),那麼代理伺服器或瀏覽器就 不會再使用快取的頁面而是從伺服器上請求更新的頁面。不過要注意,即使頁面過期了,也並不意味著伺服器上的原始資源在此時間之前或之後發生了改變。

      Expires實體報頭域使用的日期和時間必須是RFC 1123中的日期格式,例如:

   Expires: Thu, 15 Sep 2005 16:00:00 GMT

      HTTP1.1的客戶端和快取必須將其他非法的日期格式(也包括0)看作已過期。例如,為了讓瀏覽器不要快取頁面,我們也可以利用Expires實體報頭 域,設定它的值為0,如下(JSP):response.setDateHeader("Expires",0);

 
MIME, 全稱為“Multipurpose Internet Mail Extensions”, 比較確切的中文名稱為“多用途網際網路郵件擴充套件”。它是當前廣泛應用的一種電子郵件技術規範,基本內容定義於RFC 2045-2049

什麼是MIME型別?-在把輸出結果傳送到瀏覽器上的時候,瀏覽器必須啟動適當的應用程式來處理這個輸出文件。這可以通過多種型別MIME(多功能網際郵件擴充協議)來完成。在HTTP中,MIME型別被定義在Content-Type header中。

例 如,架設你要傳送一個Microsoft Excel檔案到客戶端。那麼這時的MIME型別就是“application/vnd.ms-excel”。 在大多數實際情況中,這個檔案然後將傳送給 Execl來處理(假設我們設定Execl為處理特殊MIME型別的應用程式)。在ASP中,設定MIME類 型的方法是通過Response物件的 ContentType屬性。


多媒體檔案格式MIME

最早的HTTP協議中,並沒有附加的資料型別資訊,所有傳送的資料都被客戶程式解釋為超文字標記語言HTML 文件,而為了支援多媒體資料型別,HTTP協議中就使用了附加在文件之前的MIME資料型別資訊來標識資料型別。

MIME意為多目Internet郵件擴充套件,它設計的最初目的是為了在傳送電子郵件時附加多媒體資料,讓郵件客戶程式能根據其型別進行處理。然而當它被HTTP協議支援之後,它的意義就更為顯著了。它使得HTTP傳輸的不僅是普通的文字,而變得豐富多彩。

每個MIME型別由兩部分組成,前面是資料的大類別,例如聲音audio、圖象image等,後面定義具體的種類。

常見的MIME型別

超文字標記語言文字 .html,.html text/html
普通文字 .txt text/plain
RTF文字 .rtf application/rtf
GIF圖形 .gif image/gif
JPEG圖形 .ipeg,.jpg image/jpeg
au聲音檔案 .au audio/basic
MIDI音樂檔案 mid,.midi audio/midi,audio/x-midi
RealAudio音樂檔案 .ra, .ram audio/x-pn-realaudio
MPEG檔案 .mpg,.mpeg video/mpeg
AVI檔案 .avi video/x-msvideo
GZIP檔案 .gz application/x-gzip
TAR檔案 .tar application/x-tar

Internet 中有一個專門組織IANA來確認標準的MIME型別,但Internet發展的太快,很多應用程式等不及IANA來確認他們使用的 MIME型別為標準類 型。因此他們使用在類別中以x-開頭的方法標識這個類別還沒有成為標準,例如:x-gzip,x-tar等。事實上這些型別運用的很廣泛,已經成為了事實 標準。只要客戶機和伺服器共同承認這個MIME型別,即使它是不標準的型別也沒有關係,客戶程式就能根據MIME型別,採用具體的處理手段來處理資料。而 Web伺服器和瀏覽器(包括作業系統)中,預設都設定了標準的和常見的MIME型別,只有對於不常見的 MIME型別,才需要同時設定伺服器和客戶瀏覽 器,以進行識別。

由於MIME型別與文件的字尾相關,因此伺服器使用文件的字尾來區分不同檔案的MIME型別,伺服器中必須定義文件字尾 和MIME型別之間的對應關係。而客戶程式從伺服器上接收資料的時候,它只是從伺服器接受資料流,並不瞭解文件的名字,因此伺服器必須使用附加資訊來告訴 客戶程式資料的MIME型別。伺服器在傳送真正的資料之前,就要先發送標誌資料的MIME型別的資訊,這個資訊使用Content-type關鍵字進行定 義,例如對於HTML文件,伺服器將首先發送以下兩行MIME標識資訊,這個標識並不是真正的資料檔案的一部分。

Content-type: text/html

注意,第二行為一個空行,這是必須的,使用這個空行的目的是將MIME資訊與真正的資料內容分隔開。

相關推薦

HTTP協議訊息報頭,MIME

HTTP請求由三部分組成,分別是: 請求行,訊息報頭,請求正文。 請求行(格式): Method Request-URI HTTP-Version CRLF Method:方法。  GET     請求獲取由Request-URI所標識的資源。  POST 在Request

http協議報頭

http請求由三部分組成,分別是:請求行、訊息報頭、請求正文 Http響應也是由三個部分組成,分別是:狀態行、訊息報頭、響應正文 http請求訊息和響應訊息都是由 開始行(對於請求訊息,開始行就是請求行,對於響應訊息,開始行就是狀態行), 訊息報頭(可選), 空行(只有CR

HTTP協議訊息報頭

   HTTP訊息由客戶端到伺服器的請求和伺服器到客戶端的響應組成。請求訊息和響應訊息都是由開始行(對於請求訊息,開始行就是請求行,對於響應訊息,開始行就是狀態行),訊息報頭(可選),空行(只有CRLF的行),訊息正文(可選)組成。     HTTP訊息報頭包括普通報頭、請求

HTTP協議對收發訊息的格式要求

每個HTTP請求和響應都遵循相同的格式。 一個HTTP包含Header和Body兩部分,其中Body是可選的。 HTTP響應的Header中有一個Content-Type表明響應的內容格式。 它的值如text/html;charset = utf-8。text/html則表示是網頁,charset =

關於HTTP協議訊息結構和狀態碼

訊息結構 HTTP使用統一資源識別符號(Uniform Resource Identifiers, URI)來傳輸資料和建立連線。一旦建立連線後,資料訊息就通過類似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴充套件(MIME

HTTP協議方法以及報頭分析

HTTP協議內容:HTTP URL、HTTP請求、HTTP響應和HTTP訊息。 HTTP超文字傳輸協議,是應用層協議。 HTTP是一個基於請求/響應模式的、無狀態的協議。 瀏覽器與伺服器通訊過程:客戶發起連線;客戶傳送請求;伺服器響應請求;伺服器關閉連線。 HTT

HTTPSQS:基於 HTTP協議的輕量級開源簡單訊息佇列服務

HTTPSQS(HTTP Simple Queue Service)是一款基於 HTTP GET/POST 協議的輕量級開源簡單訊息佇列服務,使用 Tokyo Cabinet 的 B+Tree Key/Value 資料庫來做資料的持久化儲存。   專案網址:http://code.google.co

http協議呼叫介面並反饋訊息的小例子

import java.io.IOException; import java.net.URLDecoder; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpRes

http訊息報頭

======================================================== http請求報頭 是如何生成的,主要有三種情況:  1.瀏覽器自動生成的請求。絕大部分正常使用者訪問都是這類情況,只要是使用者主動輸入網址訪問時傳送的htt

HTTP協議詳解之報頭

最近看《PHP核心技術與最佳實踐》一書,HTTP協議部分講解的清晰易懂,特此整理。 HTTP協議如何工作? 1. 建立連線 客戶機與伺服器需要建立連線。單機某個超連結,HTTP協議工作開始 2. 傳送請求 建立連線後,客戶機發送一個請求給伺服器。格

http協議訊息頭的用法作用

1.請求訊息 若干訊息頭:從第二行開始到第一個空行。作用:向伺服器傳遞客戶端的一些基本資訊a、Accept:瀏覽器可接受的MIME型別(Tomcat安裝目錄/conf/web.xml中查詢)b、Acc

#WEB安全基礎 : HTTP協議 | 0x12 MIME多用途郵件擴展以及多部分對象集合

上傳 -s 修改 text 我們 國內 又是 購物網站 更多 我們是怎麽讓郵件裏又有圖片又有文字的? 文字和圖片是兩個不同的類型,而郵件又是一個類型。 C語言的結構體允許用戶定義一個含有多類型的自定義類型 像這樣,看不懂沒關系,你只要知道郵件裏有多個類型就可以了 type

http協議報頭Cache-Control使用

最近,複習了下http協議。這裡主要回憶分享,學習下報頭中的Cache-Control的使用情況。 和Cache-Control一起使用的報頭屬性還有:Last-Modified: [UTC time]、ETag: [custom flag] 首先說明下Cache-Cont

HTTP協議簡介

put tle option 字符 http協議 一行 ava 客戶 ont 簡介 HTTP(HyperText Transfer Protocol, 超文本傳輸協議) 是訪問互聯網使用的核心通信協議,也是所有web應用程序使用的通信協議。消息模型:客戶端發送請求消息,服務

http協議的相關知識

per art title uri 方法 能夠 head 版本號 網絡資源 因為如今的工作設計的Web開發,因此了解了一下Http協議。在閱讀了這篇文章HTTP協議具體解釋(真的非常經典)後,總結了相關經常使用知識並列在此處以方便以後的查詢。 HTTP協議的主要

http協議

get keep -s 發送 modified mime family uri urlencode 1.概述 超文本傳輸協議,傳輸HTML文件。 用於定義WEB瀏覽器與WEB服務器之間交換數據的過程及數據本身的格式。 2、請求部分 1)請求消息行 GET /day08_0

HTTP協議入門

http協議入門 www web一、WWW基本概念WWW是World Wide Web的縮寫,意為萬維網。要了解什麽是萬維網,需要先了解超文本的概念。超文本就是一種用於顯示信息的文本,而在這個文本中可以包含有跳轉到其他文本的超鏈接,通過這些鏈接就可以訪問與文本相關聯的其它文本,就這樣通過鏈接的方式將兩個或多個

web-----------HTTP協議

信息 提交 請求方法 響應 http協議 常用 spa 名稱 地址欄 一, HTTP協議概述 HTTP全名(hypertext transport protocol),即超文本傳輸協議,這個協議規定了瀏覽器和萬維網服務器之間互相通信的規則。 HTTP是一個通信規則,規

web前端——1.http協議

ade blog ins 文檔 方式 requests 頭信息 字節流 過程 一 HTTP概述 HTTP(hypertext transport protocol), 即超文本傳輸協議.這個協議詳細規定了瀏覽器和萬維網服務器之間互相通信的規則. HTTP就是一個通信規則,通

前端—http協議

url編碼 tran 中文 相同 瀏覽器中 之間 做了 響應狀態 pro 一、http協議是什麽? 超文本傳輸協議:HTTP(hypertext transport protocol),即超文本傳輸協議。這個協議詳細規定了瀏覽器和萬維網服務器之間互相傳輸數據的規則。 H