对于不安全的 POST 不可接受返回什么响应代码?
如果有人通过 http(即不是 https)访问我的服务器,那么我将 GET 请求重定向到 https 版本。
但我不知道如何处理 POST 和 PUT,因为我无法重定向它们(我相信浏览器在重定向时执行 GET 操作)。
我应该返回一个错误代码。 我应该返回什么 HTTP 错误代码?
If somebody accesses my server via http (i. e. not https) then I redirect GET requests to the https version.
But I don't know what to do with POST and PUT because I cannot redirect them (the browser does a GET on redirect I believe).
I should return an error code. What HTTP error code should I return?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
通常,您会返回 403 - Forbidden。对此的一般描述是“服务器理解该请求,但拒绝授权”。这适合你的情况。
Typically, you would return a 403 - Forbidden. The general description of this is "The server understood the request, but refuses to authorize it." which would fit your situation.
从技术上讲,正确的答案是使用 403.4,但子状态是它只是 IIS 的功能,而 nginx 不支持它。
所以我更愿意返回 418“我是一个茶壶”或 451“出于法律原因不可用”(因为不再使用纯文本 http 是不合法的,哈哈,只是开玩笑:)),这种状态非常奇特,应该触发客户弄清楚发生了什么。
nginx 可以选择返回类似文本的状态,
但是像 Chrome 或 Firefox 这样的浏览器无法正确处理这个问题,Chrome 会说 ERR_INVALID_RESPONSE,而 Firefox 会说“找不到文件”,这种行为并不能解决我们的目标。
所以我只返回状态 418。
Technically right answer is to use 403.4 but substatuses it's a IIS only feature and nginx doesn't support it.
So I've prefer to return 418 "I'm a teapot" or 451 "Unavailable For Legal Reasons" (because it's not legal to use plain-text http anymore, haha, just joking :)), this statuses quite exotic and should trigger client to figure out what going on.
nginx has an option to return status with text like
But browsers like Chrome or Firefox can't handle this right, Chrome says ERR_INVALID_RESPONSE and Firefox says "File not found" and this behavior doesn't solve our goal.
So I've stay with just returning status 418.
http://www.ietf.org/id/draft -ietf-httpbis-p2-semantics-18.txt 解释 HTTP 响应代码。如果您想要错误代码,如果无法在该 URL 上处理请求,只需返回 404 即可。
http://www.ietf.org/id/draft-ietf-httpbis-p2-semantics-18.txt explains HTTP response codes. If you want an error code, just return a 404 if requests cannot be serviced at that URL.