node后端与Vue前端跨域处理方法详解

一、 前言

在前后端分离的开发模式中,前端Vue与后端Node进行沟通交互涉及到跨域问题。下面我们来详细讲解node后端与Vue前端跨域处理方法。

二、 跨域原理

同源策略(Same Origin Policy)要求网页只能访问与本网页同一个域名、端口、协议的网页。也就是说,一个源的的脚本仅能读写属于该源的窗口和文档。如果读写的目标不是同源的,就会出现跨域问题。

三、 跨域解决方法

  1. JSONP

JSONP(JSON with Padding)是解决跨域问题的最简单方法。

通过动态添加 script 标签的方式,让服务端返回的数据包装在指定的 padding 函数中,再由前端解析在页面中使用。

例如:

<script>
  function callback(data) {
    console.log(data)
  }
</script>

<script src="http://www.example.com/data?callback=callback"></script>

这里的 callback 在服务端返回的数据中被自动替换成了前端定义的 callback 函数。

JSONP 的缺点在于只能支持 GET 请求,无法支持 POST 请求,还有安全隐患。

  1. CORS

CORS(Cross-origin resource sharing)可以让浏览器在请求时,自动识别是否可以跨域,从而实现跨域请求。

在 Node.js 中,只需要在响应头中指定 Access-Control-Allow-Origin 即可。

例如,需要允许指定域名的请求跨域:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', 'http://www.example.com')
  next()
})

也可以允许所有域名的请求跨域:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*')
  next()
})

CORS 的优点在于支持全部 HTTP 方法,安全且简单。但缺点在于会产生额外的 OPTION 请求,对于静态资源的访问会产生额外的流量。

四、 示例说明

  1. JSONP 示例

在服务端 Node.js 中,有一个数据接口:

router.get('/data', function(req, res, next) {
  let data = {
    name: 'Tom',
    age: 18,
  };
  let callback = req.query.callback;
  res.send(callback + '(' + JSON.stringify(data) + ')');
});

在前端 Vue 中,添加一个 script 标签,指定接口地址和 callback 函数:

<script>
  function callback(data) {
    console.log(data)
  }
</script>

<script src="http://www.example.com/data?callback=callback"></script>

现在在浏览器中打开 Vue 页面,就可以看到打印出的数据了。

  1. CORS 示例

在服务端 Node.js 中,要允许跨域请求:

app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Methods', 'PUT,POST,GET,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With');
  if (req.method == 'OPTIONS') {
    res.send(200);
  } else {
    next();
  }
});

然后在前端 Vue 中访问该接口:

axios.get('http://www.example.com/data').then(res => {
  console.log(res.data)
})

现在在浏览器中打开 Vue 页面,就可以看到打印出的数据了。

五、 总结

使用 JSONP 或 CORS 都可以解决跨域问题,选择哪种方式要根据自己的情况进行判断。对于静态资源的访问建议使用 CORS,对于数据接口的访问建议使用 JSONP。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node后端与Vue前端跨域处理方法详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • node.js中Buffer缓冲器的原理与使用方法分析

    下面是对“node.js中Buffer缓冲器的原理与使用方法分析”的详细讲解。 什么是Buffer 在 Node.js 中 Buffer 类用于处理在 Node.js 固有的 JavaScript 字符串类型之外的数据。 Buffer 类的实例类似于整数数组,但 Buffer 的大小是固定的,且在 V8 堆外分配物理内存。 Buffer 的大小在创建时确定,…

    node js 2023年6月8日
    00
  • 一篇文章搞定JavaScript类型转换(面试常见)

    这里给出一份完整攻略,帮助大家更好的理解和应用JavaScript中的类型转换。 什么是类型转换? 在JavaScript中,类型转换是将一个数据类型转换为另一个数据类型的操作。由于JavaScript是一种弱类型的动态语言,所以通常需要进行类型转换以使得程序正确运行。 类型转换的方法 显式类型转换 显式类型转换是通过一些JavaScript内置的方法将数据…

    node js 2023年6月8日
    00
  • 详解nodejs 配置文件处理方案

    我将为您详细讲解如何处理 Node.js 的配置文件。 1. 介绍 在 Node.js 项目中,配置文件处理是必不可少的一部分。一般来说,我们使用 JSON 或 YAML 格式存储配置选项。在本文中,我会介绍两种配置文件处理方案,分别是使用 config 模块和使用 dotenv 模块。这两种模块都可以帮助我们方便地读取配置文件并将其注入应用程序中。 2. …

    node js 2023年6月8日
    00
  • 说说如何利用 Node.js 代理解决跨域问题

    使用 Node.js 代理可以轻松解决跨域问题。跨域问题是由于浏览器的安全限制,不允许从一个源(协议、域名、端口)获取另一个源的资源。但是,如果服务器端使用 Node.js 代理涉及不同的源,那么跨域问题将不再是问题。 下面是两个示例说明: 基于 http-proxy-middleware 的 Node.js 代理 http-proxy-middleware…

    node js 2023年6月8日
    00
  • JavaScript 用Node.js写Shell脚本[译]

    让我来详细讲解“JavaScript 用Node.js写Shell脚本[译]”的完整攻略。 什么是 Shell 脚本? Shell 脚本是一种运行在 Unix/Linux 系统上的脚本,用于自动执行一系列的命令或操作。通常用 Shell 脚本来完成常规的任务,如备份数据、自动部署应用程序等。 Shell 脚本通常是使用 Shell 编程语言编写的。Shell…

    node js 2023年6月8日
    00
  • Nodejs学习笔记之Global Objects全局对象

    下面详细讲解一下“Nodejs学习笔记之Global Objects全局对象”的攻略。 1. 什么是Global Objects? 在Node.js的全局作用域中,存在一些对象,这些对象可以在任何地方访问,被称作全局对象,其中包括: global对象:它是一个全局对象,可以在任何地方访问,如果一个变量在所有模块中都是全局变量,它就是global对象的属性之一…

    node js 2023年6月8日
    00
  • Node.js Webpack常见的模式详解

    Node.js Webpack常见的模式详解 什么是Webpack Webpack是一个流行的模块打包器,它能够将多个JavaScript文件打包成一个或多个文件,同时也可以处理其他类型的文件(如CSS、图片等)。Webpack支持各种各样的模块化规范和前端框架,能够为项目提供高效的资源管理和打包功能。 常用的Webpack模式 Webpack有许多常见的模…

    node js 2023年6月8日
    00
  • 基于jstree使用JSON数据组装成树

    下面我来详细讲解“基于jstree使用JSON数据组装成树”的完整攻略。 1. jstree简介 Jstree是一个基于jQuery的树形结构插件,可以方便地将数据组装成树形结构,并支持多种事件处理。它是开源的,使用非常广泛,功能强大,而且使用简单。 2. 安装jstree 在使用jstree之前需要先引入jstree的JS和CSS文件。可以通过CDN来引入…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部