跨域请求

时间:2011-07-12 14:26:55

标签: javascript html ajax xss

我有一个从mydomain.com加载的脚本文件,它向该域发出ajax请求。该脚本虽然加载在其他域上,但初始化它然后告诉它何时发出请求。我遇到了问题,因为浏览器认为这是一个跨域请求。我认为从脚本文件加载的任何域都能够将请求发回到该源?以下是一些代码示例:

someotherdomain.com处的页面:

<html>
    <head>
        <script type="text/javascript" src="http://mydomain.com/test.js"></script>
        <title>Cross-Domain Ajax Test</title>
    </head>
    <body>
        <h1>Test</h1>
        <p id="ajax-response"></p>
        <script type="text/javascript">
          Test.testAjax();
        </script>
    </body>
</html>

mydomain.com

加载的脚本
Test = { 
    testAjax: function() {
        //make ajax request to http://mydomain.com/myendpoint
    }
}

我做错了什么?什么是正确的方法?

4 个答案:

答案 0 :(得分:2)

  

我认为从脚本文件加载的任何域都能够将请求发回到该源?

没有。原点是总是 页面而不是脚本。

答案 1 :(得分:2)

  

我做错了什么?

您的脚本违反了跨域限制,方法是从一个域提供服务,但在另一个域上请求脚本。

  

什么是正确的方法?

有两种可能性:

  1. 将正在运行的脚本和被调用的脚本放在同一个域下。

  2. 使用dataType = "jsonp"来绕过限制。 jQuery将执行一些魔术(用<script src="mydomain.com/endpoint" />格式的内联脚本引用替换调用以使其工作。

答案 2 :(得分:1)

脚本的来源始终为mydomain.com!你可以使用Ajax代理(通过你的后端),或者最终 JSONP 是你的方式(更可能两者都取决于你的需要)。

答案 3 :(得分:0)

当您加载javascript时,就好像代码在someotherdomain.com上一样,您将遇到从该域到mydomain.com的跨域问题。