无效请求行的每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 。
我在这里缺少什么?
答案 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;)
如果您的HTTP包含实际的"
,则返回 400
如果您的HTTP请求的网址已将"
编码为%22
,则该网址有效且应相应处理(可能会导致 404 )