首页 文章

HTTP 303是否可以接受其他HTTP方法?

提问于
浏览
4

RESTful Web Services鼓励使用HTTP 303将客户端重定向到资源的规范表示 . 它仅讨论 HTTP GET 上下文中的主题 .

这是否也适用于其他HTTP方法?如果客户端尝试 HTTP PUTDELETE 到非规范URI,是否可以接受(和/或推荐)返回HTTP 303?什么是最佳做法,为什么?

2 回答

  • 5

    此状态代码通常适用于任何HTTP方法 . 它主要用于允许POST操作的输出将用户代理重定向到选定的资源,因为这样做提供了与POST响应相对应的信息,其形式可以单独识别,添加书签和缓存,与原始内容无关请求 .

    Sourcehttp://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-21#section-7.4.4

  • 3

    我刚刚在书中发现了一个有趣的部分 . 根据第378页第 302 ("Found") 节:

    此状态代码是大多数与重定向相关的混淆的最终来源 . 它应该像307(“临时重定向”)一样处理 . 实际上,在HTTP 1.0中,它的名字是“暂时移动” . 不幸的是,在现实生活中,大多数客户端处理302就像303(“See Other”) . 差异取决于客户端在响应PUT,POST或DELETE请求获得302时应该做什么 . 如果您对详细信息感兴趣,请参阅下面的307条目 . 为解决这种歧义,在HTTP 1.1中将此响应代码重命名为“Found”,并创建响应代码307 .

    换句话说,HTTP 302被拆分为HTTP 303和307.接下来,在第380页上的部分 307 ("Temporary Redirect")

    对于GET请求,其中唯一要求的是服务器发送表示,此状态代码与303(“请参阅其他”)相同 . 307是对GET的良好响应的典型情况是服务器想要将客户端发送到镜像站点 . 但对于POST,PUT和DELETE请求,服务器需要采取某些操作来响应请求,此状态代码与303明显不同 . 响应POST,PUT或DELETE的303表示操作已成功,但响应实体 - 主体未与此请求一起发送 . 如果客户端想要响应实体主体,则需要向另一个URI发出GET请求 . 响应POST,PUT或DELETE的307表示服务器甚至没有尝试执行该操作 . 客户端需要将整个请求重新提交到Location头中的URI .

    换句话说, HTTP POST, PUT, DELETE are legal on HTTP 303, 307 . 上面的段落解释了预期的行为 .

    话虽这么说,我在这里引用这本书,而不是HTTP规范(对预期的行为持怀疑态度) .

相关问题