为需要SSL / TLS的请求发送的正确HTTP响应是什么

时间:2010-03-31 16:43:42

标签: http rest ssl https httpresponse

我正在设计一个RESTful API,其中一些调用是通过HTTP公开的,有些需要API密钥和HTTPS加密。我正在考虑如果HTTP请求被发送到其中一个私有资源,应该发送什么响应代码。到目前为止,唯一突然出现的是 412 - Precondition Failed ,但标准表明前提是由请求者而不是服务器强加的。

这种情况是否有适当的响应代码,或者我只是需要放弃并执行 400

5 个答案:

答案 0 :(得分:27)

我不能说这是否被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

答案 1 :(得分:6)

要返回的相应错误代码与403.4 - SSL required类似。

虽然未在RFC for HTTP 1.1中明确记录,但此行为符合其中列出的要求:

  

服务器理解请求,但拒绝履行请求。授权无效,请求不应重复。如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因。如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到)。

在某些情况下,添加自己的子代码(与SSL示例一样)可能会有所帮助,但由于此子代码对第三方没有意义,我建议不要使用它。

因此,您的最终错误消息将类似于“403 - 私有资源”。请注意,即使在缺少API密钥的情况下,也不应使用“401 - Unauthorized”,除非您的API密钥实际上可以在WWW-Authenticate头字段中传输。

答案 2 :(得分:6)

强制HTTP客户端使用HTTPS的最安全方法是HTTP Strict Transport Security

以前常见的建议是放弃连接,但是practice has been removed in favor of HSTS(OWASP网站)。

答案 3 :(得分:4)

使用原因词组“ HTTPS必需”返回 403 似乎是一个实用的选项和我使用的内容。

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

重定向REST Api并不是一个好主意,尤其是因为您可能不知道如何或什么消耗您的服务。

答案 4 :(得分:0)

只需将重定向发送到相应的https:URI。

<强>更新

这是一个错误的答案 - 见下面的评论