转载:

作者:小丞同学
链接:https://www.zhihu.com/question/452543297/answer/2247177767
来源:知乎

在前后端交互的过程中,经常会遇到跨域的问题,在我们使用 React 、Vue 这些脚手架来搭建项目时,我们可以很方便的通过配置代理来解决跨域的问题,但是在我们初学前端时,这个问题真的是非常棘手的。

首先跨域是由于浏览器的同源策略引起的,它是浏览器的安全功能,为了防止 XSS、CSRF 攻击。所谓的同源指的是 协议、域名、端口三者的相同,即使两个域名指向同一台服务器这也属于非同源

1. Jsonp 解决跨域(不推荐)

这其实利用的是 HTML 标签的一个漏洞来解决的
有三个标签是允许跨域加载资源的 Img 、link 、script 标签
Jsonp 就是利用 script 标签来跨域加载资源,但是这种方法需要后端服务器的配合才能实现,同时只支持 Get 请求

  1. 首先我们在前端中需要声明一个回调函数
  2. 通过 params 传参的方式,将我们的请求参数拼接在 url 路径上
  3. 将 url 加到 script 标签的 src 属性上
  4. 服务器也需要专门针对于这种请求方式进行接收和特殊的处理,才能得到结果

因此如果纯前端的话,是无法通过 Jsonp 来解决跨域问题的

2. 实现 CORS (推荐)

这种方法是最简单的,只需要后端服务器中配置 Access-Control-Allow-Origin 就可以开启 CORS ,可以设置哪些域名可以访问资源,这样就没有前端什么事了,

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));

3. Nginx反向代理(推荐)

如果是前后端分离的项目,我们可以在前端服务器的 Nginx 配置中,配置代理
前端先在配置 baseUrl 时,请求前端服务器,并且添加一个可标识的后缀,例如 /api
在前端服务器上配置

4.浏览器开启跨域(不推荐)

这种方法还是不建议了,由于跨域问题是浏览器的策略引起的,因此我们可以想办法关闭浏览器跨域的限制
怎么关闭,自己找找,关了难免会出什么问题,日后可能忘记开回来啥的,不大好

CROS跨域问题的解决的更多相关文章

  1. jquery ajax跨域的完美解决方法(jsonp方式)

    ajax跨域请求的问题,JQuery对于Ajax的跨域请求有两类解决方案,不过都是只支持get方式,接下来为大家详细介绍下客户端JQuery.ajax的调用代码     今天在项目中需要做远程数据加载 ...

  2. 如何实现vue前端跨域,proxyTable解决开发环境前端跨域问题

    在开发环境与后端调试的时候难免会遇到跨域问题,很多人说跨域交给后端解决就好了. 其实不然,前端也有很多方法可以解决跨域,方便也快捷. 常见的有nginx转发.node代理. 在vue项目中常用的是pr ...

  3. AJAX跨域问题以及解决思路(更新中)

    跨域的三大原因(同时满足) 浏览器限制 跨域 XHR请求 解决思路: 让浏览器不做限制,指定参数,让浏览器不做校验,但该方法不太合理,它需要每个人都去做改动. 不要发出XHR请求,这样就算是跨域,浏览 ...

  4. WebApi2跨域问题及解决办法

    跨域问题产生的原因 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能.现在所有支持JavaScript的浏览器都会使用这个策略.所谓同源是指,域名,协议, ...

  5. JQuery的Ajax跨域请求的解决方式

            今天在项目中须要做远程数据载入并渲染页面,直到开发阶段才意识到ajax跨域请求的问题,隐约记得Jquery有提过一个ajax跨域请求的解决方式,于是即刻翻出Jquery的API出来研究 ...

  6. Ajax跨域请求怎么解决?

    前言 项目中需要将第三方系统中,对应用户的代办消息集成到系统中.对方提供了获取对应用户的接口url,但是由于两边的系统是部署到客户现场不同IP的虚机上的,所以进行ajax请求的时候是属于跨域请求的.之 ...

  7. vue+django分离开发的思想和跨域问题的解决

    一.介绍 在前后端分离的开发过程中,会涉及到跨域的问题,比如本次个人使用的Django+vue的框架,在vue对Django进行响应,Django再将响应的数据返回给vue,vue在进行渲染,如果不设 ...

  8. layui跨域问题的解决

      跨域问题的解决 由于浏览器存在同源策略,所以如果 layui(里面含图标字体文件)所在的地址与你当前的页面地址不在同一个域下,即会出现图标跨域问题.所以要么你就把 layui 与网站放在同一服务器 ...

  9. IE9 IE8 ajax跨域问题的解决

    项目中用到的跨域 ,在除IE9以下的浏览器上运行都是没有问题的,IE8 IE9中报错,error :no transport; 网上解决办法均是 在发起请求之前添加 jQuery.support.co ...

  10. Jquery AJAX ASP.NET IIS 跨域 超简单解决办法

    第一种: 在IIS添加如下标头即可 Access-Control-Allow-Headers:Content-Type, api_key, AuthorizationAccess-Control-Al ...

随机推荐

  1. JavaScript 之 数组在内存中的存储方式(连续或不连续)

    最近在纠结一个问题,就是数组这个引用类型在JavaScript 中是不是和其他语言一样开辟了一个连续的内存来存储,但是在JS 中每个元素又可以是不同的类型,这就导致了没办法用一个相同大小的存储,所以数 ...

  2. Educational Codeforces Round 1 个人总结A-E

    Educational Codeforces Round 1 A. Tricky Sum 数学,求\(1 \dots n\)的和减去 小于等于n的二次幂乘2之和 LL f[40]; void solv ...

  3. js使用sort将JSON数据进行排序

    在把数据通过Echarts展示成统计图模式时,柱状统计图需要将数据进行从大到小来排序! 下面为所需要的数据: 1 { 2 mapData: [ 3 {name: '北京',value: '555'}, ...

  4. vue 同一个子组件,两次赋值不同,dom不更新

    转自:https://blog.csdn.net/WO_JIAMIFENG/article/details/115250918 <div :key="inputkey"> ...

  5. 如何跳出forEach循环

    for(let ii in this.listData){ console.log("提交前数据",ii) try{ this.listData[ii].forEach((el,i ...

  6. WV电影网站的设计与实现-可行性研究分析报告

    引言 WV(Wonderful View)电影网站--奇景电影网. 1.1编写目的 1.2背景 在信息发展的时代,地球人口越来越多,人们相比去拥挤的电影院,更喜欢待在舒适的家中,通过互联网访问本站,实 ...

  7. Q:windows系统如何开机启动批处理脚本

    方法1 1.win+r输入gpedit.msc进入本地策略管理器 2.点击windows设置下的脚本(启动/关机),然后双击启动. 3.点击添加,然后点击浏览,选择批处理文件然后点击确定. 方法2 也 ...

  8. Q:oracle19c 如何重建vm_concat函数

    没有wm_concat是因为oracle12c数据库中废弃了wm_concat函数 --–登录dba用户sys权限,为wmsys用户创建可用的wm_concat函数,依次执行以下语句 第一步 定义对象 ...

  9. 基于4g智能路由器的充电桩远程监测管理应用

    随着我国电动车保有量的持续增加,充电桩的需求也水涨船高,成为城市发展必备的基础设施之一.相较加油站,充电桩分布更广泛,部署场景更多样,与场景的融合程度也更深,诸如各类停车与充电二合一的站点.因此,对于 ...

  10. oralce 11g 数据库及客户端client等的下载安装

    下载地址:https://www.oracle.com/cn/database/technologies/microsoft-windows.html