http - 分号作为 URL 查询分隔符

标签 http parsing url webserver query-string

虽然强烈建议(W3C source,通过 Wikipedia)让 Web 服务器支持分号作为 URL 查询项的分隔符(除了&符号之外),但它似乎并没有被普遍遵循。

例如比较

http://www.google.com/search?q=nemo&oe=utf-8

http://www.google.com/search?q=nemo;oe=utf-8

结果。 (在后一种情况下,分号是,或在撰写本文时,被视为普通字符串字符,就好像 url 是:http://www.google.com/search?q=nemo%3Boe=utf-8)

虽然我尝试的第一个 URL 解析库表现良好:

>>> from urlparse import urlparse, query_qs
>>> url = 'http://www.google.com/search?q=nemo;oe=utf-8'
>>> parse_qs(urlparse(url).query)
{'q': ['nemo'], 'oe': ['utf-8']}

接受分号作为分隔符的现状如何,潜在的问题或一些有趣的注意事项是什么? (从服务端和客户端的角度来看)

最佳答案

W3C Recommendation from 1999已经过时了。目前状态,根据2014 W3C Recommendation , 是分号现在作为参数分隔符非法了吗:

To decode application/x-www-form-urlencoded payloads, the following algorithm should be used. [...] The output of this algorithm is a sorted list of name-value pairs. [...]

  1. Let strings be the result of strictly splitting the string payload on U+0026 AMPERSAND characters (&).

换句话说,?foo=bar;baz 表示参数foo 的值为bar;baz;而 ?foo=bar;baz=sna 应该导致 foo 成为 bar;baz=sna (尽管从第二个 开始在技术上是非法的= 应转义为 %3D)。

关于http - 分号作为 URL 查询分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481664/

相关文章:

php - 如何在纯 PHP 中遵循 HTTP 重定向后获取最终 URL?

java - 解析C源文件

android - 多级 JSON 解析

asp.net - 具有 2 个不同域的 mvc3 路由

javascript - 如何使用jquery从url中提取主机名

c# - 替换 Flash 想要加载的图像

java - 在 HTTP Servlet 中正确地流式传输输入和输出

Spring Security/MVC/JPA --> 不支持请求方法 'POST'

Python - 从文件中提取文本实例

php - 重定向后查找网址并获取网站的IP地址