【问题标题】:Which parts of a URL must be encoded?URL 的哪些部分必须编码?
【发布时间】:2025-12-04 01:05:03
【问题描述】:

使用POST 既简单又自动:只需使用application/x-www-form-urlencodedmultipart/form-data 或其他。

相反,GET 请求中应编码哪些部分?

整个查询字符串?只有参数值而不是名称?还有片段

也许还有路径?但我很确定我不应该对 hostscheme 进行编码(国际域有编码和规范,如日语等)。

因此问题更多是关于 URI ????


我很惊讶在 SO 以及互联网上都没有找到明确的具体答案。

【问题讨论】:

  • “互联网工程任务组 (IETF) 是首要的互联网标准机构”。他们发布 RFC,所以Search RFC URI

标签: http url encoding uri urlencode


【解决方案1】:

我们必须对可能包含符号非ASCII字符的url部分(不包括域名)进行编码,不包括斜杠“/”和使用的操作数通过查询字符串(?、= 和 &)。

注意:如果您将 url 的所有第二部分编码在一起,包括斜杠和查询字符串使用的操作数,这部分将被视为一个值,并且 url 可能不会正常工作。

【讨论】:

  • 所以列表是:parameter-names(不包括"&"),parameter-values(不包括"="),path-parts (不包括"/")和片段(不包括"#");正确的?所以理论上,像 encodeURI (JS) / rawurlencode (PHP) / URLEncoder (Java) / urllib.urlencode (Python) / etc 这样的函数/类在传递给它们URI,我想?
  • 是的,这是完整的列表,是的,这些函数中的大多数应该同时处理所有内容并且可以完美地工作,除非您使用排除的符号之一作为值(例如,如果您在查询字符串值中重新传递斜线,在这种情况下,这些函数会将斜线视为路由分隔符,但实际上它是查询字符串值)。这是一个非常罕见的案例,但在技术上是可行的。
最近更新 更多