为包含"的网址返回的HTTP响应代码或%22?

时间:2015-06-05 09:18:12

标签: html error-handling http-status-code-404 rfc http-status-code-400

无效请求行的每http://tools.ietf.org/html/rfc7230#section-3.1.1个收件人应该回复 400 - 错误请求。因此,根据RFC,请求GET /cat".html HTTP/1.1应返回 400

我已经编写了一个服务器,只有在检测到"时才会返回该服务器。因此,通过telnet到我的服务器的请求只返回。

但是,当通过浏览器发送相同的请求时,浏览器会转换GET /cat".html HTTP/1.1并将其作为GET /cat%22.html HTTP/1.1发送。因此, 400 未被返回,而是 404 - Not Found ,因为文件cat%22.html不在我的公共目录中。

我很困惑RFC想要什么,因为它永远不可能通过浏览器发送GET /cat".html HTTP/1.1并返回错误代码404。由于cat".html是通过浏览器发送的错误请求,服务器应返回该请求,但除非您在服务器%22中将代码编写为错误请求,否则无法执行{{1}在文件名中有效,因此不会是 400错误请求,尽管它可能是 404 Not Found

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

HTTP规范说,HTTP请求,与规范是HTTP(仅限协议)的浏览器无关,不应包含"。如果尝试发送"您的浏览器url encoding,则%22因为"无效(它正在帮助您)。这对你来说是件好事吗?

  

永远不可能发送GET /cat".html HTTP / 1.1

您认为所有HTTP都是由浏览器生成的,但事实并非如此。许多技术和软件都会生成HTTP。并非所有人都会对您的请求进行URL编码。

顺便说一句:您不应该真的假设所有浏览器都会这样做,assume makes an ass-out-of-u-and-me;)

TL; DR

如果您的HTTP包含实际的",则返回 400

如果您的HTTP请求的网址已将"编码为%22,则该网址有效且应相应处理(可能会导致 404