没有 CORS 或 JSONP 的跨域请求



我知道这个问题以前有人问过,但没有一个答案对我有用!我正在做一个学校项目,我想获取由学校服务器上的动态计划文件返回的 HTML(为我的项目解析它)。

我想要HTML的页面是:https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched

我认为没有为学校服务器文件启用 CORS,我不知道它是否支持 JSONP...

如何设置跨域请求以从此页面获取 HTML?

我试过:

$.ajax({
    type:'POST',
    url: 'https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched',
    headers: {
      'Access-Control-Allow-Origin': '*'
   },
   contentType: 'text/html',
   crossDomain:true
}).done(function( data ) {
});

我收到错误:

XMLHttpRequest 无法加载 https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched. 否 "访问控制允许源"标头存在于请求的上 资源。因此,不允许访问源"空"。回应 具有 HTTP 状态代码 501。

当我添加:

dataType:'jsonp'

我收到错误:

获取 https://telaris.wlu.ca/ssb_prod/bwckschd.p_disp_dyn_sched?callback=jQuery21108736664191819727_1416964243449&_=1416964243450 400 (错误请求) jquery.min.js:4send jquery.min.js:4n.extend.ajax jquery.min.js:4(匿名函数)

任何帮助将不胜感激!

浏览器强制执行"同源"访问控制,除非站点明确允许跨源请求(通过 CORS 或 JSONP)。 因此,如果您尝试访问的站点不允许跨源请求,则无法仅使用浏览器直接从站点获取数据。 浏览器正在强制执行目标站点请求的相同源限制。

这对服务器来说根本不是安全,因为有很多方法可以解决它。 它仅适用于来自浏览器的一种特定类型的访问(尽管一种特定类型的访问保护很有用)。

这意味着要将数据放入浏览器,您需要使用某种可以为您获取数据的第三方代理(浏览器除外)。 最常见的两种方法是:

  1. 您自己的服务器。 您请求自己的服务器从其他服务器获取一些内容。 然后,您的服务器从其他服务器获取数据,并在浏览器中将其返回给您。

  2. 代理服务器。 有一些预配置的代理服务器只是为了执行选项 #1 中描述的操作而构建的。 您可以使用代理服务或安装自己的代理服务器来执行此操作,或者将自己的 Web 服务器配置为具有此功能。

因此,您无法从协作浏览器中绕过跨源限制。 但是,您可以从服务器绕过它们。 这是因为 COR 限制仅在浏览器中实现。 它们不是服务器强制实施的限制。 浏览器询问目标服务器哪些 COR 策略正在运行,并仅在浏览器中强制执行这些策略。 向该服务器发出请求的其他一些服务器不需要注意 COR 策略。

我知道

当技术限制使生活更加困难时,这将是多么令人沮丧。

对于这样的情况,你可以尝试Javascript库:Xdomain
您可以在此处查看参考文章:http://hayageek.com/cross-domain-ajax-jquery-without-cors/
如果您有问题,YCombinator 讨论可能会有所帮助: https://news.ycombinator.com/item?id=8023844

另一种方法是,使用服务器获取 HTML 页面,并在需要时推送到应用程序。像这样的东西。假设您已将一个 iframe 添加为"my_external_content.php"。代码应该是

<?php
    $externalURL = "http://otherdomain.com";
    // requires fopen wrappers
    $externalData = file_get_contents($externalURL);
    echo $externalData;
?>
请参考SO

上的另一个问题以获取参考:规避同源政策的方法

希望这对您或处于相同情况的其他人有所帮助。

最新更新