对于需要SSL / TLS的请求发送适当的HTTP响应是什么?

我正在devise一个RESTful API,其中一些调用是通过HTTP公开的,有些需要API密钥并通过HTTPSencryption。 我正在考虑如果HTTP请求发送到其中一个私有资源应该发送什么响应代码。 到目前为止唯一跳出来的是412 –先决条件失败 ,但是标准表明,先决条件是由请求者而不是服务器强加的。

对于这种情况,有没有适当的回答代码,或者我只需要放弃和做400

HTTP严格传输安全性是强制HTTP客户端使用HTTPS最安全的方法。

以前一个普通的build议是放弃连接,但这种做法已被删除,有利于HSTS (OWASP网站)。

我不能说这是否被HTTP客户端广泛接受,但是严格地说RFC,服务器应该回应:

HTTP/1.1 426 Upgrade Required Upgrade: TLS/1.0, HTTP/1.1 Connection: Upgrade 

资源:
http://tools.ietf.org/html/rfc2817#section-4.2

返回适当的错误代码将类似于403.4 – 所需的SSL 。

虽然没有明确logging在HTTP 1.1的RFC中 ,但这种行为确实符合这里列出的要求:

服务器了解请求,但拒绝履行。 授权不起作用,请求不应重复。 如果请求方法不是HEAD,服务器希望公开为什么请求没有被满足,那么它应该描述拒绝的原因。 如果服务器不希望将这些信息提供给客户端,则可以使用状态码404(Not Found)。

添加你自己的子代码(和SSL例子一样)在某些情况下可能会有所帮助,但是由于这个子代码对于第三方来说是没有意义的,所以我build议不要这样做。

所以,你最后的错误信息就像“403 – 私人资源”。 请注意,即使在缺lessAPI密钥的情况下,也不应该使用“401 – 未授权”,除非您的API密钥实际上可以在WWW-Authenticate标头字段中传输。

返回一个403的理由短语“ 需要HTTPS ”似乎是一个实际的select,我用什么。

请参阅https://en.wikipedia.org/wiki/HTTP_403

redirectREST API并不是一个好主意,尤其是您可能不知道如何或什么是使用您的服务。

只需发送一个redirect到相应的https:URI。

UPDATE

这是一个错误的答案 – 请参阅下面的评论