我有一个nw.js应用程序,我在其中使用iframe
标记来加载带有flash对象的外部页面。应用程序的所有流量都通过我写的TCP代理。我没有改变任何数据,只是做了一些监控。
var gui = require('nw.gui')
// set proxy to my tcp proxy server
gui.App.setProxyConfig('localhost:5050')
问题是,在请求游戏的.swf
文件时,它会返回403 Forbidden
错误并且游戏无法加载。
代理运行良好,当我在Chrome上使用它时,我可以加载游戏页面。在应用程序中,如果我没有设置代理,游戏加载正常。
我将.swf
文件的HTTP请求与Chrome与nw.js进行了比较,它们在HTTP标头中存在一些差异。
在Chrome中
GET http://foo.bar/sth.swf HTTP/1.1
Host: foo.bar
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
X-Requested-With: ShockwaveFlash/17.0.0.134
Accept: */*
Referer: STH_VERY_LONG
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
在nw.js
GET http://foo.bar/sth.swf HTTP/1.1
Host: foo.bar
Proxy-Connection: keep-alive
Referer: STH_VERY_LONG
User-Agent:
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,en-us;q=0.8,en;q=0.6
差
在nw.js中,它缺少Accept
和X-Requested-With
标头,User-Agent
标头为空。其他标题都是一样的。
我尝试将nwUserAgent
属性添加到iframe
标记,如文档here所示,但User-Agent
标题保持为空。
所以我想知道:
THX。
更新
已将问题精确定位到User-Agent
标题。见this issue