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 响应“跨源请求被阻止”