二、HTTP 参数

这次呢我们来过一下HTTP协议的一些重要的参数和它们在通讯时使用的语法格式。例如时间的格式,URL的格式等等。了解这些可以帮助你在开发HTTP客户端或者服务器程序时更好的构建请求和相应。

HTTP版本信息

HTTP使用<主版本号>.<子版本号>的数字模式来指示协议的版本信息。首先HTTP消息的版本由第一行中的HTTP-Version字段指示,下面是指示HTTP版本的基本语法

HTTP-Version = "HTTP" "/" 1*DIGIT "." 1*DIGIT

例如:

HTTP/1.0 或者 HTTP/1.1

统一资源标识符

统一资源标识符(URI)是简单格式化的,不区分大小写的字符串,包含名称,位置等,以标识资源,例如网站,Web服务等。下面是HTTP URI的基本语法:

URI = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

这里如果端口为空或未给定,端口80假设为HTTP,空的abs_path等效于abs_path为“/”。 除保留和不安全集合之外的字符相当于其““%”HEX HEX”编码。

例如

以下三个地址是等价的:

http://abc.com:80/~smith/home.html
http://ABC.com/%7Esmith/home.html
http://ABC.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

内容编码

设置内容编码的值将会指定在发送到服务前将使用何种算法来编码将要发送的内容,内容编码主要用于允许文档被压缩或以其他方式有效的转换而不会丢失标识。

所有的content-coding值都是不区分大小写的。

例如

以下都是合法的编码模式:

Accept-encoding: gzip

或者

Accept-encoding: compress

或者 

Accept-encoding: deflate

媒体类型

HTTP在Content-Type和Accept头域中使用Internet媒体类型,以提供开放和可扩展的数据输入和类型协商。 所有媒体类型的值都已注册到互联网号码分配机构(IANA)。 指定媒体类型的一般语法如下:

media-type     = type "/" subtype *( ";" parameter )

类型,子类型和参数属性名称不区分大小写。

语言标签

HTTP使用Accept-Language和Content-Language字段中的语言标签。 语言标签由一个或多个部分组成:主要语言标签和可能为空的一系列子标签:

language-tag  = primary-tag *( "-" subtag )

标签内不允许使用白色空格,所有标签都不区分大小写。

例如

示例代码包括:

en, en-US, en-cockney, i-cherokee, x-pig-latin

其中任何两个字母的主要标签是ISO-639语言缩写,任何两个字母的初始子标签都是ISO-3166国家代码。