我的目标是获取一个以句点结尾的URL,因此一个以文字句点结束的URL:.
示例:
我预计下面的fetch调用会在站点的基本URI上产生HTTP GET
请求,路径为/api/users/.
(注意末尾的文字点(
await fetch("/api/users/.")
相反,它会导致请求路径<base URI>/api/users/
(注意缺少点(
RFC 3986的这一节描述了删除点段的行为:https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4
现在,我尝试用%2e
对点进行URI转义,给出了以下请求路径:/api/users/%2e
不幸的是,同样的行为也发生了,在Firefox和Chrome上进行了测试。
我很困惑如何使用浏览器的fetch
API在基于浏览器的环境中实现这一点。
我知道使用cURL就像指定一个额外的参数一样简单(否则使用cURL
也会发生同样的行为(:
curl --path-as-is "http://localhost:8080/api/users/."
然而,我还没有发现fetch
有任何这样的配置可能性。
使用%2e
对点段进行编码的解决方法确实解决了这个问题。
混乱的来源是:服务器可能决定将<url>/.
重定向到<url>
,因此可能会在网络面板上检查302 Found
,其中提供了不同的链接作为标头。
一开始我没有注意到这种行为,再加上其他一些问题,我很困惑,认为解决方法不起作用。