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专业版
不好意思,我很抱歉,但是请看这里:
编辑:从未找到答案-我最终切换到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
解决方案是创建一个 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)
(仍然是虚拟代码,不是极其正确的代码:))
| 归档时间: |
|
| 查看次数: |
3316 次 |
| 最近记录: |