你能让 Flash URLRequest /web 服务在 IE 中的代理后面工作吗?
Posted
技术标签:
【中文标题】你能让 Flash URLRequest /web 服务在 IE 中的代理后面工作吗?【英文标题】:Can you make Flash URLRequest /web services work from behind a proxy in IE? 【发布时间】:2010-11-29 02:41:59 【问题描述】:我们有一个 Flash 应用程序,它连接到返回 json 数据的 WCF REST Web 服务。
我们将 URLRequest/URLLoader 与 POST 请求一起使用,而不是使用像 as3httpclientlib 这样的套接字的低级库。
该应用程序在正常的职责过程中运行良好,但是当我们在公司代理服务器后面时(即在 Internet Explorer 连接选项卡中定义了一个代理),一些请求返回 HTTP 状态代码 502 - DNS 查找失败。 (我们使用 Fiddler 来检查流量)。对于前几个请求,连接工作正常,但随后似乎停止了 - 出现这些 502 错误。
这可能是什么原因造成的?
我听说在企业环境中使用低级套接字编程可能会导致代理服务器出现问题 - 但这不是我们在这里使用的。
编辑:
经过进一步调查(使用提琴手),这是正在发生的事情:
-
发出第一个 POST 请求。
代理返回 407(缓存请求被拒绝 - 未经代理验证)
使用代理授权标头再次发出请求
代理返回 407 并带有某种返回代理身份验证标头。
再次发出原始请求 - 这次使用代理身份验证,但我的
授权标头(“授权:用户名:密码”)已被代理剥离,因此请求失败。
不知道如何解决这个问题...
编辑:
我在 actionscript 中使用 URLRequest 添加了我的授权标头。代理服务器正在使用 NTLM 身份验证。我添加的授权标头已在第 2 步中删除。
我发现如果我使用带有随机名称的标题,例如“安全”而不是“授权”,那么标题不会被删除。
【问题讨论】:
如果请求是从浏览器通过 fiddler 发出的,然后被代理拒绝,则不太可能是 flash 问题。您可以使用提琴手重播请求。你能重现它吗?您能否与您的代理管理员聊天并找出该请求失败的原因? 我会试一试.. 不幸的是现在不在工作.. 但明天会尝试。感谢您的回复。 您指的是什么“自定义授权标头”?你是怎么添加的?你怎么知道(或者是什么让你认为)代理剥夺了它?您是说它存在于出站请求中(#5)但没有到达服务器?或者它不存在于出站请求#5 中?使用什么类型的身份验证来响应 407(NTLM/Negotiate?) 【参考方案1】:如果 Fiddler 说“DNS 查找失败”,这可能意味着:
1> 您的计算机未配置为使用上游代理服务器 2> 您的计算机已配置为使用上游代理服务器,但该代理服务器已关闭或间歇性故障。
默认情况下,Fiddler 链接到您的上游代理。当它向您的代理发送请求时,它甚至不会尝试进行 DNS 查找。如果 Fiddler 说 DNS 查找失败,这意味着 Fiddler 尝试进行 DNS 查找,这意味着它甚至没有尝试使用代理,因为它没有配置,或者代理自动配置脚本下载失败。
当 Fiddler 未运行时,您在工具/Internet 选项/连接/LAN 设置中的代理设置是什么?
还值得一提的是,在 IE 中,Flash 使用与 IE 相同的代理设置。因此,除非您在 Flash 中遇到了一些非常罕见的错误,否则如果 IE 本身可以访问该站点,则无需担心 Flash 中的代理设置。
【讨论】:
Firefox 在本地出站连接上具有独立于 IE 的代理设置。 Chrome 与 IE 共享。 是的,错字已修复。虽然在 Fiddler 运行时,Firefox、Chrome、IE 等都会指向 Fiddler。【参考方案2】:简短的回答是否定的,你无法绕过它。 Flash 无法控制它在网络/代理配置方面如何从 Internet 申请资源。如果是这样,那将是一个重大的安全漏洞。
【讨论】:
【参考方案3】:为了解决我的问题,我发现如果我使用具有随机名称的授权标头,例如“安全”而不是“授权”,则授权标头不会被代理删除。
因为我控制服务器端并且能够指定我要查找的标头,所以这个解决方案对我有用。
【讨论】:
以上是关于你能让 Flash URLRequest /web 服务在 IE 中的代理后面工作吗?的主要内容,如果未能解决你的问题,请参考以下文章
Flash CS3:Comuniczione con un Web服务器
flash as3 图片展示将鼠标移到图片上就显示文字,然后再点击文字后移除并且显示下一张图片
Web 视图:在 loadRequest 中返回 nil 而在 URLRequest 中为 true
在 Web.load(URLRequest(url: URL(string: "https://google.com")!)) 中看不到任何内容