跨域请求

今天在工作中遇到了跨域请求的报错的问题

跨域请求

本地域名:http://127.0.0.1:7001/
然后通过 ajax 从 www.xxxxxx.com 域名下面请求数据,然后报错:

Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://127.0.0.1:7001’ is therefore not allowed access. The response had HTTP status code 403.

在 network 面板中显示 Response 数据 Invalid CORS request
CORS: Cross-origin resource sharing (跨域资源共享),

当一个资源从与该资源本身所在的服务器不同的域或端口请求一个资源时,这个时候的请求就叫做跨域请求。

浏览器限制

浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非使用CORS头文件。

状态码:

403 forbidden :没有访问权限,服务器会受到请求,但是不会拒绝返回资源。
401 UnAuthorized: 未授权,表示该访问需要用户登录才能进行访问。

CORS

CORS是一个W3C标准,CORS需要浏览器和服务器同时支持。
CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。

所以只要服务器端同意跨域请求,那么就可以从别的网站跨域请求资源。只需要服务器那端做一些支持就行。

CSRF

Cross-site request forgery(跨站请求伪造)

理解: 攻击者盗用了你的身份,以你的名义发送恶意请求。

受到 CSRF 攻击的条件:
1 .登录受信任网站A,并在本地生成Cookie。
2. 在不登出A的情况下,访问危险网站B,B 网站发起对 A 网站数据的请求,同时会携带着访问A 网站时生成的 cookie 去请求自己的数据,就会导致用户信息的泄露和财产的损失。

跨域并非不一定是浏览器限制了发起跨站请求,而也可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是 CSRF 跨站攻击原理,请求是发送到了后端服务器无论是否跨域!
有些浏览器不允许从 HTTPS 的域跨域访问 HTTP,比如 Chrome 和 Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是一个特例。

参考: https://www.zhihu.com/question/26376773

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值