2023.11.24 关于 请求转发 和 请求重定向 的区别

目录

请求转发(forward)

 请求重定向(redirect)

 二者区别

定义不同

请求方不同

数据共享不同

最终 URL 地址不同

代码实现不同


阅读下文之前 建议点击下方链接简单了解 Fiddle 

Fiddle 的安装与使用


请求转发(forward)

 实例理解

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/request")
public class RequestController {

//    请求转发
    @RequestMapping("/fw")
    public String fwIndex() {
        return "forward:/index.html";
    }

//    默认情况下这也是请求转发
    @RequestMapping("/index")
    public Object getIndex() {
        return "/index.html";
    }
}
  • 使用 Fiddle 来抓取和分析 HTTP 请求
  • 在浏览器的 URL 地址框中输入相对应地址,来调用上述代码的方法

 请求重定向(redirect)

实例理解

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/request")
public class RequestController {

//    请求重定向
    @RequestMapping("/rd")
    public String rdIndex() {
        return "redirect:/index.html";
    }
}
  • 使用 Fiddle 来抓取和分析 HTTP 请求
  • 在浏览器的 URL 地址框中输入相对应地址,来调用上述代码的方法

  • 第一个请求为 localhost:8080/request/rd
  • 第二个请求为 localhost:8080/index.html

 二者区别

  • 可细分为 5 大区别

定义不同

请求转发(Forward)

  • 发生在服务端程序内部
  • 当服务器收到一个请求之后,会先将请求转发给目标地址
  • 再将目标地址返回的结果转发给客户端

请求重定向(Redirect)

  • 指的是服务器端收到客户端的请求之后
  • 会给客户端返回一个临时响应头
  • 这个临时响应头中记录了 客户端需要再次发送请求(重定向)的 URL 地址
  • 客户端再收到了地址之后 会将请求发送到新地址上

请求方不同

请求转发(Forward)

  • 属于服务器端的行为
  • 服务器端代替客户端发送请求,并将结果返回给客户端

请求重定向(Redirect)

  • 属于客户端行为


数据共享不同

请求转发(Forward)

  • 由服务器端实现
  • 整个执行流程中,客户端只需要发送以此请求
  • 因此整个交互过程中使用的都是同一个 Request 请求对象 和 一个Response 响应对象
  • 所以整个请求过程中,请求和返回的数据是共享的

请求重定向(Redirect)

  • 向客户端发送两次完全不同的请求
  • 所以两次请求中的数据是不同的

最终 URL 地址不同

请求转发(Forward)

  • 由服务器端代为请求,再将结果返回给客户端
  • 所以整个请求的过程中 URL 地址是不变的

请求重定向(Redirect)

  • 由服务器端告诉客户端,需重新访问另一个地址
  • 所以浏览器会重新再发送一次请求
  • 因此客户端最终显示的 URL 并非刚开始请求的地址,所以 URL 地址发生了变化


代码实现不同

请求转发(Forward)

  • 使用 " forward:/index.html "

请求重定向(Redirect)

  • 使用 " redirect:/index.html "

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

tinyViT论文笔记

论文:https://arxiv.org/abs/2207.10666 GitHub:https://github.com/microsoft/Cream/tree/main/TinyViT 摘要 在计算机视觉任务中,视觉ViT由于其优秀的模型能力已经引起了极大关注。但是,由于大多数ViT模型的参数量巨大&#x…

prometheus|云原生|grafana-9.4.3版本的主题更改

一, grafana-9.4.3版本的主题更改 grafana-9.4.3版本应该是目前比较高的版本了,但不知道是什么原因,grafana的主题界面并不多,只有暗色,亮色和系统色三种 配置管理----首选项里可以看到 亮色: 暗色&…

jconsole的基本使用和死锁的检测

jconsole的基本使用和死锁的检测 因为jconsole是JDK自带的,所以安装了JDK就可以直接打开了。 1. 打开方式 cmd命令行打开:输入jconsole,然后按Enter JDK安装目录,bin目录下,双击即可打开 选择一个进程然后打开 可…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-4:内核控制与时间管理函数)

学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。 注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

Windows核心编程 线程

目录 线程概述 进程与线程的关系 线程调度原理 单核与多核的线程处理方式 多线程 线程相关API 线程分配 线程切换时 线程状态 线程退出 线程退出时做的事(正常退出情况) 线程概述 程序磁盘上的一个可执行文件(由指令和数据等组成…

深入理解MySQL索引及事务

✏️✏️✏️今天给各位带来的是关于数据库索引以及事务方面的基础知识 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手&#…

redis持久化:RDB:和AOF

目录 RDB 持久化 1、修改配置文件:redis.conf 2、RDB模式自动触发保存快照 3、RDB模式手动触发保存快照 4、RDB的优缺点 AOF持久化 1、AOF持久化工作流程 2、修改配置文件开启AOF 3、AOF优缺点 4、AOF的重写机制原理 RDBAOF混合模式 redis持久化有两种方…

杰发科技AC7801——ADC软件触发的简单使用

前言 7801资料读起来不是很好理解,大概率是之前MTK的大佬写的。在此以简单的方式进行描述。我们做一个简单的规则组软件触发Demo。因为规则组通道只有一个数据寄存器,因此还需要用上DMA方式搬运数据到内存。 AC7801的ADC简介 7801的ADC是一种 12 位 逐…

机器学习-激活函数的直观理解

机器学习-激活函数的直观理解 在机器学习中,激活函数(Activation Function)是用于引入非线性特性的一种函数,它在神经网络的每个神经元上被应用。 如果不使用任何的激活函数,那么神经元的响应就是wxb,相当…

【数据库】数据库物理执行计划最基本操作-表扫描机制与可选路径,基于代价的评估模型以及模型参数的含义

物理执行计划基本操作符 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏…

十大排序算法中的插入排序和希尔排序

文章目录 🐒个人主页🏅算法思维框架📖前言: 🎀插入排序 时间复杂度O(n^2)🎇1. 算法步骤思想🎇2.动画实现🎇 3.代码实现 🎀希尔排序 时间复杂度O(n*logn~n^2)希尔排序的设…

sql查询优化实际案例

1、第一步:sql优化 正对于海量数据的查询优化,且外键关联比较多的情况,通常情况是下sql层面的优化,有些时候是由于sql不合理的编写导致,如尽量少使用sql内查询等 如:避免使用 left join (select * form …

如何打造垂直LLM的护城河

B2B人工智能初创企业的一个伟大策略是打造“垂直人工智能”产品:成为特定行业的人工智能助手,比如律师、金融服务、医生。 听起来很简单:你可以利用LLM的超能力,并将其应用于宠物行业的特定数据和用例。 这就是我们在Explain所做的…

量子计算的发展

目录 一、量子力学的发展历程二、量子计算的发展历程三、量子计算机的发展历程四、量子信息科学的发展 一、量子力学的发展历程 量子力学是现代物理学的一个基本分支,它的发展始于20世纪初。以下是量子力学发展的几个重要阶段: 普朗克(1900&…

基于JavaWeb+SpringBoot+Vue医院管理系统小程序的设计和实现

基于JavaWebSpringBootVue医院管理系统小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏[Java 源码获取 源码获取入口 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 …

「Java开发中文指南」IntelliJ IDEA插件安装(一)

IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 插件扩展了Intel…

MYSQL基础知识之【创建,删除,选择数据库】

文章目录 前言MySQL 创建数据库使用 mysqladmin 创建数据库使用 PHP脚本 创建数据库 MySQL 删除数据库使用 mysqladmin 删除数据库使用PHP脚本删除数据库 MySQL 选择数据库从命令提示窗口中选择MySQL数据库使用PHP脚本选择MySQL数据库 后言 前言 hello world欢迎来到前端的新世…

网络层(IP协议)

文章目录 网络层IP协议IP协议报头32位源IP地址和目的IP地址:为了解决IP地址不够用的情况 IP地址管理子网掩码特殊IP 路由选择(简介) 网络层 网络层主要负责地址管理和路由选择.代表协议就是IP协议. IP协议 IP协议报头 4位版本: 4: 表示IPv4 ; 6: 表示IPv6 4位首部长度: 描述…

格式化输入输出

跟着肯哥(不是我)学格式化输入输出 C语言格式化输入 在C语言中,格式化输入(Formatted Input)是一种从标准输入读取数据并按照指定格式进行解析的操作,它主要通过使用标准库函数scanf()来实现格式化输入。 …

YOLOv8改进 | 2023 | FocusedLinearAttention实现有效涨点

论文地址:官方论文地址 代码地址:官方代码地址 一、本文介绍 本文给大家带来的改进机制是Focused Linear Attention(聚焦线性注意力)是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测…