gpt4 book ai didi

uri - 如果有的话,什么时候应该在 URL 中对像 { 和 } (大括号)这样的字符进行百分比编码?

转载 作者:行者123 更新时间:2023-12-02 05:32:27 24 4
gpt4 key购买 nike

根据RFC 3986以下字符是保留的,需要进行百分比编码才能在 URI 中使用,而不是用作保留用途::/?#[]@!$&'()*+,;=

此外,它还指定了一些专门未保留的字符:a-zA-Z0-9\-._~

似乎很清楚,通常应该对保留字符进行编码(以防止误解),而不对非保留字符进行编码(以提高可读性),但是应该如何处理不属于任一类别的字符?例如 {} 不会出现在任一列表中,但它们是标准 ASCII 字符。

向现代浏览器寻求指导,它们有时似乎有不同的行为。例如,考虑将 URL https://www.google.com/search?q={ 粘贴到网络浏览器的地址栏中:

  • Chrome 34.0.1847.116 m 不会更改它。
  • Firefox 28.0 不会改变它。
  • Internet Explorer 9.0 不会改变它。
  • Safari 5.1.7 将其更改为 https://www.google.com/search?q=%7B

但是,如果粘贴 https://www.google.com/#q={ (删除“搜索”并将 ? 更改为 #,使字符成为片段/哈希的一部分,而不是查询字符串)我们发现:

  • Chrome 34.0.1847.116 m 将其更改为 https://www.google.com/#q=%7B(通过 JavaScript)
  • Firefox 28.0 不会改变它。
  • Internet Explorer 9.0 不会改变它。
  • Safari 5.1.7 将其更改为 https://www.google.com/#q=%7B(在执行 JavaScript 之前)

此外,当使用 JavaScript 异步执行请求时(即使用 this MDN example 修改为使用 ?q={ 的 URL),该 URL 不会自动进行百分比编码。 (我猜这是因为 XMLHttpRequest API 假定 URL 已预先编码/转义。)

我想(出于与奇怪的客户要求相关的原因)在 URL 的文件名部分中使用 {} 而不会 (1) 破坏内容,并且理想情况下也无需(2)在现代浏览器的网络检查器/调试器的网络面板中创建难看的百分比编码条目。

最佳答案

(RFC 2396)

您应该对任何不明智部分进行编码,rfc 给出了原因。

<小时/>

来自 RFC 的其他信息

帐户 < > # %主要是任何控制字符 00-1F7F

在 rfc 中也标记为不明智:" { } | \ ^ [ ] `

如果您打算允许 #位于查询字符串值中,那么这是一种特殊情况,因为 #fragment identifier一个 uri。

一些不必编码的字符,无论是否编码都被接受,例如 ~

有 2 种普遍接受的编码(空格)%20+

Here's a fiddle以及我正在使用的一些测试用例。

关于uri - 如果有的话,什么时候应该在 URL 中对像 { 和 } (大括号)这样的字符进行百分比编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23064605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com