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

反向代理,重定向,forward

在 Web 开发中,反向代理重定向(Redirect)Forward(转发) 是三种不同的资源跳转/请求处理机制,它们的核心区别体现在行为主体、交互方式、URL 变化等方面。下面详细说明三者的区别,并解答“重定向后如何获取定向后的 URL”。

一、反向代理、重定向、Forward 的核心区别

特性 反向代理(Reverse Proxy) 重定向(Redirect) Forward(转发)
行为主体 由代理服务器(如 Nginx)处理 由服务器(如 Tomcat)处理,主动通知客户端跳转 由服务器内部处理,客户端无感知
交互方式 客户端 → 代理服务器 → 目标服务器(客户端只与代理交互) 客户端 → 服务器(接收重定向指令) → 新 URL 服务器(客户端主动发起新请求) 客户端 → 服务器(内部转发到新资源)
URL 变化 客户端 URL 不变(始终显示代理服务器地址) 客户端 URL 会变为重定向的目标 URL 客户端 URL 不变(仍显示原始请求 URL)
请求次数 1 次请求(客户端视角) 2 次请求(客户端先发送原始请求,再发送跳转请求) 1 次请求(客户端只发送 1 次,服务器内部处理)
数据共享 无直接共享(代理与目标服务器需单独处理数据) 无法共享请求数据(两次请求是独立的) 可共享 request 域数据(同一请求上下文)
典型场景 负载均衡、动静分离、隐藏真实服务器地址 登录后跳转到首页、旧 URL 迁移到新 URL MVC 框架中控制器跳转到视图(如 JSP)

具体说明:

  1. 反向代理
    反向代理是代理服务器代替客户端向目标服务器请求资源的过程。客户端只知道代理服务器的地址,不知道真实的目标服务器。例如:

    • 客户端访问 https://api.example.com(代理服务器),代理服务器实际将请求转发到内部的 192.168.1.100:8080(目标服务器),客户端感知不到真实地址,URL 始终显示 https://api.example.com
      核心作用是隐藏真实服务器、负载均衡、处理静态资源等。
  2. 重定向(Redirect)
    重定向是服务器告诉客户端“你应该去访问另一个 URL”,客户端会主动发起新的请求。例如:

    • 客户端访问 http://example.com/login,服务器返回 302 Found 状态码和目标 URL http://example.com/home,客户端会自动跳转到 http://example.com/home,浏览器地址栏会显示新 URL。
      常见状态码:301(永久重定向)、302(临时重定向)。
  3. Forward(转发)
    转发是服务器内部的资源跳转,客户端完全无感知。例如:

    • 客户端访问 http://example.com/user,服务器内部将请求转发到 http://example.com/userInfo 处理,客户端收到的响应来自 userInfo,但地址栏仍显示 http://example.com/user
      转发属于同一请求上下文,requestresponse 对象可共享数据(如 request.setAttribute() 传递数据)。

二、重定向后如何获取定向后的 URL

重定向的目标 URL 是由服务器在响应中明确告知客户端的,因此可以通过以下方式获取:

1. 服务器端:重定向时主动记录目标 URL

在服务器发起重定向的代码中,直接记录目标 URL(因为目标 URL 是服务器自己指定的)。例如:

  • Spring MVC 中使用 redirect: 前缀发起重定向:
    @GetMapping("/old")
    public String redirect() {String targetUrl = "/new"; // 目标 URL// 记录目标 URL(可存入日志、数据库等)System.out.println("重定向到:" + targetUrl);return "redirect:" + targetUrl;
    }
    

2. 客户端:从响应头中获取目标 URL

服务器发起重定向时,会在响应头 Location 中携带目标 URL。客户端(如浏览器、前端代码)可通过读取该响应头获取目标 URL:

  • 浏览器开发者工具:在“网络(Network)”面板中,找到原始请求(如 /old),查看其响应头(Response Headers)中的 Location 字段,即为重定向目标 URL。
  • 前端代码(如 JavaScript):通过 XMLHttpRequestfetch 拦截响应头:
    fetch('/old', { method: 'GET' }).then(response => {// 重定向的目标 URL 在 response.headers.get('Location') 中console.log('重定向到:', response.headers.get('Location'));});
    

总结

  • 反向代理是代理服务器转发请求,客户端 URL 不变;
  • 重定向是服务器通知客户端跳转,客户端 URL 改变,目标 URL 由 Location 响应头指定;
  • Forward 是服务器内部跳转,客户端无感知,URL 不变;
  • 重定向的目标 URL 可通过服务器端主动记录,或客户端读取响应头 Location 获取。
http://www.aitangshan.cn/news/720.html

相关文章:

  • 内网DNS-dnsmasq服务详解
  • 【自学嵌入式:stm32单片机】TIM定时中断
  • 手艺融合赋能文旅元宇宙:虚实共生重构产业新生态
  • C语言数据结构《顺序表》教案
  • 数据库获得当前日期和时间
  • 【大二病也要学离散!】第三章 函数
  • QOJ5459 Goose, goose, DUCK? 题解 [ 蓝 ] [ 扫描线 ] [ 线段树 ]
  • 【日记】谈判失败(2273 字)
  • LSB隐写原理解析
  • 利用Active Directory进行攻击防御 - 实战技术与工具解析
  • 数据结构《课程导入 绪论》教案
  • Windows11正式版如何修改开机音乐的问题
  • 深度技术win10专业版电脑出现假死的问题
  • Spring boot SseEmitter 推送数据客户端乱码
  • Apache SeaTunnel 新定位!迈向多模态数据集成的统一工具
  • [完结22章]LLM应用全流程开发 全新技术+多案例实战+私有化部署
  • IP地址转换
  • Springboot+vue3 MinIO文件前端直传例子
  • 【刷题笔记】日照集训 Day3
  • GAS_Aura-The Gameplay Ability System
  • 深度解析10BASE-T1S PLCA的多节点通信效率
  • ESP32 + PCA9685(16通道 PWM 扩展模块)来驱动多个 9g 舵机
  • k8s 新版创建完 serviceaccount 后-- 不再生成 对应的--token
  • 验证码厂商对比及选型
  • debian更换NVIDIA 官方驱动
  • 经纬恒润推动汽车软件安全新生态,打造全流程质量协同新范式
  • 2025杭电多校第七场 矩形框选、伤害冷却比 个人题解 - CUC
  • 7 月 SeaTunnel 社区狂飙:新特性、强优化、贡献者满分输出
  • 在K8S中,假设一家基于整体架构的公司处理许多产品。现在,随着公司在当今规模化行业中的发展,其整体架构开始引起问题,如何看待公司从单一服务转向微服务并部署其服务容器?
  • GAS_Aura-Post Process Highlight