查询字符串

查询字符串()是统一资源定位符 (URL) 的一部分,用于将值分配给指定的参数。查询字符串通常包括由Web浏览器或其他客户端应用程序添加到基本URL的字段,例如作为HTML文档的一部分、选择页面的外观或跳转到多媒体内容中的位置。

浏览器的地址栏显示带有查询字符串title=Query_string&action=edit的URL。]]

Web服务器可以通过基于URL路径从其文件系统读取文件或使用特定于资源类型的逻辑处理请求来处理超文本传输协议 (HTTP) 请求。在调用特殊逻辑的情况下,查询字符串以及URL的路径组件将可供该逻辑在其处理中使用。
结构
包含查询字符串的典型URL如下:

当服务器收到对此类页面的请求时,它可以运行一个程序,将查询字符串(在本例中为name=ferret)传递给该程序,不做任何更改。问号用作分隔符,不是查询字符串的一部分。

Web框架可能提供用于解析查询字符串中的多个参数的方法,这些参数由某些分隔符分隔。在下面的示例URL中,多个查询参数由与号“&”分隔:

查询字符串的确切结构尚未标准化。用于解析查询字符串的方法可能因网站而异。

网页中的链接可能具有包含查询字符串的URL。HTML定义了用户代理生成查询字符串的三种方式:

  • 通过元素生成HTML表单
  • 通过元素上的属性和构造的服务器端图像映射
  • 通过现已弃用的元素进行索引搜索

网页表单
最初的用途之一是包含HTML表单(也称为Web表单)的内容。特别地,当提交包含字段field1, field2, field3的表单时,字段的内容被编码为查询字符串,如下所示:

  • 查询字符串由一系列“字段-值”对组成。
  • 在每对中,字段名称和值由等号“=”分隔。
  • 该系列的“字段-值”对由与号“&”分隔(W3C不再推荐使用分号“;”,请参见下文)。

虽然没有明确的标准,但大多数Web框架允许多个值与单个字段关联(例如field1=value1&field1=value2&field2=value3)。

对于表单的每个字段,查询字符串包含一对field=value。 Web 表单可能包含用户不可见的字段; 提交表单时,这些字段将包含在查询字符串中。

该约定是W3C的建议。在1999年的建议中,W3C建议所有Web服务器除了&符号分隔符之外还支持分号分隔符,以允许HTML文档的URL中的application/x-www-form-urlencoded查询字符串,而无需对&符号进行实体转义。自2014年起,W3C建议仅使用&符号作为查询分隔符。

当表单提交方法为GET时,表单内容仅编码在URL的查询字符串中。当提交方法为POST时,默认使用相同的编码,但结果作为HTTP request body 提交,而不是包含在修改后的URL 中。

索引搜索
在将表单添加到HTML之前,浏览器将元素呈现为单行文本输入控件。输入到此控件中的文本作为查询字符串发送到服务器,附加到对基本URL或属性指定的另一个URL的GET请求。这样做的目的是允许Web服务器使用提供的文本作为查询条件,以便它们可以返回匹配页面的列表。

当输入到索引搜索控件的文本被提交时,它被编码为查询字符串,如下所示:

  • 查询字符串由一系列参数组成,通过将文本解析为该空间处的单词。
  • 该系列由加号“+”分隔。

尽管元素已被弃用,并且大多数浏览器不再支持或呈现它,但仍然存在索引搜索的一些痕迹。 例如,这就是浏览器URL的百分号编码中加号“+”特殊处理的来源(如今,随着索引搜索的弃用,%20几乎是多余的)。此外,如果查询字符串不包含等号“=”(根据CGI 1.1的第4.4节),一些支持CGI的Web服务器(例如Apache)会将查询字符串处理为命令行参数。一些CGI脚本仍然依赖并使用这种历史行为来嵌入HTML中的URL。

URL编码
有些字符不能是URL的一部分(例如空格),而其他一些字符在URL中具有特殊含义:例如,字符#可用于进一步指定文档的小节(或片段)。在HTML表单中,字符=用于分隔名称和值。URI通用语法使用URL编码来处理此问题,而HTML表单会进行一些额外的替换,而不是对所有此类字符应用百分比编码。
在实践中发现了对请求行长度的各种临时限制。建议所有HTTP发送方和接收方至少支持8000个八位字节的请求行长度。

如果URL太长,Web服务器将失败并显示HTTP状态码:414 Request-URI Too Long。

这些问题的常见解决方法是使用POST而不是GET并将参数存储在请求体中。请求体的长度限制通常远高于URL长度的长度限制。例如,默认情况下,POST大小限制在IIS 4.0上为 2 MB,在IIS 5.0上为 128 KB。该限制在Apache2上可使用LimitRequestBody指令进行配置,该指令指定请求体中允许的从 0(表示无限制)到2147483647 (2 GB) 的字节数。

参见

  • URI fragment

*

  • URL (Uniform Resource Locator)
  • Clean URL
  • Click identifier
  • Common Gateway Interface (CGI)
  • HTTP cookie
  • 超文本传输协议 (HTTP)
  • Semantic URL
  • URI scheme

*

  • 网络信标

参考文献

评论 (0)

  • 还没有评论,来抢沙发吧。