对于包含 " 或 %22 的网址,return 的 HTTP 响应代码是什么?
What HTTP Response code to return for urls containing " or %22?
每 https://www.rfc-editor.org/rfc/rfc7230#section-3.1.1 个无效请求行的接收者应该用 400 - 错误请求 响应。因此,根据 RFC,请求 GET /cat".html HTTP/1.1
应该 return 400.
我已经编写了一个服务器,它会 return 检测到 "
。因此,通过 telnet 向我的服务器发出的请求 return 就是这样。
但是,当通过浏览器发送相同的请求时,GET /cat".html HTTP/1.1
会被浏览器转换为 GET /cat%22.html HTTP/1.1
发送。因此,400 没有被 return 编辑,而是 404 - Not Found 因为文件 cat%22.html
不在我的目录中public 目录。
我对 RFC 的要求感到困惑,因为它永远不可能通过浏览器发送 GET /cat".html HTTP/1.1
并且错误代码为 404 returned。由于 cat".html
是通过浏览器发送的错误请求,因此服务器应该 return 但这是不可能的,除非您在服务器中将 %22
编码为错误请求,但是 %22
在文件名中是有效的,因此不会是 400 错误请求 尽管它可能是 404 Not Found.
我在这里错过了什么?
HTTP 规范说 HTTP 请求,与浏览器无关规范是 HTTP(仅协议),不应包含 "
。如果 you 尝试发送 "
你的浏览器是 url encoding 它到 %22
因为 "
无效(它正在帮助你)。所以这是好事吧?
it would never be possible to send GET /cat".html HTTP/1.1
您假设所有 HTTP 都是由浏览器生成的,但事实并非如此。许多技术和软件生成 HTTP。并非所有人都会 URL 为您编码您的请求。
顺便说一句:您不应该真的假设所有浏览器都会这样做,assume makes an ass-out-of-u-and-me ;)
TL;DR
如果您的 HTTP 包含实际 "
return 一个 400
如果您的 HTTP 请求 url 将 "
编码为 %22
这是有效的,应该进行相应处理(这 可能 导致 404)
每 https://www.rfc-editor.org/rfc/rfc7230#section-3.1.1 个无效请求行的接收者应该用 400 - 错误请求 响应。因此,根据 RFC,请求 GET /cat".html HTTP/1.1
应该 return 400.
我已经编写了一个服务器,它会 return 检测到 "
。因此,通过 telnet 向我的服务器发出的请求 return 就是这样。
但是,当通过浏览器发送相同的请求时,GET /cat".html HTTP/1.1
会被浏览器转换为 GET /cat%22.html HTTP/1.1
发送。因此,400 没有被 return 编辑,而是 404 - Not Found 因为文件 cat%22.html
不在我的目录中public 目录。
我对 RFC 的要求感到困惑,因为它永远不可能通过浏览器发送 GET /cat".html HTTP/1.1
并且错误代码为 404 returned。由于 cat".html
是通过浏览器发送的错误请求,因此服务器应该 return 但这是不可能的,除非您在服务器中将 %22
编码为错误请求,但是 %22
在文件名中是有效的,因此不会是 400 错误请求 尽管它可能是 404 Not Found.
我在这里错过了什么?
HTTP 规范说 HTTP 请求,与浏览器无关规范是 HTTP(仅协议),不应包含 "
。如果 you 尝试发送 "
你的浏览器是 url encoding 它到 %22
因为 "
无效(它正在帮助你)。所以这是好事吧?
it would never be possible to send GET /cat".html HTTP/1.1
您假设所有 HTTP 都是由浏览器生成的,但事实并非如此。许多技术和软件生成 HTTP。并非所有人都会 URL 为您编码您的请求。
顺便说一句:您不应该真的假设所有浏览器都会这样做,assume makes an ass-out-of-u-and-me ;)
TL;DR
如果您的 HTTP 包含实际 "
return 一个 400
如果您的 HTTP 请求 url 将 "
编码为 %22
这是有效的,应该进行相应处理(这 可能 导致 404)