带有Accept标头的URLRequest:放入请求主体,而不是覆盖默认请求标头

时间:2012-02-13 17:54:45

标签: flash actionscript-3 firefox header

协作项目有一个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参数。

所以,有两个问题:

  1. 是否可以真正覆盖通过Firefox打开的SWF的默认HTTP标头?我们有什么不对吗?

  2. 重用此HTTP工具是一种更好的做法,还是我们需要坚持使用其他参数并开始将网址重写为/api/someObject.<json|xml>/123等内容?

1 个答案:

答案 0 :(得分:0)

var acceptHeader:URLRequestHeader = new URLRequestHeader("Accept", "application/json");

这对我们有用。谢谢