具有相同域页的iframe的Firefox跨源错误

时间:2014-12-12 12:56:02

标签: asp.net firefox signalr

我正在开发一个小型ASP.NET站点,其中包含一个包含

的UpdatePanel的简单页面
  • 固定大小的div,显示为模式弹出
  • 关闭它的按钮
  • 一个iframe,它的来源是来自同一个域的普通页面

域名为http://localhost:8080,代码如下:

<asp:UpdatePanel ID="Popup" UpdateMode="Conditional" runat="server">
<ContentTemplate>
    <div id="Container" class="modal" runat="server">
        <div>
            <asp:LinkButton OnClick="ClosePopup" runat="server" />
            <div>
                <iframe src="http://localhost:8080/somepage" />
            </div>
        </div>
    </div>
</ContentTemplate>

在Firefox中,只需打开和关闭弹出窗口就足以导致以下错误:

"Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:51057/2a5e6f1d3ba752cf/arterySignalR/poll?transport=longPolling&connectionToken=AQAAANCMnd8BF..."

我阅读了很多帖子,但它们似乎都处理实际的跨源请求,就代码而言,这不是这里的情况。我尝试在web.config中添加以下内容,但它没有任何区别:

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
  </customHeaders>
 </httpProtocol>

除了打开和关闭弹出窗口外,不会执行任何代码。消息出现后,似乎会触发ClosePopup事件,但这可能只是由某些VS2013延迟引起的。该站点不使用SignalR,但错误包含SignalR参考。

功能不受影响,但我想了解为什么会发生这种情况。该错误仅发生在Firefox(34)中。很明显SignalR参考是罪魁祸首,但为什么它首先出现在那里?有谁知道这可能导致什么?

1 个答案:

答案 0 :(得分:1)

Browser Link是Visual Studio 2013中引入的一项功能,它使用SignalR提供一些简洁的开发功能。 Here is a 3 minute video demonstrating what Browser Link does

浏览器链接不是尝试连接到您的网站,而是尝试与Visual Studio本身进行通信。除非您使用Visual Studio启动项目,否则不应出现此问题。

这解释了为什么更改web.config以允许CORS对此问题没有影响。我会小心普遍启用CORS,因为如果你不小心,这可能会让你遇到XSS漏洞。

Disabling Browser Link应该解决这个问题。你甚至可以selectively disable Browser Link