Javascript 如何进行跨域请求

Javascript 如何进行跨域请求,javascript,websocket,xmlhttprequest,cross-domain,Javascript,Websocket,Xmlhttprequest,Cross Domain,如您所知,web浏览器的安全性不允许进行跨域请求。我读过一本书,书中说,只有当您可以将文件放在服务器上时,才应该使用XMLHTTPRequest(意味着将要加载的页面放在相同的请求域中)。如果你不能-你应该寻找一个替代方案 我的问题是: XMLHTTPRequest的跨域替代方案是什么 那么WebSocket呢?该技术是否允许跨域请求 编辑: 我还是不清楚 例如,我从www.domain1.com获取页面,需要从www.domain2.com请求javascript。因此,拉入的页面应包括以下内

如您所知,web浏览器的安全性不允许进行跨域请求。我读过一本书,书中说,只有当您可以将文件放在服务器上时,才应该使用XMLHTTPRequest(意味着将要加载的页面放在相同的请求域中)。如果你不能-你应该寻找一个替代方案

我的问题是

  • XMLHTTPRequest的跨域替代方案是什么
  • 那么WebSocket呢?该技术是否允许跨域请求
  • 编辑: 我还是不清楚

    例如,我从www.domain1.com获取页面,需要从www.domain2.com请求javascript。因此,拉入的页面应包括以下内容:

    <script src="www.domain2.com/script.js"></script>
    
    
    
    避免跨域限制

    我可以使用JSONP,请求如下所示:


    但是:不一样吗?我只是从另一个领域拉js!它是否避免了跨域限制?

    执行跨域AJAX调用

    您的web服务必须支持方法注入才能执行JSONP

    您的代码看起来不错,如果您的web服务和web应用程序托管在同一个域中,那么它应该可以工作

    当您使用数据类型:'jsonp'执行$.ajax时,意味着jQuery实际上是在向查询URL添加一个新参数

    例如,如果您的URL是
    http://10.211.2.219:8080/SampleWebService/sample.do
    然后jQuery将添加?callback={some\u random\u dynamic\u generated\u method}

    这种方法更像是一种实际附加在窗口对象中的代理。这没有什么特别之处,但看起来确实是这样的:

    window.some_random_dynamically_generated_method = function(actualJsonpData) {
        //here actually has reference to the success function mentioned with $.ajax
        //so it just calls the success method like this: 
        successCallback(actualJsonData);
    }
    
    查看以下内容以了解更多信息


    您可以使用
    XMLHttpRequest
    对象进行跨域请求。这是通过一种叫做“跨源资源共享”的方式实现的。见:

    简单地说,当向服务器发出请求时,服务器可以使用
    accesscontrolalloworigin
    头响应,该头将允许或拒绝请求。浏览器需要检查此标题,如果允许,则将继续请求过程。如果没有,浏览器将取消请求

    您可以在此处找到更多信息和工作示例:


    JSONP是另一种解决方案,但您可能会说它有点黑客行为。

    如果您愿意传输一些数据,并且不需要保护(任何公共信息),您可以使用CORS代理,这非常简单,您不必更改代码或服务器端的任何内容(尤其是它不像雅虎API或OpenWeather那样是你的服务器)。
    我用它通过XMLHttpRequest获取JSON文件,效果很好。

    是的,谢谢。但是你能提供问题id编辑区的答案吗?我认为这也是一个小问题。不过,这并不妨碍我使用它!:D@CharlesWood不要天真…安全服务器将检查此标头的值,然后决定是否他请求是否应该被允许;@Leo是的,我不知道我在想什么:D