重复的Referrer标头 - HTTP.sys barfs

时间:2009-11-11 13:21:32

标签: flash http header http-referer ps3

我一直在网页上测试带有嵌入式Flash组件的PS3浏览器(NetFront),并且发出任何来自Flash的请求的方式似乎都存在相当严重的错误。浏览器正在添加引用者(referer),因此Flash播放器也会导致重复的标题。如果引用者标题相同,这实际上是正常的,但它们不是,因此请求由W2k8上的http.sys停止。这对我来说是一个主要问题,因为我有一个需要调用Web服务才能运行的Flash组件。

我们是否可以通过某种方式过滤或允许这些请求,可能会在此过程中删除重复的标头。

我们已经考虑过但我们的开发和实时环境不是最理想或不可能的一些解决方案:

  • 在服务器前添加代理以清理请求。
  • 在我们的负载均衡器上修复请求。这可能适用于我们的实时环境,但不适用于开发环境。同样使用负载均衡器来执行此操作是不好的做法,我们的运营团队也不会高兴:)
  • 通过flashvars在初始化期间将所有数据发送到Flash。可能通过Javascript进行任何更新/回调。这感觉很乱,并且需要一个平台的重要自定义代码。
  • 阻止浏览器或Flash发送引荐来源标头。这是可以接受的,但似乎没有办法在Flash或NetFront中启用它。

作为参考,以下请求将重现问题(复制并粘贴到Fiddler或其他工具中,我假设您正在运行IIS7,W2K8)。您应该收到400 Bad Request回复。

GET / HTTP/1.1
Host: localhost
Referer: http://localhost/NetFrontBrowser/
Referer: http://localhost/Flash/

非常感谢

4 个答案:

答案 0 :(得分:1)

如果我将这些数字编号为1-4,我会说2对您的实时环境最有意义,而如果您的开发环境无法与您的实时环境相匹配,则可能需要执行3次操作。数字1和2非常相似,因为负载平衡器基本上是反向代理。正如你所指出的那样,4号似乎是不可能的,如果没有等待索尼更新他们正在使用的浏览器和插件,这似乎不太可能,因为他们可能已经把它淘汰了,并且首先对它有很差的控制(有点像固件在我的韩国制造的电视上是在Palo Alto制作的,由于无法进行足够的沟通,他们花了10个月的时间来遵守GPL。

答案 1 :(得分:1)

Apache有模块mod_headers。这将解决您的问题,但如果您必须使用http.sys,那么我会尝试找到与mod_headers相当的东西。也许有人将mod_headers移植到http.sys?

我还会评估网址重写。我知道这是关于标题而不是URL,但http.sys的URL重写模块(如果存在)可能知道标题。

我假设http.sys的mod_headers或mod_rewrite等价物可以在http.sys barfs之前处理请求。

祝你好运!

答案 2 :(得分:1)

来自Windows DDK的

stmedit“演示了使用Windows过滤平台(WFP)替换传输控制协议(TCP)连接的字符串模式”。

一些额外的hackery将它转变为FSM,它可以转储除第一个引用字符串之外的所有字符串。

答案 3 :(得分:1)

将此添加到HTML将阻止在不需要时使用引用者。

<meta name="referrer" content="never">

如果答案好,请投票!