Cors 阻止 ajax 请求,尽管 Access-Control-Allow-Origin:*

Posted

技术标签:

【中文标题】Cors 阻止 ajax 请求,尽管 Access-Control-Allow-Origin:*【英文标题】:Cors blocking ajax request, despite Access-Control-Allow-Origin:* 【发布时间】:2019-10-02 16:44:57 【问题描述】:

iam 有一个 web 应用程序(用一些 jquery 用 php/codeigniter 编写),并且 iam 试图通过 Ajax 请求从 AspNet web 服务获取数据。

处理请求的 JQuery 代码如下所示:

    $.ajax(
            url: webServiceURL,
            type: "POST",
            dataType: "xml", 
            data: soapMessage,
            contentType: "text/xml; charset=\"utf-8\"",
            success: (response)=>
                    //process response
                );
            , 
            error: (error)=>
                console.log(error);
            
        );

问题是,它被 CORS 阻止了。我把它弄乱了一点,现在我得到了这个错误(在我没有发送正确的原始标头之前,现在我发送 *):

选项http://10.208.1.27/planws/Service.asmx 403(禁止)

从源“http://localhost”访问位于“http://10.208.1.27/planws/Service.asmx”的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。

即使我在服务器上配置 IIS 以响应“Access-Control-Allow-Origin:*”标头,我也会收到此错误。我还应该怎么做才能让它发挥作用?

Chrome 开发者工具/网络中的响应标头如下所示:

访问控制允许来源:*

当我在禁用网络安全的情况下运行 chrome 时,它​​运行得很好。

【问题讨论】:

您应该在后端代码中添加一个标头。 阅读此链接c-sharpcorner.com/article/enable-cors-in-asp-net-webapi-2 @RadonirinaMaminiaina 不,这无济于事;它是 response 标头,而不是请求标头。 OP 应该使用浏览器的“网络”选项卡来查看正在返回的标题;从错误来看,您似乎错误地配置了服务器。 @sarvon ks- 这没有帮助,我没有使用 Web api,我正在使用 Web 服务,并且工作方式略有不同 【参考方案1】:

如果您仅在本地设置中收到此错误,则可以使用第三方的 chrome 扩展。

Allow-Control-Allow-Origin 分机号。

这不是正确的方法,但你可以使用它。

【讨论】:

我需要在我的应用程序或后端解决这个问题。网络上的用户可以访问我的应用程序,因此仅在一个站点上解决此问题并不能解决问题【参考方案2】:

我建议您将 Web 服务响应从 xml 切换为 json 并使用 Jsonp。

$.ajax(
    url: webServiceURL,
    data: myData,
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    success: function()  alert("Success"); ,
    error: function()  alert('Failed!'); ,
    headers: 
              'Access-Control-Allow-Origin': '*'
          ,
);

【讨论】:

我使用的是 Asp Net Web Service,所以我坚持使用 Soap 和 xml。 @SkilledT 你可以试试这个solution

以上是关于Cors 阻止 ajax 请求,尽管 Access-Control-Allow-Origin:*的主要内容,如果未能解决你的问题,请参考以下文章

js ajax跨域被阻止 CORS 头缺少 'Access-Control-Allow-Origin'(转)

AJAX CORS 请求来源被阻止 - Java Web 服务

尽管配置了正确的 CORS 标头,但 301 响应“跨源请求被阻止”

跨域请求被阻止:(原因:缺少 CORS 标头“Access-Control-Allow-Origin”)

jQuery ajax 请求因为跨域而被阻止

跨域请求被阻止:CORS 标头“Access-Control-Allow-Origin”缺失