跨域访问

背景

之前在做web站点优化,遇到了一些跨域问题,在网上查了一些资料,现在整理一下。

本文主要参考了知乎https://www.zhihu.com/question/26376773

 

跨域介绍

跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com 页面去请求 www.google.com 的资源。

跨域的严格一点的定义是:只要 协议、域名或端口有任何一个的不同,就被当作是跨域

以下面2个地址来说明,红色是协议,绿色是域名,蓝色是端口号。如果不写端口,实际用的是默认端口号(http默认80端口,https默认443端口)

http://www.baidu.com/aaa   等同于http://www.baidu.com:80/aaa

https://www.google.com:8990/bbbb

 

常见的解决方案

之前在做web站点优化,遇到了一些跨域问题,在网上查了一些资料,现在整理一下。

1.Jsonp

2.跨域资源共享(CORS)

3.代理

4.其它(iframe、window.name、postMessage等等)

因为CORS只需要修改服务端的header,所以我们项目实际使用的是CORS,下面只介绍CORS

 

CORS介绍

CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,CORS让Web应用服务器能支持跨站访问控制,使跨站数据传输更加安全,减轻跨域HTTP请求的风险。CORS验证机制需要客户端和服务端协同处理。

 

CORS浏览器支持情况

 

服务端配置

返回信息(Response)的header加上如下几项

access-control-allow-origin

access-control-allow-headers

access-control-allow-methods

 

CORS请求分类

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)

1.简单请求 

同时满足如下条件,就属于简单请求。
methond:[HEAD, GET, POST]
Head:[Accept, Accept-Language, Content-Language, Last-Event-ID, Content-Type]
Content-Type:[application/x-www-form-urlencoded, multipart/form-data, text/plain]

 

 

2.非简单请求

非简单请求实际是2个请求,需要先发一个option请求

 

 

转载于:https://www.cnblogs.com/maochenhua/p/9855729.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值