网站首页 > 教程文章 正文
关键词
同源策略浏览器设计的一个功能限制CORS突破同源策略的一个方法JSONPIE时代的补救办法
同源策略
(一)同源的定义:
- 源:源 = 协议+域名+端口
- 获取源的方法:window.origin
- 如果两个url的 协议名、域名、端口号 完全一致,则称他们同源。
举例:https://qq.com 和 https://www.baidu.com 不同源https://baidu.com 和 https://www.baidu.com 也不同源(二)同源策略定义
- 浏览器规定:
如果JS运行在源A中,那么就只能获得源A中的数据,不能获得源B中的数据,即不允许“跨域” - 举例:假设 https://oliver.com/index.html 引用了https://cdn.com/jQuery.js那么就说jQuery.js是运行在源 https://oliver.com 里所以jQuery.js只能获得 https://oliver.com 中的数据,而不能获取源 https://cdn.com 中的数据
(三)关键问题
- 浏览器无法区分请求的发送者
(四)同源策略的目的
- 为了保护用户隐私,防止用户个人数据被钓鱼网站偷走。
跨域的实现
解决方案一:CORS
- 问题根源:
浏览器默认不同源之间不能相互访问数据
但假设有两个不同源的网站都属于我,我就是想要他们相互访问,那么我可以用CORS方法。 - 使用方法:提前声明。
在源A中增加响应头Access-Control-Allow-Origin: http://xxx.xxx
这样就可以允许源 http://xxx.xxx 访问源A的数据了 - 详细用法:去MDN瞅瞅
解决方案二:JSONP
- 问题根源:
IE不支持CORS啊!!! - 定义:
利用script标签没有跨域限制来使用js包裹数据,达成和第三方数据通信的一种跨域解决方案。 - 步骤假设oliver.com想要访问db.com里的数据 db.com中的数据写到/data.js里 oliver.com用<script>引用db.com/data.js /data.js执行,执行什么呢? oliver.com提前定义好window.fn函数 /data.js执行window.fn({data:[...]}) 然后源oliver.com就通过window.fn获取到了数据 window.fn就是一个回调啊!
- JSONP的优缺点
- 优点: 解决IE的兼容; 可以跨域;
- 缺点: 读取不到状态码等详细响应信息 只能发get请求,不支持post
总结:
- 跨域实现了跨页面的数据通信,是前端非常重要的一门技术点。
- 我的github中写好了JSONP和CORS的demo 点击查看
原文 https://segmentfault.com/a/1190000021686919
喜欢小编的可以点个赞关注小编哦,小编每天都会给大家分享文章。
我自己是一名从事了多年的前端老程序员,小编为大家准备了新出的前端编程学习资料,免费分享给大家!
如果你也想学习前端,可以观看【置顶】文章。也可以私信【1】 领取最新前端练手实战项目
- 上一篇: 最常用的四种跨域解决方案
- 下一篇: 一文带你理清同源和跨域
猜你喜欢
- 2025-01-08 跨域调任不妨多些释因
- 2025-01-08 深入跨域 - 解决方案
- 2025-01-08 跨域问题?同源策略大全
- 2025-01-08 Spring Boot 进阶-Spring Boot中如何解决跨域问题
- 2025-01-08 SpringBoot 如何解决跨域问题?
- 2025-01-08 解决跨域问题的8种方法,含网关、Nginx和SpringBoot~
- 2025-01-08 一文带你理清同源和跨域
- 2025-01-08 最常用的四种跨域解决方案
- 2025-01-08 图片跨域小记
- 2025-01-08 如何解决前后端分离的跨域问题?
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)