安全测试 - HTTP 参数
HTTP 参数
我们将在此讨论一些重要的 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 相当于 abs_path"/"。除了 reserved 和 unsafe 集合中的字符之外,其他字符都等同于它们的"%"HEX HEX"编码。
示例
以下三个 URI 等同于 −
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
内容编码
内容编码值表示在通过网络传递内容之前使用编码算法对其进行编码。内容编码主要用于允许压缩文档或以其他方式进行有用的转换而不会丢失身份。
所有内容编码值均不区分大小写。 HTTP/1.1 在 Accept-Encoding 和 Content-Encoding 标头字段中使用内容编码值。
示例
以下是有效的编码方案−
Accept-encoding: gzip 或 Accept-encoding: compress 或 Accept-encoding: deflate
媒体类型
HTTP 在 Content-Type 和 Accept 标头字段中使用互联网媒体类型,以提供开放且可扩展的数据类型和类型协商。所有媒体类型值均已在互联网号码分配机构 (IANA) 注册。以下通用语法指定媒体类型 −
media-type = type "/" subtype *( ";" param )
类型、子类型和参数属性名称不区分大小写。
示例
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 国家代码。