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

前端处理跨域的4种方式

跨域

跨域介绍

浏览器出于安全考虑,做了同源策略限制,浏览器会拒绝跨域请求。

同源策略

请求的时候,拥有相同的协议、域名、端口,只要有一个不同都属于跨域。

解决跨域

JSONP

通过 script 标签中的 src 不受同源策略的限制,可以实现跨域请求数据。
只能通过 get 请求。

客户端
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><script>const request = (callbackName) => {const script = document.createElement("script");script.src = `http://127.0.0.1:3000/api/user/list?callback=${callbackName}`;document.body.appendChild(script);return new Promise((resolve, resject) => {window[callbackName] = (res) => {resolve(res);};});};request(`callback${new Date().getTime()}`).then((res) => {console.log(res);});</script></body>
</html>
服务端
import express from "express";const app = express();app.get("/api/user/list", (req, res) => {const { callback } = req.query;res.send(`${callback}(${JSON.stringify([{id: 1001,name: "alex",age: 23,},])})`);
});
app.listen(3000, () => {console.log("server running");
});

DEV 使用代理(前端)

使用vite配置反向代理

import { defineConfig } from "vite";export default defineConfig({server:{proxy:{'/api':{target:'http://127.0.0.1:3000',changeOrigin:true}}}
})

设置请求头(后端)

只需要开启允许跨域

import express from "express";const app  = express();app.get('/api/role/list',(req,res)=>{res.setHeader('Access-Control-Allow-Origin','*');res.setHeader('Access-Control-Allow-Origin','协议+指定IP地址+端口')
})
app.listen(3000,()=>{console.log('server running')
})

nginx

server{listen 192.168.67.100:80;server_name  www.pc.com;root    /apps/nginx/html/pc;location  / {proxy_pass http://192.168.67.101;
}
http://www.lqws.cn/news/602623.html

相关文章:

  • 为什么js是单线程?
  • 转录组分析流程(七):GSEA分析
  • 安装emsdk 4.0.10报Connection reset by peer解决
  • OpenCV篇——项目(一)OCR识别读取银行卡号码
  • 内部类与Lambda的衍生关系(了解学习内部类,Lambda一篇即可)
  • Windows10/11 轻度优化 纯净版,12个版本!
  • 【分治思想】归并排序 与 逆序对
  • Nginx重定向协议冲突解决方案:The plain HTTP request was sent to HTTPS port
  • CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》(附报告全文链接)
  • OEM怎么掌握软件开发能力
  • 记本好书:矩阵力量:线性代数全彩图解+微课+Python编程
  • Python OrderedDict 用法详解
  • 学习昇腾开发的第11天--主要接口调用流程
  • CMU-15445(6)——PROJECT#2-BPlusTree-Task#1
  • 记一次Ubuntu22安装MongoDB8并同步本地数据过程
  • 应急响应类题练习——玄机第四章 windows实战-emlog
  • 微信小程序使用秋云ucharts echarts
  • 高阶数据结构------并查集
  • 数据结构day7——文件IO
  • STM32——存储器映射(Memory mapping)
  • 反向传播 梯度消失
  • OSE3.【Linux】练习:编写进度条及pv命令项目中的进度条函数
  • 07CSRF 漏洞保护
  • vite项目中引入tailwindcss,难倒AI的操作
  • Modbus协议
  • 数字图像处理学习笔记
  • Spring IOC容器核心阶段解密:★Bean实例化全流程深度剖析★
  • 菜谱大全——字符串处理艺术:从文本解析到高效搜索 [特殊字符][特殊字符]
  • 城市灯光夜景人像街拍摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!
  • 自由学习记录(66)