跨域问题Access to XMLHttpRequest‘*‘from origin ‘*‘ has been blocked by CORS..Access-Control-Allow-Origin

最新推荐文章于 2023-07-26 14:05:27 发布
最新推荐文章于 2023-07-26 14:05:27 发布 330349

跨域问题解决方案:CORS

Access to XMLHttpRequest at '*' from origin '*' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

从源' 本地路径 '访问 ' 目标路径(请求链接) '文本传输请求已被CORS策略阻塞:对预置请求的响应未通过访问控制检查:请求的资源上不存在'Access- control - allow - origin '报头。

错误原因:

本地路径和目标路径不是同一个域名下引起的跨域问题,并且,就算两个域名是同一个一级域名不同二级域名的时候,例如 a.baidu.com b.baidu.com 是属于 不同域 的,也是会出现这个问题

出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非响应报文包含了正确CORS响应头。

注:这段描述不准确,并不一定是浏览器限制了发起跨站请求,也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。

CORS (跨源资源共享)是一个系统,由传输 HTTP标头 组成,用于确定浏览器是否阻止前端JavaScript代码访问跨源请求的响应

同源安全政策 禁止以资源跨域访问。但CORS使Web服务器能够表示他们希望选择允许跨资源访问其资源。

跨域资源共享( CORS ) 是一种机制,它使用额外的 HTTP 头来告诉浏览器  让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器 不同的域、协议或端口 请求一个资源时,资源会发起一个 跨域 HTTP 请求

如,站点 http://domain-a.com 的某 HTML 页面通过 <img> 的 src 请求 http://domain-b.com/image.jpg。网络 上的许多页面都会加载来自不同域的CSS样式表,图像和脚本等资源。

跨域资源共享( CORS )机制允许 Web 应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行。现代浏览器支持在 API 容器中(例如 XMLHttpRequest Fetch )使用 CORS,以降低跨域 HTTP 请求所带来的风险。

解决方案:

1、如果跨域请求发生在相同一级域名不同二级域名之间

例如:a.baidu.com  和 b.baidu.com

跨域直接在邀请求的接口页面中强制设置域为一级域     document.domain = "baidu.com";

2、设置接口允许ajax跨域访问

在服务器aspx页面头文件里加:

<meta http-equiv="Access-Control-Allow-Origin" content="*" />

在web.config文件中的 system.webServer 节点下 增加如下配置

<system.webServer>  
    <httpProtocol> 
        <customHeaders> 
            <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> 
            <add name="Access-Control-Allow-Headers" value="x-requested-with"/> 
            <add name="Access-Control-Allow-Origin" value="*" /> 
        </customHeaders> 
    </httpProtocol> 
</system.webServer>

网上说的解决方案都是Internet Explorer 8 、9使用 XDomainRequest 对象实现CORS。是不是有这么复杂?于是博主各种百度寻找解决方案。最后发现在调用处指定 jQuery.support.cors = true; 这一句就能解决IE8、9的问题了

这句话的意思就是指定浏览器支持跨域。IE9以上版本的浏览器、谷歌、火狐等都默认支持跨域,而IE8、9却默认不支持跨域,需要我们指定一下。

jQuery.support.cors = true; var ApiUrl = "http://b.baidu.com"; $(function () { $.ajax({ type: "get", url: ApiUrl + "api/Charging/GetAllChargingData", data: {}, success: function (data, status) { if (status == "success") { alert("ok"); error: function (e) { alert("error"); complete: function () {

注:我这里设置的*是任意的请求都可以访问,如果需要限制替换成自己的访问地址就可以了。

参考资料:

 HTTP访问控制(CORS)   https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

CORS(跨源资源共享)      https://developer.mozilla.org/en-US/docs/Glossary/CORS

你有困难我帮忙,我住隔壁我姓王。----------------- 你隔壁的老王宣。

跨域问题Access to XMLHttpRequest‘*‘from origin ‘*‘ has been blocked by CORS..Access-Control-Allow-Origin 跨域问题解决方案:CORSAccess to XMLHttpRequest at '*' from origin '*' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header... 错误信息: Access to XMLHttpRequest at 'http://localhost:9090' from origin 'http://localhost:9090' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 翻译:【在http://localhost:9090对http://localhos
has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requested
add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET,POST'; 使用以下配置,生效。 if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*';
前端跨域问题的解决方案Access to XMLHttpRequest at ‘http..’ from origin ‘null‘ has been blocked by CORS policy
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script> <script> $.ajax({ url: 'http://127.0.0.1:...
前端报错Access to XMLHttpRequest at ’ ’ from origin’ 'has been blocked by CORS policy 一看CORS,差不多就是跨域问题了,而且我是前后端分离项目,URLA和URLB是前端和后端服务器地址。URLA和URLB也的确不属于同一个域,并且是使用了ajax。然后我就去网上查了解决方案。 主要有以下几种: 后端的controller增加 response.addHeader(“Access-Control-Allow-Origin”, “
在使用 vue 过程中经常会向服务器请求数据,但是时常会发生跨域的错误,具体什么是“跨域”请自行百度,这里说明一下怎么解决这个问题。 1、在 vue.config.js 文件中配置如下操作: 2、在 main.js 中修改baseURL 3、在服务器中配置允许跨域
这个错误是由于浏览器的同源策略(Same Origin Policy)所导致的,浏览器会阻止跨域的请求。在这种情况下,服务器没有设置跨域的响应头导致的。 要解决这个问题,需要在服务器端设置响应头 `Access-Control-Allow-Origin`,允许来自指定的域名的跨域请求。例如,如果你的前端页面部署在 `http://localhost:8080` 上,你可以在服务器端设置响应头如下: Access-Control-Allow-Origin: http://localhost:8080 上面的设置允许来自 `http://localhost:8080` 的跨域请求,如果需要允许多个域名的跨域请求,可以使用逗号分隔: Access-Control-Allow-Origin: http://localhost:8080, http://example.com 如果你没有权限修改服务器的响应头,也可以使用一些代理工具来解决跨域问题,例如 CORS Anywhere、nginx 反向代理等。
跨域问题Access to XMLHttpRequest‘*‘from origin ‘*‘ has been blocked by CORS..Access-Control-Allow-Origin 330320 跨域问题解决方案Access to XMLHttpRequest *from origin* has been blocked by CORS..Access-Control-Allow-Origin 21252