同源策略和跨域解决

物联网园丁
• 阅读 77

同源策略和跨域解决

一、跨域概念

1、同源

本身打开网页使用的地址跟要请求的目标地址,保持同协议、同域名、同端口号,这3项都相同,表示同源,只要其中有1项不同,就没有同源。

2、同源策略

浏览器为了安全考虑,对前端发请求的ajax,设置同源策略。

意思是如果同源,就可以正常请求正常响应,如果不同源,就收不到响应信息。

不同源的图示:

请求代码:

<body>
<button id="btn">请求百度</button>
</body>
<script>
    btn.onclick = function() {
        var xhr = new XMLHttpRequest;
        xhr.open('http://www.baidu.com', 'get');
        xhr.send()
        xhr.onreadystatechange = function(){
            if(xhr.readyState === 4){
                if(xhr.status>=200 && xhr.status<300){
                    var res = xhr.responseText;
                    console.log(res);
                }
            }
        }
    }
</script>

这个页面使用本地服务器打开,请求百度:

同源策略和跨域解决

3、跨域

当请求了不同源的地址,就造成跨域了。

二、解决跨域

在实际项目开发中,前端页面使用服务器1打开的,后端接口使用的服务器2。因为公司为了提高开发效率,会让前端和后端同时进行开发,所以前端和后端使用的不是同一个服务器,这样的话,前端对后端发起请求,就造成了跨域。

1、jsonp

1.1、原理

利用html的标签,也可以发起请求,但不受同源策略的限制。

例如img标签的src属性、link标签的href属性、iframe标签的src属性、script标签的src属性,他们都可以发请求,且不受同源策略的限制。

代码:

<img src="https://tse3-mm.cn.bing.net/th/id/OIP-C.C64i5Jj0CbEXYKp0h3CwJgHaE8?rs=1&pid=ImgDetMain" alt="">

用本地服务器打开页面:

同源策略和跨域解决

1.2、跨域解决

img标签的src属性会将请求回来的内容当做图片解析;

link标签的href属性会将请求回来的内容当做css样式解析;

iframe标签的src属性会将请求回来的内容当做html内容解析;

script标签的src属性会将请求回来的内容当做js代码执行;

jsonp利用script标签发送跨域请求:

服务器代码:

前端代码:

请求:

2、cors

3、proxy

点赞
收藏
评论区
推荐文章
室与 室与
4年前
Cors跨域解决
一、浏览器跨域问题产生1、跨源资源共享(CORS)中文文档:https://developer.mozilla.org/zhCN/docs/Web/HTTP/Access_control_CORS2、什么是浏览器跨域问题指的是浏览器不能执行其他网站的脚本。JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象,即同源策略。就好比我
芝士年糕 芝士年糕
2年前
什么是跨域
域: 是指浏览器不能执行其他网站的脚本跨域: 它是由浏览器的 同源策略 造成的,是浏览器对 JavaScript 实施的安全限制,所谓同源(即指在同一个域)就是两个页面具有相同的协议 protocol,主机 host 和端口号 port 则就会造成 
kenx kenx
3年前
SpringBoot 优雅配置跨域多种方式及Spring Security跨域访问配置的坑
前言最近在做项目的时候,基于前后端分离的权限管理系统,后台使用SpringSecurity作为权限控制管理,然后在前端接口访问时候涉及到跨域,但我怎么配置跨域也没有生效,这里有一个坑,在使用SpringSecurity时候单独配置,SpringBoot跨越还不行,还需要配置Security跨域才行。什么是跨域跨域是一种浏览器同源安全策略,即浏
专注IP定位 专注IP定位
3年前
浅析九种跨域方式实现原理
我们在解决一个问题的时候应该先去了解这个问题是如何产生的,为什么会有跨域的存在呢?其实,最终的罪魁祸首都是浏览器的同源策略,浏览器的同源策略限制我们只能在相同的协议、IP地址、端口号相同,如果有任何一个不通,都不能相互的获取数据。并且,http和https之间也存在跨域,因为https一般采用的是443端口,http采用的是80端口或者其他。同源策略是一种约
Stella981 Stella981
3年前
Https请求的页面中无法使用http访问
今天遇到一个问题,使用https访问的页面,其间发起http的ajax的请求都被浏览器拒绝,必须为https,否则无法请求,导致页面局部未初始化。浏览器报错Thisrequesthasbeenblocked;thecontentmustbeservedoverHTTPS.百度了下,了解到同源策略。所谓“同源”指的是:协议相同、域名相
Stella981 Stella981
3年前
SpringBoot实现jsonp跨域通信
实现jsonp跨域通信实现基于jsonp的跨域通信方案原理浏览器对非同源ajax请求有限制,不允许发送跨域请求目前跨域解决方案有两种cros配置jsonp请求cros为新规范,通过一个head请求询问服务器是否允许跨域,若不允许则被拦截jso
Stella981 Stella981
3年前
Js中的跨域问题
一、什么是跨域?1.定义:跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com页面去请求www.google.com的资源。但是一般情况下不能这么做,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。跨域的严格一点的定义是:只要协议,域名,端口有任何一
Easter79 Easter79
3年前
SpringBoot实现jsonp跨域通信
实现jsonp跨域通信实现基于jsonp的跨域通信方案原理浏览器对非同源ajax请求有限制,不允许发送跨域请求目前跨域解决方案有两种cros配置jsonp请求cros为新规范,通过一个head请求询问服务器是否允许跨域,若不允许则被拦截jso
Stella981 Stella981
3年前
35道面向初中级前端的基础面试题
如需获取完整版229页PDF面试题,请直接滑到文末。1\.什么是同源策略?同源策略可防止JavaScript发起跨域请求。源被定义为协议、主机名和端口号的组合。此策略可防止页面上的恶意脚本通过该页面的文档对象模型,访问另一个网页上的敏感数据。参考资料:浏览器的同源策略(https://www.oschina.
liam liam
1年前
解决 Axios 跨域阻碍,提高前端接口访问效率
跨域是指访问另外一个域的资源,由于浏览器的同源策略,默认情况下使用XMLHttpRequest和Fetch请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略,这是由浏览器对施加的安全限制。Axios跨域常见报错跨域请求被阻止(CrossOriginRe
ZOS对象存储跨域资源访问的实现和使用
跨域指的是从一个域名去请求另外一个域名的资源,即跨域名请求。跨域时,浏览器不能执行其他域名网站的脚本,这是由浏览器的同源策略造成的,是浏览器施加的安全限制。同源策略是一种约定,是浏览器最核心也最基本的安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,这是一个用于隔离潜在恶意文件的重要安全机制。
物联网园丁
物联网园丁
Lv1
更被夕阳江岸上,断肠烟柳一丝丝。
文章
3
粉丝
0
获赞
0