【问题标题】:No 'Access-Control-Allow-Origin' but still processing没有“访问控制允许来源”但仍在处理
【发布时间】:2014-01-09 03:31:22
【问题描述】:

我有两台不同的服务器,每台都有自己的域。我正在从一台服务器到另一台服务器运行 ajax 脚本。我收到“No 'Access-Control-Allow-Origin'”错误,但我的服务器端脚本仍在处理请求。

我的服务器端脚本是否有原因处理 ajax 请求,即使它违反了 CORS?

更新:这是我的代码

var init,
    yourname,
    youremail,
    friendname,
    friendemail,
    message,
    url,
    data,
    request;

init = function() {
    yourname = $('input[name=yourName]').val();
    youremail = $('input[name=yourEmail]').val();
    friendname = $('input[name=friendName]').val();
    friendemail = $('input[name=friendEmail]').val();
    message = $('textarea[name=comments]').val();
    url = window.location.href;

    data ='yourName=' + yourname + '&yourEmail=' + youremail + '&friendName=' + friendname + '&friendEmail=' + friendemail + '&comments=' + message + '&url=' + url;

    request = $.ajax({
        type: 'POST',
        url: features.captureForm.processing,
        data: data,
        cache: false
    });

    request.done(function() {
        $('#form').css({'height':'0','overflow':'hidden'});
        $('#formHeader').find('h2').html('Thank you!');
        setTimeout(function(){
            HideShowForm.init();
            $('#form').css({'height':'auto'});
            $('#formHeader').find('h2').html('Send to a friend!');
        },3000);
    });

    request.fail(function() {
        console.log('Something went wrong');
    });
};

【问题讨论】:

  • 你能和我们分享你的代码吗?...
  • HTTP 服务器的类型会有所帮助。我的猜测,虽然可能是正在发送 OPTIONS 请求,但是您的服务器配置为允许服务器端脚本响应这些请求,但是,您的服务器端脚本不知道不做任何正常的事情,因为它不是t 查看 HTTP 动词.... 类似的东西。

标签: javascript ajax cors


【解决方案1】:

请求已发送,您的服务器将照常处理它。只有它的响应对客户端脚本不可用。这是 CORS 允许或拒绝任何事情的地方,而不是在发送请求时。

【讨论】:

  • 谢谢!这就是我需要的!
【解决方案2】:

这是您对 CORS 的简单误解。

如果请求是“简单”的跨域请求(GET、POST、HEAD),它与您的服务器在起草和实施 CORS 规范之前可能收到的任何基于浏览器的跨域请求没有什么不同. CORS 规范并非旨在保护您的服务器免受此类请求的影响:默认情况下它从未受到保护。如果您想丢弃此类请求,您可以查看服务器代码中的来源,如果您愿意,则根本不执行请求的操作。

非简单的跨域请求,例如 PUT 或 DELETE 请求,将调用浏览器的“预检”(OPTIONS) 请求,本质上是询问您的服务器“可以发送此请求吗?”只有当您的服务器正确确认时,才会发送底层请求。这些类型的基于浏览器的非简单跨域请求在 CORS 规范之前是不可能的,因此为旧服务器或不想选择这些新跨域请求的服务器提供了额外的保护层。

请注意,还有其他因素会影响跨域请求是否简单。

【讨论】:

  • +1,虽然你不应该看起源,但使用 CSRF 令牌。
  • 是的,这是另一种选择,而且更安全,因为可以欺骗来源。
  • 感谢您解决这个问题!从服务器端添加更多保护是有意义的,我误解了 CORS 操作。
猜你喜欢
  • 2018-10-18
  • 2017-07-21
  • 2016-06-27
  • 2016-12-18
  • 2016-03-24
  • 2018-04-12
  • 2020-01-21
  • 2017-02-11
相关资源
最近更新 更多