【前端】几种常见的跨域解决方案代理的概念

几种常见的跨域解决方案&代理的概念

  • 一、常见的跨域解决方案
    • 1. 服务端配置CORS(Cross-Origin Resource Sharing):
    • 2. Nginx代理
    • 3. Vue CLI配置代理:
    • 4 .uni-app在`manifest.json`中配置代理来解决:
    • 5. 使用WebSocket通讯
    • 6. H5跨域 JSONP方式(通过script标签)
    • 7. 去掉www前缀
    • 8. Chrome浏览器的跨域设置(适用于本地临时跨域调试)
  • 二、代理的概念


在 Web 开发中,跨域问题是指浏览器从一个域名的网页去请求另一个域名的资源时,由于同源策略的限制,请求会被阻止。
解决跨域问题需要可能从后端、中间件、前端等方向入手。

一、常见的跨域解决方案

1. 服务端配置CORS(Cross-Origin Resource Sharing):

通过在服务器端设置响应头Access-Control-Allow-Origin来允许特定源的跨域请求。
支持多种HTTP方法,如GET、POST、PUT、DELETE等。
示例代码(PHP):

header('Access-Control-Allow-Origin: *');

2. Nginx代理

使用 Nginx 设置代理解决跨域问题的一种常见方式。Nginx 会充当一个中间代理服务器,接收来自前端的请求并将其转发到实际的后端 API 服务,从而避免跨域问题。

  1. 在服务器上安装 Nginx
    使用以下命令安装Nginx:

    • Ubuntu/Debian:

      sudo apt update
      sudo apt install nginx
      
    • CentOS/RHEL:

      sudo yum install nginx
      
  2. 配置 Nginx 代理

    打开 Nginx 的配置文件,通常是在 /etc/nginx/nginx.conf 或者 /etc/nginx/sites-available/default,根据你的操作系统和 Nginx 安装方式来决定。

    下面是一个示例配置,假设你的前端应用在 http://localhost:8080,后端 API 服务在 http://api.example.com

    server {listen 80;# 前端应用访问的地址server_name localhost;# 代理:`http://localhost`→`http://example.com`location / {root /var/www/html;  # 指定前端应用的根目录index index.html index.htm;}# 反向代理:分发到不同的后端 API 服务location /api/ {proxy_pass http://api.example.com/;  proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}location /websocket/ {proxy_pass http://websocket.example.com/;  proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
    }
    
    • proxy_pass http://api.example.com/;: 将所有 /api/ 路径的请求转发到 http://api.example.com
    • proxy_set_header 相关指令用于转发客户端的请求头信息到后端服务器,这样后端可以获得真实的请求信息。
  3. 重载 Nginx 配置
    在修改 Nginx 配置文件后,需要重载 Nginx,使配置生效:

    sudo nginx -s reload
    
  4. CORS 头部:如果后端已经配置了 CORS 头部,那么你可以在 Nginx 上的代理配置中添加相关的 CORS 头部,或者在后端服务中处理:

location /api/ {proxy_pass http://api.example.com/;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;# CORS 头部add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'Origin, X-Requested-With, Content-Type, Accept, Authorization';
}
  1. 路径重写:有时需要在代理时对路径进行重写。例如,前端请求 /api,但后端实际接收的路径是 /v1/api,这时可以使用 rewrite 来修改请求路径:
location /api/ {rewrite ^/api/(.*)$ /v1/$1 break;proxy_pass http://api.example.com/;
}

3. Vue CLI配置代理:

module.exports = {
devServer: {
proxy: {
‘/api’: {
target: ‘http://localhost:8818’,
changeOrigin: true,
pathRewrite: { ‘^/api’: ‘’ }
}
}
}
};

4 .uni-app在manifest.json中配置代理来解决:

针对uni-app框架 有专门的配置方法。

"h5": {"devServer": {"https": false,"port": 8080,"proxy": {"/apis": {"target": "https://www.ucharts.cn","changeOrigin": true,"pathRewrite": {"^/apis": ""}}}}
}

这将把以/apis开头的请求代理到https://www.ucharts.cn,从而解决跨域问题。

5. 使用WebSocket通讯

传统的 HTTP 请求会受到同源策略的严格约束,而 Websocket 协议不受同源策略的限制。WebSocket通过“ws://"(非加密)或“wss://”(加密)协议进行通信,连接建立后,全双工通信得以实现,并且不遵循 HTTP 的同源策略。

6. H5跨域 JSONP方式(通过script标签)

JSONP(JSON with Padding)是一种古老的跨域解决方案
原理是利用< script >标签的src属性不受同源策略限制的特点。
适用于GET请求,不适用于POST等其他类型请求。

<!DOCTYPE html> 
<html lang="en"> <head> <meta charset="UTF-8"> <title>JSONP跨域示例</title> 
</head> <body> <script> function jsonpCallback(data) { console.log(data);  } </script> <script src="http://目标服务器地址?callback=jsonpCallback"></script> 
</body> </html> 

这里http://目标服务器地址是提供数据的服务器地址,callback=jsonpCallback是将回调函数名作为参数传递给服务器,服务器收到请求后,会将数据包装在回调函数中返回,例如返回的数据可能是jsonpCallback([{ "name": "张三", "age": 25 }]),这样前端页面就可以通过回调函数获取到跨域的数据。

7. 去掉www前缀

有些情况下,去掉访问地址的www前缀可能会解决跨域问题。这是因为有些服务器配置中,www子域名和主域名被视为不同的域。当去掉www前缀后,可能会使请求在同源策略下被允许。

例如,原本请求www.example.com会出现跨域问题,尝试访问example.com 可能就不会有跨域限制。但这种方法并不是通用的解决方案,它取决于服务器的具体配置,而且也可能带来一些其他问题,比如搜索引擎优化(SEO)方面的影响等。同时,如果是因为协议、端口不同导致的跨域,这种方法也无法解决。

8. Chrome浏览器的跨域设置(适用于本地临时跨域调试)

在开发过程中,可能需要临时绕过浏览器的同源策略——启动一个禁用Web安全策略的Chrome实例。
请注意,这种方法仅适用于开发环境,且存在安全风险,务必谨慎使用。
通过启动Chrome浏览器时添加特定参数来实现:

将谷歌浏览器的桌面快捷方式复制一份,右键属性将目标的路径后输入

--disable-web-security --disable-web-security --user-data-dir=C:\chromTest参数

参考:

"C:\Program Files\Google\Chrome\Application\chrome.exe" --disable-web-security --disable-web-security --user-data-dir=C:\chromTest

在这里插入图片描述

二、代理的概念

常用的代理技术分为正向代理反向代理透明代理
正向代理:将多个不同域名的网站请求统一到一个目标服务器请求
反向代理:将多个不同域名的网站请求根据需要分发给不同的后端应用服务器
透明代理:一种网络中间件,它能够在用户不知情的情况下拦截和转发网络流量。这种代理不需要在用户端配置特定的代理设置,而是通过在网络层面拦截流量来实现代理功能。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git 分布式版本控制工具使用教程

1.关于Git 1.1 什么是Git Git是一款免费、开源的分布式版本控制工具&#xff0c;由Linux创始人Linus Torvalds于2005年开发。它被设计用来处理从很小到非常大的项目&#xff0c;速度和效率都非常高。Git允许多个开发者几乎同时处理同一个项目而不会互相干扰&#xff0c;并且在…

基于java手机销售网站设计和实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

GitHub Pages + Jekyll 博客搭建指南(静态网站搭建)

目录 &#x1f680; 静态网站及其生成工具指南&#x1f30d; 什么是静态网站&#xff1f;&#x1f4cc; 静态网站的优势⚖️ 静态网站 VS 动态网站 &#x1f680; 常见的静态网站生成器对比&#x1f6e0;️ 使用 GitHub Pages Jekyll 搭建个人博客&#x1f4cc; 1. 创建 GitHu…

1.【线性代数】——方程组的几何解释

一 方程组的几何解释 概述举例举例一1. matrix2.row picture3.column picture 概述 三种表示方法 matrixrow picturecolumn picture 举例 举例一 { 2 x − y 0 − x 2 y 3 \begin{cases} 2x - y 0 \\ -x 2y 3 \end{cases} {2x−y0−x2y3​ 1. matrix [ 2 − 1 − 1 …

ZZNUOJ(C/C++)基础练习1091——1100(详解版)⭐

目录 1091 : 童年生活二三事&#xff08;多实例测试&#xff09; C C 1092 : 素数表(函数专题&#xff09; C C 1093 : 验证哥德巴赫猜想&#xff08;函数专题&#xff09; C C 1094 : 统计元音&#xff08;函数专题&#xff09; C C 1095 : 时间间隔&#xff08;多…

innovus如何分步长func和dft时钟

在Innovus工具中&#xff0c;分步处理功能时钟&#xff08;func clock&#xff09;和DFT时钟&#xff08;如扫描测试时钟&#xff09;需要结合设计模式&#xff08;Function Mode和DFT Mode&#xff09;进行约束定义、时钟树综合&#xff08;CTS&#xff09;和时序分析。跟随分…

java高级知识之集合

前言 集合是java开发中的重点内容&#xff0c;需要掌握的东西很多&#xff0c;面试中可问的东西很多&#xff0c;无论是深度还是广度。集合框架中Collection对应的实现类如下所示&#xff0c;这些都是要完全掌握&#xff0c;一个可以分为三大类List集合、Set‘集合以及Map集合…

51c自动驾驶~合集49

我自己的原文哦~ https://blog.51cto.com/whaosoft/13164876 #Ultra-AV 轨迹预测新基准&#xff01;清华开源&#xff1a;统一自动驾驶纵向轨迹数据集 自动驾驶车辆在交通运输领域展现出巨大潜力&#xff0c;而理解其纵向驾驶行为是实现安全高效自动驾驶的关键。现有的开…

Unity-Mirror网络框架-从入门到精通之MultipleMatches示例

文章目录 前言MultipleMatchesLobbyViewRoomViewMatchGUIPlayerGUI总结前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开源网络框架,专为多人…

VMware Workstation创建虚拟机

目录 创建新的虚拟机 虚拟机快照功能 虚拟机添加空间 其他注意事项 创建新的虚拟机 打开VMware Workstation&#xff1a;启动软件后&#xff0c;点击“创建新的虚拟机”。 选择安装方式&#xff1a; 典型安装&#xff1a;适合大多数用户&#xff0c;会自动完成大部分配置…

DeepSeek AI R1推理大模型API集成文档

DeepSeek AI R1推理大模型API集成文档 引言 随着自然语言处理技术的飞速发展&#xff0c;大语言模型在各行各业的应用日益广泛。DeepSeek R1作为一款高性能、开源的大语言模型&#xff0c;凭借其强大的文本生成能力、高效的推理性能和灵活的接口设计&#xff0c;吸引了大量开发…

活泼瘤胃球菌(Ruminococcus gnavus)——多种疾病风险的潜在标志物

​ 前几日&#xff0c;南方医科大学深圳医院院长周宏伟教授团队在国际顶尖医学期刊《Nature Medicine》上发表了一项重要研究。首次揭示一种名为活泼瘤胃球菌(Ruminococcus gnavus)的细菌产生的物质——苯乙胺&#xff0c;在肝性脑病发生中的关键作用。 ​ 同时谷禾的人群检测数…

8.flask+websocket

http是短连接&#xff0c;无状态的。 websocket是长连接&#xff0c;有状态的。 flask中使用websocket from flask import Flask, request import asyncio import json import time import websockets from threading import Thread from urllib.parse import urlparse, pars…

qiime2:安装与使用

试一下docker安装 docker pull quay.io/qiime2/amplicon:2024.10 docker images docker run -v {挂载的目录}:/data quay.io/qiime2/amplicon:2024.10 qiime -h使用 import.txt docker run -v ~/diarrhoea/MJ/qingzhu:/data quay.io/qiime2/amplicon:2024.10 qiime tools imp…

技术实战|ELF 2学习板本地部署DeepSeek-R1大模型的完整指南(一)

DeepSeek作为国产AI大数据模型的代表&#xff0c;凭借其卓越的推理能力和高效的文本生成技术&#xff0c;在全球人工智能领域引发广泛关注。DeepSeek-R1作为该系列最新迭代版本&#xff0c;实现了长文本处理效能跃迁、多模态扩展规划、嵌入式适配等技术维度的突破。 RK3588作为…

DeepSeek本地部署_桌面版AnythingLLM本地知识库搭建

一.DeepSeek本地部署 1.下载并安装&#xff1a;ollama Download Ollama on macOSDownload Ollama for macOShttps://ollama.com/download 安装是否成功确认&#xff0c;管理员权限运行PowerShell&#xff1a; ollama -h 2.下载安装DeepSeek 管理员方式运行PowerShell&#…

BGP基础协议详解

BGP基础协议详解 一、BGP在企业中的应用二、BGP概述2.1 BGP的特点2.2 基本配置演示2.3 抓包观察2.4 BGP的特征三、BGP对等体关系四、bgp报文4.1 BGP五种报文类型(重点)4.2 BGP报文格式-报文头格式4.3 Open报文格式4.4 Update报文格式4.5 Notification报文格式4.6 Route-refre…

2025.2.10 每日学习记录3:技术报告只差相关工作+补实验

0.近期主任务线 1.完成小论文准备 目标是3月份完成实验点1的全部实验和论文。 2.准备教资笔试 打算留个十多天左右&#xff0c;一次性备考笔试的三个科目 1.实习申请技术准备&#xff1a;微调、Agent、RAG 据央视财经&#xff0c;数据显示&#xff0c;截至2024年12月…

算法 ST表

目录 前言 一&#xff0c;暴力法 二&#xff0c;打表法 三&#xff0c;ST表 四&#xff0c;ST表的代码实现 总结 前言 ST表的主要作用是在一个区间里面寻找最大值&#xff0c;具有快速查找的功能&#xff0c;此表有些难&#xff0c;读者可以借助我的文章和网上的课程结…

25考研材料复试面试常见核心问题真题汇总,材料考研复试面试有哪些经典问题?材料考研复试过程最看重什么内容?

材料复试面试难&#xff01;千万不要死磕&#xff01;复试是有技巧的&#xff01; 是不是刷了三天三夜经验贴&#xff0c;还是不知道材料复试会问啥&#xff1f;去年我复试时被导师连环追问"非晶合金的原子扩散机制"&#xff0c;差点当场宕机...今天学姐掏心窝总结&…