查询字符串查询字符串(英語:query string)是统一资源定位符 (URL) 的一部分,用于将值分配给指定的参数。查询字符串通常包括由Web浏览器或其他客户端应用程序添加到基本URL的字段,例如作为HTML文档的一部分、选择页面的外观或跳转到多媒体内容中的位置。[1][2] Web服务器可以通过基于URL路径从其文件系统读取文件或使用特定于资源类型的逻辑处理请求来处理超文本传输协议 (HTTP) 请求。在调用特殊逻辑的情况下,查询字符串以及URL的路径组件将可供该逻辑在其处理中使用。 结构包含查询字符串的典型URL如下:
当服务器收到对此类页面的请求时,它可以运行一个程序,将查询字符串(在本例中为 Web框架可能提供用于解析查询字符串中的多个参数的方法,这些参数由某些分隔符分隔。在下面的示例URL中,多个查询参数由与号“
查询字符串的确切结构尚未标准化。用于解析查询字符串的方法可能因网站而异。 网页中的链接可能具有包含查询字符串的URL。HTML定义了用户代理生成查询字符串的三种方式:
网页表单最初的用途之一是包含HTML表单(也称为Web表单)的内容。特别地,当提交包含字段
虽然没有明确的标准,但大多数Web框架允许多个值与单个字段关联(例如 对于表单的每个字段,查询字符串包含一对 该约定是W3C的建议。[8]在1999年的建议中,W3C建议所有Web服务器除了&符号分隔符之外还支持分号分隔符[9],以允许HTML文档的URL中的application/x-www-form-urlencoded查询字符串,而无需对&符号进行实体转义。自2014年起,W3C建议仅使用&符号作为查询分隔符。[10] 当表单提交方法为GET时,表单内容仅编码在URL的查询字符串中。当提交方法为POST时,默认使用相同的编码,但结果作为HTTP request body 提交,而不是包含在修改后的URL 中。 索引搜索在将表单添加到HTML之前,浏览器将 当输入到索引搜索控件的文本被提交时,它被编码为查询字符串,如下所示:
尽管 URL编码有些字符不能是URL的一部分(例如空格),而其他一些字符在URL中具有特殊含义:例如,字符 HTML5指定以下转换,用于使用“GET”方法向Web服务器提交HTML表单。以下是该算法的简要总结:
RFC 3986允许在查询字符串中使用与波浪号(“ 将SPACE编码为“ 例子把如下表单迁入HTML网页: <form action="/cgi-bin/test.cgi" method="get">
<input type="text" name="first" />
<input type="text" name="second" />
<input type="submit" />
</form>
用户在两个文本输入框中写入字符串“this is a field”和“ it clear ()?”并按提交按钮,程序 如果表单由CGI脚本在服务器上处理,则该脚本通常可以将查询字符串作为名为 跟踪用户状态接收查询字符串的程序可以忽略部分或全部查询字符串。如果请求的URL对应于文件而不是程序,则忽略整个查询字符串。但是,无论是否使用查询字符串,包括它的整个URL都会存储在服务器日志文件中。 这些事实允许使用查询字符串以类似于HTTP cookie提供的方式跟踪用户。为此,每次用户下载页面时,都必须选择一个唯一标识符并将其作为查询字符串添加到该页面包含的所有链接的URL中。一旦用户点击其中一个链接,就会向服务器请求相应的URL。这样,本页的下载就与上一页链接起来了。 例如,当请求包含以下内容的网页时: <a href="foo.html">see my page!</a>
<a href="bar.html">mine is better</a>
选择一个唯一的字符串,例如 <a href="foo.html?e0a72cb2a2c7">see my page!</a>
<a href="bar.html?e0a72cb2a2c7">mine is better</a>
添加查询字符串不会改变页面向用户显示的方式。例如,当用户点击第一个链接时,浏览器会向服务器请求页面 这样,来自该用户的任何后续页面请求都将携带相同的查询字符串 用于跟踪的查询字符串和 HTTP cookie 之间的主要区别是:
兼容性问题根据HTTP规范:[15]
如果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) 的字节数。[16] 参见
参考文献
|
Portal di Ensiklopedia Dunia