【问题标题】:REST Api - Created resource redirectREST Api - 创建的资源重定向
【发布时间】:2016-01-01 02:24:33
【问题描述】:

我正在构建 REST API,当资源正常创建时,我返回 HTTP 201 Created 以及 Location 标头以指定该资源所在的位置。但是由于某种原因,http客户端没有重定向。

我为此使用 Postman。有人知道这个问题吗?

【问题讨论】:

    标签: rest google-chrome http http-headers postman


    【解决方案1】:

    简而言之,Location 标头不足以触发客户端重定向。它必须与 3xx HTTP 状态码结合使用。

    参考资料:

    1. https://en.m.wikipedia.org/wiki/HTTP_location
    2. Redirecting with a 201 created

    【讨论】:

    • 但它应该这样做
    • 根据HTTP spec,201 不应该这样做。我会在上面的答案中链接的问题的答案中推荐 303。
    • 不是 201 这样做,Location header 应该强制重定向
    • 这里是 HTTP 1.1 Spec about 201 201 Created 请求已完成并导致创建新资源。新创建的资源可以被响应实体中返回的 URI 引用,资源的最具体的 URI 由 Location 头字段给出。响应应该包含一个实体,其中包含资源特征和位置列表,用户或用户代理可以从中选择最合适的。
    • 正确。它说应包含 Location 标头以指示新资源的位置。但是,它并没有说客户端应该重定向。另一方面,3xx 响应规范确实对重定向有话要说。请参阅wikipedia 上的位置标头说明。
    【解决方案2】:

    这是期望与实际发生的事情不符的事情之一,人们认为的第一件事是“很好,不能正常工作”,正如其他 cmets 所建议的那样。

    Location 只是一个随机的标头,需要指示客户端(例如 Postman 或 curl 或其他任何东西)跟随它们。大多数默认情况下不会这样做,因为这是不合理的默认设置。

    YouTube 例如返回一些响应的正文和位置标签。一个例子是视频上传。他们通过 POST 发送视频的原始元数据来响应您的原始元数据,并且他们推送一个位置 URL,该 URL 也是上传视频的端点。如果客户只是随机重定向到那个你会很糟糕。

    您可以使用Paw 来制作“序列”,我相信它可以让您从标头中获取值以进行重用。 Runscope Ghostinspector 也可以做到这一点。

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 2019-12-29
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      相关资源
      最近更新 更多