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日

相关文章

  • nodejs+socket.io实现p2p消息实时发送的项目实践

    下面是「nodejs+socket.io实现p2p消息实时发送的项目实践」的攻略。 1.背景 本项目通过搭建一个基于实时通信的 p2p 网络,实现在任意两个节点之间进行实时消息传递的功能。具体实现技术由 Node.js 和 Socket.IO 提供支持,其主要原理是在每个用户连接到服务器(Socket.IO 服务器)时,将其与其他在线用户连接起来,然后进行实…

    node js 2023年6月8日
    00
  • Node.js搭建小程序后台服务

    Node.js搭建小程序后台服务 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,具有高效、轻便的特点。它的出现为JavaScript语言在服务器端的应用提供了一种全新的解决方案。本篇文章将详细讲解使用Node.js搭建小程序后台服务的完整攻略。 安装Node.js 在开始操作之前,首先需要安装Node.js。可以到 Node.…

    node js 2023年6月8日
    00
  • Node.js+express+socket实现在线实时多人聊天室

    Node.js是基于Chrome V8引擎的JavaScript运行环境,可以使得开发者在服务器端使用JavaScript语言。express是一种基于Node.js开发的Web应用框架,提供了一些常用的Web应用开发功能,并且易于扩展。socket是一种实现实时通讯的技术,能够使得客户端和服务器之间实现双向即时消息传输。 下面简单介绍如何通过Node.js…

    node js 2023年6月8日
    00
  • nodejs中使用archive压缩文件的实现代码

    要在 Node.js 中使用 Archive 压缩文件,我们可以使用 node-archiver 库。该库提供了一组简单的 API,可以方便地进行压缩文件操作。 以下是使用 node-archiver 压缩文件的步骤: 步骤 1:安装 node-archiver 库 在终端或命令提示符中,使用以下命令安装 node-archiver: npm install…

    node js 2023年6月8日
    00
  • 微信小程序反编译的实现

    下面我将详细讲解“微信小程序反编译的实现”的完整攻略。 1.概述 微信小程序反编译指的是将已经编译好的小程序代码反转为可读的源代码的过程。在这个过程中,可以获取小程序的完整源代码以及关键算法和模块等重要信息,对于开发者来说,这是一个非常有用的技能。 微信小程序反编译的实现过程中,需要用到一些工具和技术,包括反编译工具和相关构建环境的配置等。下面具体介绍微信小…

    node js 2023年6月9日
    00
  • JavaScript实现动态添加Form表单元素的方法示例

    下面是JavaScript实现动态添加Form表单元素的方法示例: 1. 添加input元素示例 在HTML中先定义一个form表单,并在其中定义一个按钮,点击按钮时触发JavaScript代码动态添加input元素: <!DOCTYPE html> <html> <head> <title>动态添加表单元素&…

    node js 2023年6月8日
    00
  • 在Angular中使用JWT认证方法示例

    我来详细介绍“在Angular中使用JWT认证方法示例”的完整攻略。 1. 什么是JWT认证方法 JWT(JSON Web Token)是一种用于认证的开放标准,它能够将用户的身份信息通过JSON格式编码成一个安全的Token。在前后端分离的Web应用中,它可以方便地在服务端和客户端之间传递用户身份信息,实现认证和授权功能。 2. 在Angular中使用JW…

    node js 2023年6月8日
    00
  • JavaScript中使用Async实现异步控制

    下面是详细的讲解「JavaScript中使用Async实现异步控制」的完整攻略。 异步编程 在JavaScript中,异步编程是相当重要的,它涉及到不少实际开发场景下的问题,如网络请求、文件读写等等。如果不掌握异步编程,会导致代码的执行顺序不如预期,引起各种奇怪的问题。 异步编程有许多解决方案,其中之一是异步函数(Async Functions),也叫做As…

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