【问题标题】:Javascript/JQuery ajax help needed需要 Javascript/JQuery ajax 帮助
【发布时间】:2012-05-28 18:06:18
【问题描述】:

我有点困惑,也许有人可以帮忙。

1) Javascript ajax 请求问题:我可以使用 XMLHttpRequest 直接向任何其他网站发出请求 - 而不是原始服务器?

2) JQuery ajax 请求问题:我可以使用 $.ajax 直接向任何其他网站发出请求 - 而不是原始服务器?

浏览网页时,我发现了一些关于由于 XSS(跨站点脚本)而可能会被禁止的内容,并且解决方法是使用服务器脚本语言和网络服务......但是不管这与我无关。

如果有人能回答,请帮忙!

【问题讨论】:

    标签: javascript jquery ajax xss


    【解决方案1】:

    我认为这里存在术语混淆。这与 XSS 无关。您无法使用 javascript 跨不同域(甚至是同一域上的 http 与 https)获取信息的原因是由于同源策略的存在,该策略的存在是为了防止在没有用户的情况下将受信任站点上的会话与不受信任的站点混淆直接干预(例如,通过选择访问不同的域)。 XSS 是一个完全不同的概念,它与将脚本注入页面以对用户具有恶意意图有关。

    至于跨域访问,所有希望都不会丢失。 XMLHttpRequest 与 .ajax() 无关,但 jsonp 允许跨域交换信息。自 HTML5 以来,还引入了postMessage(),它也允许跨域通信(以及与脚本通信!)

    【讨论】:

      【解决方案2】:

      这个question 讨论了同样的问题。您必须在服务器端获取其他站点的内容

      【讨论】:

        【解决方案3】:

        你不能跨站 ajax 请求。当您使用 jquery $.ajax 从不同域获取数据时,jquery 在幕后获取 url 并在文档的标题中附加一个包含。

        你是对的,出于安全原因,这是禁止的。

        【讨论】:

          【解决方案4】:

          jQuery 的.ajax() 是一种在一个函数中使用JavaScript 的XMLHttpRequest 的简单方法。最后还是XMLHttpRequest

          跨站点脚本 (XSS) 可防止所有跨域请求,但是可以,您可以使用服务器端解决方案来克服它。

          但是还有 JSONP,它确实让 JavaScript 执行跨站点请求,但仅限于有限的数据集。

          【讨论】:

          • JSONP 允许跨站点请求。 JSON 本身只是一种数据格式,类似于 XML。
          【解决方案5】:

          是的,可以使用 JSONP。像这样使用它:

          $.ajax({
             url: 'remote_url',
             type: 'post',
             dataType: 'jsonp',  //This does the trick
             success: function(remoteData){
                //Use remoteData here. Note it's already json parsed, so it's a javascript object
             }
          });
          

          希望对你有帮助

          【讨论】:

          • 一个jsonp请求不会被解析为json,返回的其实是任意的javascript,由浏览器在script标签中求值。通常,jsonp 用于获取已知返回有效 json 对象的内容,因此您的回调将处理该解析并执行它需要执行的操作。但是,jsonp请求返回一个json对象甚至将返回解析为json的假设是不正确的。
          【解决方案6】:

          最后,如果你调用的服务器已经实现CORS 并允许你的域调用它,你可以制作跨域ajax

          【讨论】:

            【解决方案7】:

            1) Javascript ajax 请求问题:我可以使用 XMLHttpRequest 直接向任何其他网站发出请求 - 而不是原始服务器?

            不,您尝试连接的域中的服务器必须接受cross-domain AJAX;否则,访问此数据的唯一方法是使用您服务器上的一个页面,该页面会将请求的数据代理给您的访问者。

            2) JQuery ajax 请求问题:我可以使用 $.ajax 直接向任何其他网站发出请求 - 而不是原始服务器?

            jQuery AJAX 技术实际上是对原生 XMLHttpRequest 的封装,所以如果正常的 XMLHttpRequest 有效,jQuery 也应该如此。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-10-05
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-05-16
              相关资源
              最近更新 更多