协作项目有一个Flash应用程序,它使用了一种API(正在进行的工作,一堆相关的PHP方法)。 API用于以JSON格式提供数据,但现在我们需要支持其他格式。有几种方法可以指示我们希望返回数据的格式。我想选择使用HTTP Accept标头以避免重新发明轮子。
在我们的Flash应用程序中,我们有一组标准代码负责设置Accept标头。
var request:URLRequest = new URLRequest(url);
var acceptHeader:URLRequestHeader = new URLRequestHeader("Accept", "application/json");
request.requestHeaders.push(acceptHeader);
request.method = URLRequestMethod.POST;
// add parameters, init a URLLoader, load the request etc.
这在Internet Explorer和Chrome / Chromium上工作正常 - 网页控制台显示标题已按预期更改(尽管小写它们)。但Firefox / Iceweasel表现出奇怪的行为。根据内置检查器中的headers部分,标准头只会被传递:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
运行Live HTTP标头(FF扩展)并从应用程序捕获请求会产生更奇怪的结果(省略不重要的标头,更改路径等):
POST /path-to-script.phtml?id=1 HTTP/1.1
Host: devserver.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
<...>
Referer: http://devserver.com/path-to-flash.swf
Content-Type: application/x-www-form-urlencoded
Accept: application/json
<POST payload>
实际有效负载是一个存根,因为URLRequest
不允许更改GET
方法的标头。有效负载和最后三个标题也因某种原因缩进,使它们成为请求主体的一部分而不是请求标题。
在Firefox中浏览POST请求 - 实际上在Debian上的Iceweasel 9.01中,如果重要的话,在Win7上的FF10中也是如此 - 揭示了具有相同症状的其他情况。即在community.adobe.com
上,但来自SWF的请求伴随着Accept标头和指示所需JSON格式的POST参数。
所以,有两个问题:
是否可以真正覆盖通过Firefox打开的SWF的默认HTTP标头?我们有什么不对吗?
重用此HTTP工具是一种更好的做法,还是我们需要坚持使用其他参数并开始将网址重写为/api/someObject.<json|xml>/123
等内容?
答案 0 :(得分:0)
var acceptHeader:URLRequestHeader = new URLRequestHeader("Accept", "application/json");
这对我们有用。谢谢