W7专业版IIS 7.5覆盖PHP地点:包头(W7 Pro IIS 7.5 overwrites P

2019-06-27 06:37发布

我PHP创建一个RESTful API,并且遇到了问题。 当客户端发布数据到服务器,服务器将返回:

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

<SomeXmlData></SomeXmlData>

虚拟代码,生产机上的问题:

<?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>";
?>

该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>

PHP自动添加因为位置报头的某些HTML代码,并且HTML内容类型的响应。

正因为如此,我的API不会与客户合作。

编辑:IIS 7.5的Windows 7专业舞台

Answer 1:

该解决方案是创建一个IIS模块,是重写头“定制位置”“位置”的FastCGI完成后。

然后,将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);
}

PHP:

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

(还是假的代码,不正确的极端代码:))



Answer 2:

对不起,我要承担坏消息,但在这里看看:

从当Location头存在更改响应防止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



Answer 3:

我有类似的问题,在IIS 8.5 WP REST API。 下面的HTML

<head>
    <title>Document Moved</title>
</head>
<body>
    <h1>Object Moved</h1>
    This document may be found 
    <a HREF="[url-from-location-header]">here</a>
</body>

在与返回的每个JSON开始加入Location标头和状态201 CreatedContent-Type变更为text/html; charset=UTF-8 text/html; charset=UTF-8

添加cgi.rfc2616_headers = 1在php.ini导致与:

  • 洁身(JSON)不添加HTML
  • 正确 “的Content-Type”
  • “位置”头失踪
  • 状态chaged到200 OK

我不会把这个解决方案,这更是对更换一个问题。 幸运的是,在我的处境这一新的问题比原来的要小。



文章来源: W7 Pro IIS 7.5 overwrites PHP Location: Header