什么是适当HTTP响应发送的请求,要求SSL/TLS
-
23-09-2019 - |
题
我设计的一个宁静的API其中的一些话都是公开通过HTTP,以及一些需要API密钥和密在HTTPS。我在考虑在什么样的回应代码应该发送,如果HTTP请求被送到一个的私人资源。迄今为止唯一的一个跳出我的是 412-前提条件失败, 但标准表示的先决条件是强加给请求者不服务器。
是否有一个适当的反应的代码这个状况还是我只是需要给和做 400?
解决方案
最安全的方式力HTTP客户使用HTTPS HTTP严格的运输安全.
以前的共同建议下降的连接,但这 实践中已被删除有利于劫持 (异的网站)。
其他提示
我不能说如果这是由广泛接受的HTTP客户端,但严格来说RFC,服务器应该响应:
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade
在适当的错误代码返回到将类似于 403.4 - 。SSL需要
虽然在 RFC未明确记载为HTTP 1.1 一>,该行为确实匹配的要求概述的有:
在服务器理解请求,但拒绝执行它。授权并不会帮助和请求不应该重复。如果请求方法不是头部和服务器希望公开为什么请求没有得到满足,它应该描述为在实体拒绝的理由。如果服务器不希望提供给客户端该信息,状态码404(未找到)可以被代替使用。
添加自己的子码(与SSL的例子)可能会在某些情况下有益的,但因为这子码没有意义给第三方,我会建议反对。
所以,你最终的错误信息会是类似“403 - 私人资源”。需要注意的是,即使在缺少API密钥的情况下,“401 - 未授权”。不应该被使用,除非你的API密钥实际上可以在WWW-Authenticate头字段发送
返回一个 403 与原因短语 “ HTTPS必需” 似乎是一个可行的选择,我用什么。
见 https://en.wikipedia.org/wiki/HTTP_403
重定向REST API是不是一个好主意,尤其是当你可能不知道,以怎样还是怎样被消耗你的服务。
只需发送重定向到对应的https:URI
<强>更新强>
在一个错误的答案 - 请参阅下面的注释