我最近遇到了一个服务器,它正在发送一个如下所示的Location头(用于重定向):
Location: http://www.example.com/something.ext?auth=123|123
当我尝试在我的Java程序中使用它时,它会抱怨“查询中存在非法字符”并失败。
服务器做错了什么?这合法吗?
答案 0 :(得分:2)
使用转义:
|
已使用%7C
转义,因此您的网址变为:
Location: http://www.example.com/something.ext?auth=123%7C123
根据{{3}}的 Location
标头定义为:
Location = "Location" ":" absoluteURI
每HTTP/1.1:
有关URL语法和语义的确切信息,请参阅“统一资源标识符(URI):通用语法和语义”,RFC 2396
RFC 2396已被HTTP/1.1淘汰,这需要转义某些字符(请参阅RFC以获取最终信息)。提供正确的URL是来源的责任,所以是 - 在这种情况下,您有责任提供正确转义的URL。