gtd*_*gtd 45 rest ssl https http httpresponse
我正在设计一个RESTful API,其中一些调用是通过HTTP公开的,有些需要API密钥和HTTPS加密.我正在考虑如果HTTP请求被发送到其中一个私有资源,应该发送什么响应代码.到目前为止,跳出来的唯一一个是412 - Precondition Failed,但是标准表明前提是由请求者而不是服务器强加的.
对于这种情况是否有适当的响应代码,或者我只需要放弃并执行400?
Mic*_*icE 28
我不能说这是否被HTTP客户端广泛接受,但严格来说是RFC,服务器应该响应:
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade
Run Code Online (Sandbox Code Playgroud)
资料来源:http:
//tools.ietf.org/html/rfc2817#section-4.2
返回带有原因短语“需要 HTTPS ”的403似乎是一个实用的选择,也是我所使用的。
请参阅https://en.wikipedia.org/wiki/HTTP_403
重定向 REST Api 并不是一个好主意,特别是因为您可能不知道如何或什么正在消耗您的服务。
要返回的相应错误代码类似于403.4 - 需要SSL.
虽然RFC 1.1中没有明确记录,但此行为符合其中列出的要求:
服务器理解请求,但拒绝履行请求.授权无效,请求不应重复.如果请求方法不是HEAD并且服务器希望公开为什么请求没有得到满足,那么它应该描述实体中拒绝的原因.如果服务器不希望将此信息提供给客户端,则可以使用状态代码404(未找到).
添加自己的子代码(与SSL示例一样)在某些情况下可能会有所帮助,但由于此子代码对第三方没有意义,我建议不要使用它.
因此,您的最终错误消息将类似于"403 - 私有资源".请注意,即使在缺少API密钥的情况下,也不应使用"401 - 未授权",除非您的API密钥实际上可以在WWW-Authenticate头字段中传输.
强制HTTP客户端使用HTTPS的最安全方法是HTTP严格传输安全性.
以前一个常见的建议是放弃连接,但这种做法已被删除,有利于HSTS(OWASP网站).
| 归档时间: |
|
| 查看次数: |
14419 次 |
| 最近记录: |