当前位置:网站首页>重定向和请求转发详解
重定向和请求转发详解
2022-04-23 15:09:00 【云杉木屋】
重定向和请求转发详解
摘要:这篇笔记着重介绍了重定向和请求转发这两个请求方式的区别、各自的特点。
1.请求转发
请求转发本身是一种服务器行为,其本质是客户端请求到达服务端之后,服务端将这个请求信息进行一个转发并且将请求转发的对象进行保存,此时如果我们使用的是浏览器,会发现浏览器上方的URL路径栏中的路径是没有变化的。这是一种服务器的内部行为,是一个servlet将一个请求转发给服务器内部的另一个servlet的行为,这种跳转只能在服务器内部发生,也就是说只能将请求转发到一个位于该服务器内部的资源中,而不能转发到外部,这个和服务器内部的请求信息保存方式有关。接下来我们使用图解来描述请求转发的过程:
我们在客户端中向服务端发出请求,首先需要使用URL进行一次路径构建,建立好连接之后我们才可以发送我们的请求,这是一个计算机网络相关的知识,我们在进行网络通信之前,首先会通过某种方式建立起一个连接,然后再进行数据传输,数据传输中的主体就是我们发出的请求,我们的请求在服务器外部实际上没有一种规范化的保存格式,它们就是网线上的电信号或者光信号,此时他们位于物理层,物理层的数据不能被应用层的应用直接识别,但是它们可以通过链路层协议被指定的服务器接收,被服务器接收之后,自然就需要驱动和操作系统的处理,然后发送到Tomcat了,在接收到信息之后Tomcat会将这些请求信息转化为HttpServlet格式保存在自身进程之中,并且根据其请求目标进行发送,如上图它被发送给了ServletA,ServletA是一个Servlet,在Servlet中,要求请求被转化为HttpServletRequest的格式,因此这里还存在一次格式转化,而ServletA发现其中存在请求转发的操作,于是执行相关代码,Tomcat就会将这个请求对象进行格式转换,先转换为HttpServlet的格式,然后再转发给另一个Servlet。在这个过程中,HttpRequest不能被转化为Request,而只能是在HttpServletRequest与HttpRequest两个状态间转换,因为Tomcat不提供将内部格式重新变为Request格式的功能,因此,请求转发不能向外部资源跳转,并且是客户端对服务端的一次请求。
请求转发是一种服务器端行为,和用户无关,完全由服务端实现。
2.重定向
重定向和请求转发都可以实现页面跳转的功能,但是我们在学习他们的时候也就是止步于此了,顶多知道重定向会让URL发生改变,而对于资源的请求也不能再使用之前页面的相对路径方式,只能是重新以当前的页面为出发点进行请求了。这是为什呢,我们用图解的方式来看看重定向的原理:
在重定向中,使用到了另一个对象,Response对象,这个对象是专门向客户端返回信息用的,使用重定向的时候,Servlet没有再继续向下跳转,而是使用HttpServletResponse对象向客户端进行了返回,它将ServletB的地址返回给了客户端,然后让客户端去重新访问这个地址,于是客户端就又发出了一次请求,这次请求是直接向ServletB的请求。这就解释了为什么我们使用重定向的时候,URL会发生改变,因此我们重新发送了一次请求,重定向是一个二次请求,和请求转发是不同的,与此同时,ServletA返回的这个地址不一定是服务器内部资源地址,也可以使一个站外地址,这样一来就能实现站外资源的跳转。
请求转发不是单纯的服务端行为,而是一种服务器端指导的客户端行为。
3.总结
在使用浏览器观察的时候我们能够发现请求转发是只有一次请求,而重定向则出现了二次请求,二者各有利弊,重定向的时间更长,并且需要重新定位资源,请求转发时间稍短,但是只能访问站内资源,通常我们在书写站内网页跳转的时候不会使用重定向,这是为了避免因为重新定位资源引起的麻烦,当然我们对于资源的访问使用绝对定位的方式也是不碍事的,这里只能说是根据具体情况做选择了。
版权声明
本文为[云杉木屋]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_41219157/article/details/124350059
边栏推荐
- async关键字
- January 1, 1990 is Monday. Define the function date_ to_ Week (year, month, day), which realizes the function of returning the day of the week after inputting the year, month and day, such as date_ to
- Nuxt project: Global get process Env information
- Borui data and F5 jointly build the full data chain DNA of financial technology from code to user
- X509 certificate cer format to PEM format
- [thymeleaf] handle null values and use safe operators
- API gateway / API gateway (II) - use of Kong - load balancing
- Progress in the treatment of depression
- win10 任务栏通知区图标不见了
- The life cycle of key value in redis module programming
猜你喜欢
Brute force of DVWA low -- > High
Is asemi ultrafast recovery diode interchangeable with Schottky diode
About UDP receiving ICMP port unreachable
8.4 realization of recurrent neural network from zero
Progress in the treatment of depression
What is the effect of Zhongfu Jinshi wealth class 29800? Walk with professional investors to make investment easier
The win10 taskbar notification area icon is missing
Borui data and F5 jointly build the full data chain DNA of financial technology from code to user
How to use OCR in 5 minutes
Detailed explanation of C language knowledge points -- first understanding of C language [1] - vs2022 debugging skills and code practice [1]
随机推荐
Detailed explanation of C language knowledge points -- data types and variables [1] - carry counting system
eolink 如何助力远程办公
分享3个使用工具,在家剪辑5个作品挣了400多
The win10 taskbar notification area icon is missing
Will golang share data with fragment append
Subnet division of flannel principle
How to upload large files quickly?
setcontext getcontext makecontext swapcontext
Leetcode151 - invert words in string - String - simulation
Go basic reflection
调度系统使用注意事项
Have you really learned the operation of sequence table?
大文件如何快速上传?
让阿里P8都为之着迷的分布式核心原理解析到底讲了啥?看完我惊了
Daily question - leetcode396 - rotation function - recursion
LeetCode151-颠倒字符串中的单词-字符串-模拟
Three uses of kprobe
Detailed explanation of C language knowledge points -- first understanding of C language [1] - vs2022 debugging skills and code practice [1]
X509 certificate cer format to PEM format
Mds55-16-asemi rectifier module mds55-16