如何在浏览器fetch API中请求以点结尾的URL路径?
如何用Fetch API发送末尾带点的路径请求
问题描述
调用await fetch("/api/users/.")时,浏览器会自动按照RFC 3986第5.2.4节的规则移除末尾的点段,实际请求路径变成<base URI>/api/users/;尝试用%2e转义点得到/api/users/%2e,浏览器解码后仍会移除点段,问题依旧。而curl可以通过--path-as-is参数实现保留末尾点,但Fetch API没有类似配置。
可行解决方案
1. 添加空查询参数
在路径末尾追加?,构造如下请求:
await fetch("/api/users/.?")
浏览器会保留路径中的.,因为查询参数的存在会阻止路径规范化时移除末尾点段。服务器收到的路径为/api/users/.?,空查询参数不会影响业务逻辑,可直接忽略。
2. 双重编码末尾的点
将.进行双重URL编码:%252e(%25是%的编码,%2e是.的编码),构造路径:
await fetch("/api/users/%252e")
浏览器会先解码一次得到/api/users/%2e,服务器解析时会将%2e转换为.,最终请求路径即为/api/users/.。
内容的提问来源于stack exchange,提问作者ckunz
相关产品推荐
相关产品推荐

