当前位置: 首页 > news >正文

跨站调用(CORS)一例

在我的一个环境中,有一个服务器A上运行着一些接口服务(多为POST的),需要通过登录认证才能使用,另有一个服务器B上有网页中的JS需要调用服务器A上的接口,为此,做了以下方案:

1 两服务器Session数据保存到共同的redis中,实现session共享

const cookieParser = require("cookie-parser");
const session = require("express-session");const { createClient } = require("redis");
const client = createClient({ url: jargs.sessionredis });
client.on("error", err => { logger.error("Redis连接出错"); errlog("Redis连接出错"); });
client.connect();
const { RedisStore } = require("connect-redis-session");app.use(session({name: "sessionapp",secret: jargs.appsecret,store: new RedisStore({ client }), saveUninitialized: false,resave: false,cookie: { domain:"mydomain.com",httpOnly: true, maxAge: jargs.sessionage }}));app.use(cookieParser("sessionapp"));

2 服务器B网页的JS请求访问服务器A接口采用fetch,带上Cookie

		fetch("https://servera.mydomain.com/api", {method: 'POST',credentials: "include",body: JSON.stringify(data),headers: { 'content-type': 'application/json', responseType: "arraybuffer"}}).then(response => response.arrayBuffer()).then( abuffer=>{
...

3 服务器A需配置支持服务器B的跨站访问

app.all("*", (req, res, next)=>{res.header("Access-Control-Allow-Origin",  "https://serverb.mydomain.com"); //跨站带Cookie的话,此处不能填*res.header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Authorization, Accept, X-Requested-With,responseType");res.header("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");//注意跨站访问的话,OPTIONS必须有,浏览器预检会调用res.header("Access-Control-Allow-Credentials", "true");if (req.method === "OPTIONS") { res.sendStatus(200); } else { next(); }
});

大体没有毛病,不少小坑需要注意,还是可以调通的。


http://www.mrgr.cn/news/56120.html

相关文章:

  • C#运动控制
  • Matlab 火焰识别技术
  • SQL Injection | SQL 注入 —— 数据提交方式
  • mysql用户密码基础
  • vue 页面导出gif图片 img 导出gif 超简单~
  • 价值投资(Value Investing)
  • 基础数据结构——队列(链表实现,数组实现)
  • 期权懂|看涨期权合约的买方具有什么义务?
  • L0G1000 Linux 基础知识
  • 【计网】理解TCP全连接队列与tcpdump抓包
  • 免费赠书啦,免费赠送多本《数据资产管理核心技术与应用》一书
  • webAPI中的offset、client、scroll
  • 【vue之道】
  • python中如何获取对象信息
  • 详解Java之Spring MVC篇一
  • SSM网上书店管理系统—计算机毕业设计源码41539
  • 如何将 Docker 镜像的 tar 文件迁移到另一台服务器并运行容器
  • 焊接原因引起的RJ45网口连接器LED灯不亮原因分析及处理措施
  • Redis Search系列 - 第四讲 支持中文
  • pip安装basicsr和tb-nightly报错
  • deepin V23 部署Ollama
  • BurpSuite渗透工具的简单使用
  • 如何利用动态IP对市场进行产品调研分析?
  • 华为不同职级,薪资待遇一览表
  • 移动用户心理:如何让他们安装和使用你的应用
  • C# lambda表达式语法简介