没有'Access-Control-Allow-Origin'但仍在处理中

时间:2014-01-08 19:08:14

标签: javascript ajax cors

我有两个不同的服务器,每个服务器都有自己的域名。我正在从一台服务器到另一台服务器运行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');
    });
};

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这是对您的CORS的一个简单误解。

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

非简单的跨源请求(例如PUT或DELETE请求)将调用浏览器的“预检”(OPTIONS)请求,实质上是要求您的服务器“发送此请求是否可以?”只有当您的服务器正确确认时,才会发送基础请求。在CORS规范之前,这些类型的非简单的跨源浏览器请求是不可能的,因此对旧服务器或那些不想选择加入这些新的跨源请求的附加保护层。 / p>

请注意,还有其他因素会使跨源请求变得简单。