首页 > 其他分享 >http请求到达后端的执行过程——网关篇

http请求到达后端的执行过程——网关篇

时间:2024-08-08 16:17:07浏览次数:6  
标签:Pre 网关 http 请求 端的 filter 过滤器 执行 servlet

  当后端接收到一次http请求后,最先会由tomcat服务器接受到,首先创建“HttpServletRequest”和“HttpServletResponse”对象,然后tomcat将请求交给servlet容器处理,servlet容器根据请求的url路径和配置确定应该由哪一个Servlet来处理该请求(也就是应该实例哪一个servlet对象),注意:每一次请求都会重新创建一个servlet对象,然后调用servlet对象的service方法,service方法根据具体的请求类型(GET,POST)调用适当的“doget”,“dopost”方法来处理请求。如果说是spring项目,那么当tomcat需要将请求转交给servlet容器的时候,会转而转交给spring的dispatchservlet容器。注意,这是不会在有选择的创建servlet实例对象,因为spring的所有请求都会交给dispatchservlet一个来接管。

 gateway的执行流程:

  1. 接受请求: 当有一个请求来到spring cloud gateway 时,网关会使用spring handle mapping来匹配请求路径(匹配请求规则: 根据配置文件中的路由规则,网关会检查每一个路由的断言规则(predicates))

  2. 执行Pre-Filters:在请求被路由之前,Pre-Filter会被执行。这些过滤器可以访问控制-黑白名单,进行鉴权,日志记录操作。

  3. 转发请求:如果匹配成功并且成功执行完了Pre-Filter过滤器后,网管会根据匹配路由的url转发到对应的后端服务。注意:这里的chain.filter(exchange);的执行是一个异步的操作。在执行完前置过滤器后,异步执行chain.filter(exchange);无需等待,便开始执行后置过滤器。我们可以在其后添加chain.filter(exchange).then();来有序的执行后置过滤器。

  它的执行流程是:

  Client Request -> [Pre-filter 1] -> [Pre-filter 2] -> ... -> [Pre-filter N] -> Route to Service
  Service Response -> [Post-filter N] -> ... -> [Post-filter 2] -> [Post-filter 1] -> Client Response

  4. 执行Post-Filter: 在后端完成响应服务之后,响应返回给客户端之前,Post-Filter会被执行,这些过滤器可以  修改响应,日志记录

  5. 响应返回。

gateway异步操作的影响:

  因为chain.filter(exchange)是一个异步操作,他会出发过滤器链的下一个过滤器,并立刻返回Mono<Void>。如果没有.then(),你在chain.filter(exchange)后面的代码都会被立刻执行,而不是等待过滤器链执完成。这会导致你尝试获取响应状态码时,响应还没有执行或者完成。

返回结果可能是null或者不正确的状态码。

 

标签:Pre,网关,http,请求,端的,filter,过滤器,执行,servlet
From: https://www.cnblogs.com/y12123/p/18294684

相关文章

  • HttpServletResponse response和HttpServletRequest request什么区别作用是什么
    HttpServletRequest和HttpServletResponse是JavaServletAPI中的两个核心接口,它们分别代表HTTP请求和HTTP响应。这两个对象在处理Web请求时扮演着不同但互补的角色:HttpServletRequest作用:表示客户端发送到服务器的HTTP请求。提供了访问请求参数、headers、cookies......
  • PHP Laravel 5.2 HTTP控制器Controller介绍及示例
    在Laravel5.2中,HTTP控制器是用于处理HTTP请求的主要组件。控制器可以封装业务逻辑,并且可以使你的应用程序更加模块化和易于维护。下面我将详细介绍Laravel5.2中HTTP控制器的基本概念,并提供一些示例。创建控制器在Laravel5.2中,你可以使用Artisan命令来生成......
  • 在 HTTPX 或请求中传递特殊字符而不进行编码
    我使用的API(wunderground)要求日期格式为“2001-01-0110:32:35”,(他们声称)应该将URL转义为“2000-01-01+10%”3A32%3A35"。HTTPX和Requests都做得很好,只是它们将+编码为%2B,这是API不期望的。如何防止请求或HTTPX对+进行编码?示例代码:auth={......
  • SpringBoot项目中HTTP请求体只能读一次?试试这方案
    问题描述在基于Spring开发Java项目时,可能需要重复读取HTTP请求体中的数据,例如使用拦截器打印入参信息等,但当我们重复调用getInputStream()或者getReader()时,通常会遇到类似以下的错误信息:大体的意思是当前request的getInputStream()已经被调用过了。那为什么会出现这个问题呢?......
  • 使用Streamlit构建一个web模拟HTTP请求工具
    目录前言HTTP工具功能点:1.导入库: 2.设置页面配置:3.Markdown格式的说明文本:4.用户输入界面:5.发送请求按钮和逻辑:6.发送HTTP请求并计算请求细节:7.总结 前言    最初就是因为在微信看到一篇文章中,看到此http工具的制作因为觉得Streamlit有无限......
  • java httpclient发送中文乱码
    在使用Java的HttpClient发送请求时,如果遇到中文乱码问题,通常需要确保请求和响应的字符集都正确设置为UTF-8。以下是一些解决方法:指定请求数据的字符集为UTF-8格式:在使用UrlEncodedFormEntity或StringEntity时,确保传递正确的字符集参数。例如:StringEntityentity=newUrlEnco......
  • leetcode 1486. 数组异或操作 https://leetcode.cn/problems/xor-operation-in-an-arr
    1486.数组异或操作题目描述给你两个整数,n和start。数组nums定义为:nums[i]=start+2*i(下标从0开始)且n==nums.length。请返回nums中所有元素按位异或(XOR)后得到的结果。示例示例1:输入:n=5,start=0输出:8解释:数组nums为[0,2,4,6,8],其中(0^......
  • 工业数采网关介绍-天拓四方
    一、引言随着工业4.0的推进和物联网(IoT)技术的飞速发展,工业数采网关作为连接传感器、执行器与上层管理系统的关键设备,在智能制造中扮演着越来越重要的角色。本文将深入探讨工业数采网关的定义、功能、优势及其在现代化工业生产中的应用,以期为相关领域的研究与实践提供参考。二......
  • 工业物联网智能网关的功能、特点以及其在现代工业生产中的应用-天拓四方
    随着信息技术的飞速发展,工业物联网(IIoT)作为第四次工业革命的核心驱动力,正逐渐改变着传统工业的生产方式和管理模式。在工业物联网中,智能网关作为连接感知层与应用层的关键设备,其重要性不言而喻。本文将详细介绍工业物联网智能网关的功能、特点以及其在现代工业生产中的应用,旨在......
  • plc网关选型建议,仅供参考!-天拓四方
    在工业自动化领域中,PLC网关扮演着至关重要的角色。作为连接PLC设备与其他系统(如云计算、大数据分析平台、MES等)的桥梁,PLC网关的选型不仅关系到数据传输的效率和稳定性,更直接影响到整个工业自动化系统的性能和可靠性。因此,本文旨在探讨PLC网关选型时需要考虑的因素,并结合实操经......