为什么我发送201状态,但在客户端上收到302状态

时间:2011-11-27 05:46:59

标签: asp.net http iis iis-7 status

在cgi服务器中,我像这样返回

print ('Status: 201 Created')
print ('Content-Type: text/html')
print ('Location: http://10.1.146.174/index.html')
print ('')
print ('\n')

这是201状态的解释: 请求已完成,并导致创建新资源。新创建的资源可以由响应实体中返回的URI引用,其中包含Location头字段给出的资源的最具体URL。原始服务器必须在返回201状态代码之前创建资源。如果无法立即执行操作,则服务器应以202(已接受)响应进行响应。

但实际上,在客户端,结果是:

HTTP/1.1 302 Redirect
Content-Type: text/html; charset=UTF-8
Location: http://10.1.146.174/index.html
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Sun, 27 Nov 2011 05:36:18 GMT
Content-Length: 153

我已多次搜索,但它不起作用。 ps:服务器是windows ii7 有人知道吗?

感谢

这似乎是iis7的问题。 现在有人如何配置iis7这个问题。 我删除了所有的isapi过滤器 但它仍然无效......

2 个答案:

答案 0 :(得分:1)

我不知道如何配置IIS7以通过其CGI模块返回带有Location标头的状态201。我读了一条评论,建议它是CGI和FastCGI模块的一个功能,而不是IIS本身,所以你可以改变你的集成。

我认为这是一个错误:RFC2616非常清楚,状态302的Location标头是重定向,但状态201不是。

我有CGI脚本,它返回状态201和Location头。当我使用IIS7 / CGIModule运行它们时,浏览器获得状态302并重定向,但是当我使用Apache 2.2运行相同时,浏览器获得状态201并且不重定向。因此,根据您的其他要求,将Web服务器切换到Apache可能是一种解决方案。

答案 1 :(得分:0)

这不是一个真正的IIS问题。您正在设置位置: HTTP标头,告知浏览器您要重定向到另一个网页。可能IIS正在拦截这个并正确填写HTTP响应,状态代码为302.只需删除该行,我认为这应该可以正常工作。

有关位置标题的更多信息: http://en.wikipedia.org/wiki/HTTP_location

如果您尝试设置REST类型响应,请将创建的资源的URL添加到文档正文,而不是标题。