你不能同时拥有它:重定向和状态 200。
RFC2616说关于状态码 200:
10.2.1 200 正常
请求已成功。响应返回的信息取决于请求中使用的方法,例如:
- GET : 在响应中发送对应于请求资源的实体;
- HEAD:请求资源对应的实体头字段在响应中发送,不带任何消息体;
- POST:描述或包含动作结果的实体;
- TRACE:包含由终端服务器接收到的请求消息的实体。
因此,除了发送一些由用户代理解释的内容(例如 JavaScript)到浏览器之外,没有重定向的空间。
这是规范中关于使用状态码 301、302 或 303 进行重定向的部分:
10.3.2 301 永久移动
请求的资源已被分配一个新的永久 URI,并且任何将来对该资源的引用都应该使用返回的 URI 之一。如果可能,具有链接编辑功能的客户端应该自动将对 Request-URI 的引用重新链接到服务器返回的一个或多个新引用。除非另有说明,否则此响应是可缓存的。
新的永久 URI 应该由响应中的 Location 字段给出。除非请求方法是 HEAD,否则响应的实体应该包含一个简短的超文本注释,其中包含指向新 URI 的超链接。
如果收到 301 状态代码以响应 GET 或 HEAD 以外的请求,除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变发出请求的条件。
注意:当收到 301 状态码后自动重定向 POST 请求时,一些现有的 HTTP/1.0 用户代理会错误地将其更改为 GET 请求。
10.3.3 302 找到
请求的资源临时驻留在不同的 URI 下。由于重定向有时可能会改变,客户端应该继续使用 Request-URI 来处理未来的请求。此响应仅在由 Cache-Control 或 Expires 标头字段指示时才可缓存。
临时 URI 应该由响应中的 Location 字段给出。除非请求方法是 HEAD,否则响应的实体应该包含一个简短的超文本注释,其中包含指向新 URI 的超链接。
如果收到 302 状态代码以响应 GET 或 HEAD 以外的请求,除非用户可以确认,否则用户代理不得自动重定向请求,因为这可能会改变发出请求的条件。
注意:RFC 1945 和 RFC 2068 指定不允许客户端更改重定向请求的方法。然而,大多数现有的用户代理实现将 302 视为 303 响应,无论原始请求方法如何,都对 Location 字段值执行 GET。状态码 303 和 307 已被添加用于希望明确明确期望客户端做出何种反应的服务器。
10.3.4 303 见其他
可以在不同的 URI 下找到对请求的响应,并且应该使用该资源上的 GET 方法来检索。此方法的存在主要是为了允许 POST 激活脚本的输出将用户代理重定向到选定的资源。新的 URI 不是原始请求资源的替代引用。303 响应不能被缓存,但对第二个(重定向)请求的响应可能是可缓存的。
不同的 URI 应该由响应中的 Location 字段给出。除非请求方法是 HEAD,否则响应的实体应该包含一个简短的超文本注释,其中包含指向新 URI 的超链接。
注意:许多 HTTP/1.1 之前的用户代理不理解 303 状态。当与此类客户端的互操作性是一个问题时,可以使用 302 状态代码代替,因为大多数用户代理对 302 响应做出反应,如此处针对 303 所述。