W7 Pro IIS 7.5覆盖PHP位置:标头

Jan*_*rre 5 php iis rest http-headers

我正在用PHP创建RESTful API,并且遇到了问题。客户端将数据发布到服务器时,服务器应返回:

Status code 201 CREATED
Header Location with the location of the new object
Content-Type application/xml

<SomeXmlData></SomeXmlData>
Run Code Online (Sandbox Code Playgroud)

虚拟代码,在我的计算机上产生问题:

<?php
header("Location: http://google.no/",true,201);
header("Content-Type: application/xml;charset=iso-8859-1");

echo "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n";
echo "<Jada></Jada>";
?>
Run Code Online (Sandbox Code Playgroud)

HTTP结果是

HTTP/1.1 201 Created
Content-Type: text/html; charset=UTF-8
Location: http://google.no/
Server: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.5
X-Powered-By: ASP.NET
Date: Wed, 22 Aug 2012 13:52:57 GMT
Content-Length: 209

<head><title>Document Moved</title></head>
<body><h1>Object Moved</h1>This document may be found <a HREF="http://google.no/">here</a></body><?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Jada></Jada>
Run Code Online (Sandbox Code Playgroud)

由于位置标头,PHP自动向响应中添加一些HTML代码和HTML内容类型。

因此,我的api无法与其客户端一起使用。

编辑:IIS 7.5 Windows 7专业版

LSe*_*rni 5

不好意思,我很抱歉,但是请看这里:

出现位置标头时,阻止IIS更改响应

编辑:从未找到答案-我最终切换到Apache

似乎IIS已经很长时间进入了标头了:

http://forums.iis.net/t/1158431.aspx

这是IIS FastCGI模块中的错误。它将在Windows 7 RTM中修复。我们还正在研究使此修补程序可用于IIS 7的可能方法。

希望如果虫子是相关的(我希望他们是),如果你现在有FastCGI的,那么下面的修补程序可以工作。否则,切换到PHP非FastCGI模块也可能会起作用,并且可能比使用Apache抛出更为容易。

http://support.microsoft.com/kb/980363


Jan*_*rre 4

解决方案是创建一个 IIS 模块,在 FastCGI 完成后将标头“Custom-Location”重写为“Location”。

然后,FastCGI 根本不知道我们正在发送 Location 标头,并且它不会修改我的响应。

该模块:

string Location = context.Response.Headers["Custom-Location"] as string;
if (!string.IsNullOrEmpty(Location))
{
    context.Response.Headers.Remove("Custom-Location");
    context.Response.AddHeader("Location", Location);
}
Run Code Online (Sandbox Code Playgroud)

PHP:

header("Custom-Location: http://google.no",true,201);
header("Content-Type: application/xml");
echo "<xml></xml>";
Run Code Online (Sandbox Code Playgroud)

(仍然是虚拟代码,不是极其正确的代码:))