【问题标题】:Http allow header on different casesHttp 在不同情况下允许标头
【发布时间】:2016-02-05 03:50:23
【问题描述】:

我正在尝试创建一个有效的 Web 服务,但我对标头 ALLOW 以及他在不同场景中的 cors 版本有一些问题。

假设 GET /resource/42 有效并且标头 allow = 'GET,PUT'

以下情况我该怎么办:

1) 如果找不到资源 (401) ?

2) 如果资源需要 auth (401) ?

3) 如果资源不属于用户 (403) ?

4) 如果请求因缺少 api-version 标头而被拒绝 (400)?

现在,如果我将 'GET' 替换为 OPTIONS,我有完全相同的问题

也许我缺乏关于 HTTP 的知识,但我找不到完整而准确的文档。无论如何,谢谢你的帮助。

【问题讨论】:

    标签: rest http http-headers


    【解决方案1】:

    这是一个开始记录响应代码和方法类型的好地方,它是 rfc 规范:https://www.rfc-editor.org/rfc/rfc7231

    (完整的 HTTP 1.1 规范包含在 rfc 7230-7237 中)

    1. 找不到资源 - 通常最好返回 404,但如果您知道它是故意消失的,您可以返回 410。

    2. resource required auth - 通常是 403,(但授权是一个更大的主题)

    3. 资源不归用户所有 - 规范未涵盖资源所有权 - 您的应用程序可能希望提供其他人拥有的资源。响应仅描述状态。如果您允许提供资源,您可以发送基于 200 的常规响应。如果您在识别所有权后明确地只允许资源,并且您发现客户端没有识别为所有者,您可以发送 403 响应,或者如果您还想隐藏资源甚至存在的知识,您可以发送 404,它更多地取决于您的特定需求。

    4. 请求因缺少 api-version 标头而被拒绝 - 是的 400 适合此处。您可以在响应中包含一条消息,以解释为什么它被视为错误请求。

    对于 OPTIONS 请求,还有许多其他帖子讨论了与特定请求相关的响应代码,例如: https://stackoverflow.com/a/14703357/3417917 200 响应可用于传达可用于资源的选项,但如果您想传达请求不正确,则可以发送一般的 400 请求。

    【讨论】:

    • 完美,所以我会回答 4xx 的 OPTIONS 请求……我很确定 200 是强制性的。感谢您的帮助和链接
    猜你喜欢
    • 1970-01-01
    • 2020-09-17
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2021-12-02
    相关资源
    最近更新 更多