1.什么是跨域?

跨域不是问题,是一种安全机制。

广域的跨域:指一个域下的文档或脚本试图去请求另一个域下的资源。

 资源跳转: A链接、重定向、表单提交资源嵌入: <link>、<script>、<img>、<frame>等dom标签,还有样式中background:url()、@font-face()等文件外链脚本请求: js发起的ajax请求、dom和js对象的跨域操作等

狭义的跨域:由浏览器同源策略限制的一类请求场景。

同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS、CSFR等攻击。所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。

同源策略限制以下几种行为:

Cookie、LocalStorage 和 IndexDB 无法读取DOM 和 Js对象无法获得AJAX 请求不能发送

常见域名场景

URL                                      说明                    是否允许通信http://www.example.com/a.jshttp://www.example.com/b.js         同一域名,不同文件或路径           允许http://www.example.com/lab/c.js​http://www.example.com:8080/a.jshttp://www.example.com/b.js         同一域名,不同端口                不允许http://www.example.com/a.jshttps://www.example.com/b.js        同一域名,不同协议                不允许http://www.example.com/a.jshttp://192.168.1.1/b.js           域名和域名对应相同ip              不允许http://www.example.com/a.jshttp://x.example.com/b.js           主域相同,子域不同                不允许http://example.com/c.jshttp://www.example1.com/a.jshttp://www.example2.com/b.js        不同域名                         不允许

2.跨域导致的问题

跨域并不会阻止请求的发出,也不会阻止请求的接受,跨域是浏览器为了保护当前页面,你的请求得到了响应,浏览器不会把响应的数据交给页面上的回调,取而代之的是去提示你这是一个跨域数据。提示就是一个报错提示。

报错提示:从某某位置请求的资源被阻挡了,因为没有在响应头里发现:"Access-Control-Allow-Origin"的响应头。

3.三种前端跨域方法

i.跨域资源共享(CORS)(服务端设置,前端直接调用,后台允许前端某个站点进行访问)

普通跨域请求:只服务端设置Access-Control-Allow-Origin即可,前端无需设置;若要带cookie请求:前后端都需要设置。

通过Access-Control-Allow-Origin响应头,就告诉了浏览器。如果请求我的资源的页面是我这个响应头里记录了的"源",则不要拦截此响应,允许数据通行。

目前,所有浏览器都支持该功能(IE8+:IE8/9需要使用XDomainRequest对象来支持CORS)),CORS也已经成为主流的跨域解决方案。

 安装axios插件npm i axios --save-dev​引用axios插件import axios from "axios"​响应代码let url="跨域接口url"axios.get(url).then(()=>{})}

ii.JSONP跨域(前端适配,后端配合,前后台同时改造)

为了减轻服务器的负载,我们把js、css,img等静态资源分离到另一台独立域名的服务器上,在html页面中再通过相应的标签从不同域名下加载静态资源,而被浏览器允许,基于此原理,我们可以通过动态创建script,再请求一个带参网址实现跨域通信。

安装jsonp插件npm i jsonp --save-dev​引用jsonp插件import jsonp from "jsonp"​响应代码let url="跨域接口url"jsonp(url),(err,res)=>{let result=res;this.data=result;}

通过JSONP则不需要Access-Control-Allow-Origin字段;因为JSONP访问不是一个请求,而是JS脚本。

JSONP缺点:只能实现get一种请求。

iii.代理跨域(访问a接口,代理到b接口;通过修改nginx服务器配置来实现前端修改,后台不动)

类型:1.nginx代理跨域;2.Nodejs中间件代理跨域

创建vue.config.js(webpack的配置表)​//遵循node.js规范,使用module.exports={}module.exports = {devServer: {host: "localhost",//主机port: 8080,//端口//代理proxy: {//访问a接口,代理到b接口,真正访问b接口"/api": { //a接口target: "http://mall-pre.springboot.cn",//b接口changeOrigin: true, // changeOrigin为是否需要将主机原点改为目标url地址//设置空的虚拟接口,统一接口,方便拦截pathRewrite: { //转发地址api: "",},},},},};

更改vue.config.vue的配置信息时,需要重启项目(npm run serve)

2.三种前端跨域的解决方法相关推荐

  1. 浏览器同源策略及跨域的解决方法

    浏览器同源策略及跨域的解决方法 参考文章: (1)浏览器同源策略及跨域的解决方法 (2)https://www.cnblogs.com/laixiangran/p/9064769.html 备忘一下.

  2. 单片机长时间程序跑飞_单片机程序跑飞的三种现象、原因及解决方法

    今天在编写单片机程序的时候,由于中断服务程序写的不好,导致单片机程序总是跑飞,最后费了好长时间,花了很大功夫才找到问题原因,由此总结了单片机程序跑飞的三种现象.原因及解决方法. 一.数组越界(数组溢出 ...

  3. 第114天:Ajax跨域请求解决方法(二)

    一.什么是跨域 我们先回顾一下域名地址的组成: http:// www . google : 8080 / script/jquery.js   http:// (协议号)       www  (子 ...

  4. 几种允许跨域请求的方法

    "跨域请求 Cross-Origin Resource Sharing(CORS) 被禁止"这个问题,应该很常见了,网上也有很多解释原因和解决方案的文章. 鉴于网上搜到的文章内容比 ...

  5. vue3项目实战的请求接口问题(一)跨域问题+解决方法

    vue3 跨域问题➕常用解决方法 前言引入 跨域问题 解决跨域问题常用方法

  6. axios请求跨域前端解决_Vue中axios跨域请求解决方法

    跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口均相同,浏览器执行 js 脚本时,会检查这个脚本属 ...

  7. 前端跨域问题—解决Firefox浏览器显示“已阻止载入混合活动内容”的方法

    1.遇到的前端问题截图 content security policy: 页面设置阻止读取位于 http:// 2.问题原因分析 谷歌浏览器升级后,升级了https使用更严格的安全策略导致目前CS-P ...

  8. python flask 跨域问题 解决方法

    问题 网页上(client)有一个ajax请求,Flask sever是直接返回 jsonify. 然后ajax就报错:No 'Access-Control-Allow-Origin' header ...

  9. WebApi Ajax 跨域请求解决方法(CORS实现)

    ASP.NET Web API 的好用使用过的都知道,没有复杂的配置文件,一个简单的ApiController加上需要的Action就能工作.但是在使用API的时候总会遇到跨域请求的问题, 特别各种A ...

  10. 服务器端可控情形的Javascript跨域访问解决方法

    在最近的一个web项目中为了实现bookmark功能碰到了javascript跨域访问的问题.起初,在google上搜的很多解决方案并不适用于我的情形,只在有一篇文章中提到的远程加载javascrip ...

最新文章

  1. 01 HBase基本概念和hbase shell常用命令用法
  2. Linux 3.10 新特性
  3. 如何自行给指定的SAP OData服务添加自定义日志记录功能
  4. php csv 类,php csv操作类代码 - trim
  5. mysql duplicate key与replace into对比
  6. 怎样给Spark传递函数—怎样让你的Spark应用更高效更健壮
  7. MDX Step by Step 读书笔记(三) - Understanding Tuples (理解元组)
  8. 如何造数据——分分钟变成造数据大师
  9. DedeCMS专题版块多种方法随意调用
  10. 快速获得Google Chrome最新版本
  11. python 谷歌翻译 api_调用谷歌翻译API
  12. 微信小程序云开发实现一对一聊天
  13. 纯js制作的XML在线编辑器(支持修改本地文件)
  14. 历时一年,我的著作《第一行代码——Android》已出版!
  15. 可靠性测试的定义、测试点及用例设计方法
  16. 说说远程团队协作的故事
  17. 解决 NDP40-KB2468871不能安装
  18. Linux下socket编程:TCP连接
  19. Android App工程结构
  20. 机器人黑暗面的时代即将到来?

热门文章

  1. 中科院分词系统大致流程
  2. c语言矩阵键盘反转法扫描,行列扫描法,反转法,状态机法三种矩阵键盘扫描方法详解 带程序...
  3. 21天学通c语言错误,为《21天学通C语言》(第7版)(Sams Teach Yourself C in 21 Days)正名...
  4. 【二叉树】美团的【天天领现金】活动,不就是 斐波那契 数列么?
  5. FOC:【2】SVPWM(七段式)的Verilog实现与仿真
  6. 笑哭了!日本网友求助如何卸载360浏览器,过程堪比“ 拆弹 ”...
  7. jj斗地主服务器维护几点能好使啊,JJ斗地主比赛常见问题
  8. 机器学习的归宿《终极算法》·一
  9. 基于51单片机+DS1302时钟模块+LCD1602显示
  10. S7-200作MODBUS RTU主站和从站例程教学