为什么会有跨域的问题出现,如何解决跨域问题(代码片段)

工具人-小不点 工具人-小不点     2022-12-19     388

关键词:

为什么会有跨域的问题出现,如何解决跨域问题

什么是跨域

​ 定义: 跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。理解这一点很重要!!!

​ 指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对
javascript 施加的安全限制,防止他人恶意攻击网站.

​ 比如一个黑客,他利用 iframe 把真正的银行登录页面嵌到他的页面上,当你使用真实的用户
名和密码登录时,如果没有同源限制,他的页面就可以通过 JavaScript 读取到你的表单中输
入的内容,这样用户名和密码就轻松到手了。

什么是同源策略

​ 同源策略 是客户端脚本(尤其是 Javascript)的重要的安全度量标准。它最早出自 Netscape
Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。所谓同源指的是:协议,
域名,端口相同,同源策略是一种安全协议,指一段脚本只能读取来自同一来源的窗口和
文档的属性

解决方式

1、jsonp

1.1)去创建一个 script 标签

1.2)script 的 src 属性设置接口地址

1.3)接口参数,必须要带一个自定义函数名 要不然后台无法返回数据。

1.4)通过定义函数名去接收后台返回数据

//去创建一个 script 标签 
var script = document.createElement("script"); 
//script 的 src 属性设置接口地址 并带一个 callback 回调函数名称
script.src = "HTTP://127.0.0.1:8888/index.php?callback=jsonpCallback"; 
//插入到页面 
document.head.appendChild(script); 
//通过定义函数名去接收后台返回数据 
function jsonpCallback(data) 
//注意 jsonp 返回的数据是 json 对象可以直接使用 //Ajax 取得数据是 json 字符串需要转换成 json 对象才可以使用。 

2、 CORS:跨域资源共享

​ 原理:服务器设置 Access-Control-Allow-OriginHTTP 响应头之后,浏览器将会允许跨域请求
​ 限制:浏览器需要支持 HTML5,可以支持 POST,PUT 等方法兼容 ie9 以上,需要后台设置

2.1)跨域请求后的响应头中需要设置

2.2)Access-Control-Allow-Origin 为发起请求的主机地址

2.3)Access-Control-Allow-Credentials,当它被设置为 true 时,允许跨域带 cookie,但此时 Access-Control- Allow-Origin 不能为通配符*

2.4)Access-Control-Allow-Headers,设置跨域请求允许的请求头

2.5)Access-Control-Allow-Methods,设置跨域请求允许的请求方式

Access-Control-Allow-Origin: * //允许所有域名访问,或者
Access-Control-Allow-Origin: HTTP://a.com //只允许所有域名访问

3、反向代理

3.1)使用 vue-cli 脚手架搭建项目时 proxyTable 解决跨域问题

//打开 config/index.js,在 proxyTable 中添写如下代码:
//会拦截到/api的请求代理到目标服务器 http://f.apiplus.cn/xxx
proxyTable:   
    '/api': 
        target: 'http://f.apiplus.cn', //目标服务器地址
        changeOrigin: true, //改变源,是否跨域
        pathRewrite:  
        	'^/api': '/xxx' //路径重写,重定向
        
    

4.window+iframe

​ 需要目标服务器响应window.name

5.nginx反向代理解决跨域问题

​ 找到nginx的配置文件“nginx.conf”,修改一下信息.

server 
        listen       80; #监听80端口,可以改成其他端口
        server_name  localhost; # 当前服务的域名

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / 
            proxy_pass http://localhost:81;
            proxy_redirect default;
        

		location /apis  #添加访问目录为/apis的代理配置
			rewrite  ^/apis/(.*)$ /$1 break;
			proxy_pass   http://localhost:82;
       
#以下配置省略
配置解释:

1.由配置信息可知,我们让nginx监听localhost的80端口,网站A与网站B的访问都是经过localhost的80端口进行访问。

2.我们特殊配置了一个“/apis”目录的访问,并且对url执行了重写,最后使以“/apis”开头的地址都转到“http://localhost:82”进行处理。

3.rewrite  ^/apis/(.*)$ /$1 break; 

代表重写拦截进来的请求,并且只能对域名后边以“/apis”开头的起作用,例如www.a.com/apis/msg?x=1重写。只对/apis重写。

  rewrite后面的参数是一个简单的正则 ^/apis/(.*)$ ,$1代表正则中的第一个(),$2代表第二个()的值,以此类推。

  break代表匹配一个之后停止匹配。

跨域(怎么解决跨域问题)(跨域是什么)(为什么会有跨域)(代码片段)

跨域1、Jsonp,只能使用get提交,传输数据量有限2、CORS(Corss-originresourcesharing)跨域资源共享,支持post提交CORS原理,只需要在响应头header中注入Access-Control-Allow-Origin,这样浏览器坚持到,就可以跨域3、最方便的跨... 查看详情

跨域问题(代码片段)

一、为什么会有跨域问题?是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href属性,a标签什么的都不拦截。二、解决跨域问题的两种方式JSONPCORS 三、JSONP先简单来说一下JSONP... 查看详情

解决跨域问题

一、为什么会有跨域问题?是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href属性,a标签什么的都不拦截。二、解决跨域问题的两种方式JSONPCORS 三、JSONP先简单来说一下JSONP... 查看详情

403invalidcorsrequest跨域问题(代码片段)

....com去访问api.leyou.com,这属于二级域名不同,跨域了。5.1.为什么有跨域问题?跨域不一定都会有跨域问题。因为跨域问题是浏览器对于ajax请求的一种安全限制:一个页面发起的ajax请求,只能是与当前页域名相同的路径,这能有... 查看详情

如何解决跨域问题(代码片段)

(1)考察目标1)跨域出现的原因2)解决的跨域的方式有哪些。(2)题目分析1)跨域出现的原因:同源策略。什么是同源策略:同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策... 查看详情

后端cors解决跨域问题

  一.为什么会有跨域问题        是因为浏览器的同源策略是对ajax请求进行阻拦了,但是不是所有的请求都给做跨域,像是一般的href属性,a标签什么的都不拦截.   二.解决跨域的方法 &nb... 查看详情

同源策略与跨域问题(代码片段)

...到跨域问题,接下来将从以下几个方面进行跨域详解。1.为什么会有跨域问题?2.什么是同源策略?3.前后端通信方式有哪些?4.解决跨域通信的方式有哪些?5.解决跨域方式详细说明 为什么会有跨域问题?  答:是由于浏... 查看详情

解决跨域问题,实例调用百度地图(代码片段)

1.什么是跨域?浏览器对于javascript的同源策略的限制,例如a.com下面的js不能调用b.com中的js,对象或数据(因为a.com和b.com是不同域),所以跨域就出现了。同域的概念又是什么呢?所谓的同源是指,域名、协议、端口均为相同。前端常见... 查看详情

跨域1(代码片段)

首先我们来想一想       为什么会有跨域这个名词的出现呢?       跨域又是什么呢?为何要跨域?       浏览器的同源策略又是什么?怎么解决?  &nbs... 查看详情

tsingsee青犀视频调用ai人脸识别出现跨域问题如何解决?(代码片段)

...别放到公网服务器时,使用html访问的时候,出现跨域的情况:“Responsetopreflightrequestdoesn’tpassaccesscontrolcheck:No‘Access-Control-Allow-Origin’headerispresentontherequestedresource.”因为html在使用Ajax时,是不能解决跨域的问题&#... 查看详情

cors跨域(代码片段)

...方法。广为使用的一种就是JSONP。1.1 JSONP虽然浏览器有跨域请求的限制,但是一直以来,页面中的src元素链接的数据是可以跨域的:<sc 查看详情

tp5.1解决跨域(代码片段)

TP5.1解决跨域博客说明文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!介绍在前后端分离开发的时候就会遇到跨域的问题,在本地调试的时候可能不会出... 查看详情

跨域问题简单分析(代码片段)

...localhost对应的ip就是127.0.0.1,但这也是跨域。(注意)二.为什么会有跨域问题  因为浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源(浏览器的同源策略)。三.如 查看详情

解决ajax跨域问题-jsonp原理解析

解决Ajax跨域问题-JSONP原理解析为什么会有跨域问题?-因为有同源策略同源策略是浏览器的一种安全策略,所谓同源指的是请求URL地址中的协议,域名和端口都相同,只要其中之一不相同就是跨域同源策略主要为了保证浏览器的安... 查看详情

跨域是什么意思?(代码片段)

 首先我们来想一想       为什么会有跨域这个名词的出现呢?       跨域又是什么呢?为何要跨域?       浏览器的同源策略又是什么?怎么解决? &nbs... 查看详情

什么是跨域?如何解决跨域?(代码片段)

...ff0c;但是你请求的接口却在api.autofelix.com的域名下,由跨域的原理可知,域名不同也会导致跨域问题的出现,当然解决跨域问题的方法有很多,这里提供最常见的几种方式目录 一、什么是跨域二、跨域场景三、解... 查看详情

springboot的cros跨域问题经常始终不能解决跨域的原因(代码片段)

SpringBoot的Cros跨域问题经常始终不能解决跨域的原因问题问题的根本原因配置方法SpringBoot2.2.X版本SpringBoot2.5.X版本问题在配置跨域的@Configuration的时候,发现无论是.allowedOrigns()还是.allowedOriginParrtens()都解决不了的时候请看... 查看详情

解决springboot跨域的三种方式

... https://3water.com/article/cMTM39MjMzdLmY5一、什么是跨域1.1、为什么会出现跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正... 查看详情