0

我在嵌入式 Jetty 应用程序中使用 Jersey。我有一个这样的重定向:

URI uri = URI.create(url);
return Response.seeOther(uri).build();

seeOther 是这样的:

public static ResponseBuilder seeOther(URI location) {
    ResponseBuilder b = status(Status.SEE_OTHER).location(location);
    return b;
}

但是,该重定向也有 303 代码。如果我明确设置位置并通过 200 OK 它不会重定向。

当我有 200 OK 状态时如何重定向页面?

4

2 回答 2

0

你不能。状态 301/302/303/307 是向客户端发送信号重定向的 http 方式。

机制如下:

  1. 客户端访问服务器上的资源
  2. 服务器响应状态 307 和 location: header 指向重定向目标
  3. 客户端访问由 location: header 提供的 URI。
  4. 这一次,服务器通常会返回状态为 200 的所需内容。但这不是您的代码的内容。

如果您忽略 307(或 301/302/303)状态码,客户端将根本无法理解它应该如何处理 location: 标头。

有关状态码的预期行为的详细信息,请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html - 您可能还会发现 301 (MOVED) 或 307 (TEMPORARY_REDIRECT) 涵盖了大多数情况。303(SEE_OTHER)在我的经验中很少见。

于 2013-10-21T12:42:56.643 回答
0

我会说这是发送303的 http 重定向的预期行为,

于 2013-10-21T12:11:08.680 回答