Http 响应头 Transfer-Encoding : chunked 导致 浏览器客户端请求错误问题

news2024/11/26 6:19:39
  • 生产环境服务器规划如下
服务器类型网络环境
cal.comnginx外网
192.168.7.15:9200tomcat内网
192.168.7.16:9200tomcat内网
sdd.comnginx内网
192.168.7.15:9100tomcat内网
192.168.7.16:9100tomcat内网

192.168.7.15和192.168.7.16是做个负载均衡。目前的需求是用户访问外网的cal.com 返回 内网 192.168.7.15:9200 和 192.168.7.16:9200的页面,数据需要再次请求sdd.com,sdd.com转发到内网的
192.168.7.15:9100 和 192.168.7.16:9100。

请求的流程图如图所示:

在这里插入图片描述

  • 问题描述

在cal.com上线后,用户发起请求,发现9200端口上的静态页面请求可以返回,而ajax请求数据无法返回,所有的ajax请求是做了代理的,代理到了sdd.com。既然能返回静态页面数据,说明肯定不是cal.com对应的服务器问题,而是在sdd.com这一环节存在问题,通过添加日志输出,发现可以正常请求回来数据,并写入到响应体中去,但是前端一直请求错误。

  • 解决

首先通过增加日志打印,排查方法的哪一步出现了问题,因为9200的tomcat服务器所有的静态资源是可以正常返回的,这排除了服务器问题,比较离奇的时候,所有的日志打印地方都可以正常输出,可以正常请求到sdd.com的结果,但是就是返回不了数据,这一步至少确定了 从9200发送sdd.com是没问题的。那么继续再排查其他原因,经过多次的代码反复注释,发现9200设在设置响应头的这一步出现了问题,具体的就是只要有Transfer-Encoding : chunked 就会导致浏览器报错。

经过分析此请求头发现,只要响应头中携带了这个Transfer-Encoding : chunked 标头,浏览器就会报错,只要一去掉,就不会报错。后来得知Transfer-Encoding 这是一种传输编码方式,如果存在这个标头,则表示服务器无法一次性计算出本次响应的content-length,需要将响应内容类型分段传输/分块传输给客户端,每一块都需要用一个十六进制的长度表示当前块传输内容的字节大小,当客户端收到最后一个块的大小为0时,表示此次请求完整的结束了。

错误代码:

        clientHttpResponse.getHeaders().forEach((key, value) -> value.forEach(it -> {
                response.setHeader(key, it);
        }));

这里面的关键就是 response.setHeader(key, it); 给tomcat请求设置响应头 Transfer-Encoding :chunked ,但是实际的响应体数据格式却不是chunked 分块格式,这就导致了cal.com nginx服务器在接收到tomcat服务器的响应时根本无法处理成功,进而给浏览器也报错了。

这里由于sdd.com这台nginx服务器,开启了传入编码后

location / {
        chunked_transfer_encoding       on;
}

9200端口发送请求的工具类收到sdd.com返回的数据以后,进行了正确的格式解析,此时已经获取到了完整的响应体数据,那么这时候如果再按照sdd.com的响应头信息去给cal.com传输的话,就出现问题了,因为格式明明是完整的,而响应头却设置了 Transfer-Encoding : chunked 。这就导致匹配不起来了。

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

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

相关文章

SIEM工具保护云数据安全

规范对云中敏感数据的访问、跟踪已批准和未批准的应用程序的使用情况以及检测基础架构中影子 IT 应用程序的使用情况,将有助于防止针对云的内部和外部威胁。由于组织的云边界超出了传统的网络边界,因此实施严格的策略来保护敏感数据,并获得对…

宠物界的“富士康”IPO,福贝宠物冲刺上交所主板

随着社会经济的不断发展,人们生活水平的提高,宠物经济逐渐成为了一个备受关注的话题。无论是对于宠物爱好者还是宠物经济从业者,宠物经济的重要性都不容忽视。福贝宠物自然也是宠物经济下的产物。 福贝宠物在上交所主板IPO的申请获得受理。本…

开源单用户客服系统源码-上传附件功能-elementui 异步上传文件【唯一客服开发商】...

之前开源的单用户客服系统,上传附件成功后,还不能展示出文件形式,今天把上传展示出文件形式给开发完善一下。 我想要实现的效果是,展示出文件的名称和大小信息 后端返回一个带有文件信息的json结果,前端把该信息组织一…

打造中国的Web3.0基座,张平院士谈“构建元宇宙及支撑技术“

在近期举办的全球元宇宙大会开幕式上,中国工程院院士、北京邮电大学教授张平出席大会并发表了题为《构建元宇宙及支撑技术》的开场演讲。 演讲中,张平院士分析阐述了理想的元宇宙技术运行状态。他表示,元宇宙需要实现大规模用户持续在线、高…

【JS】1678- 重学 JavaScript API - Broadcast Channel API

当我们网页需要在不同的浏览器窗口之间共享数据时,可能需要使用 WebSocket 或 WebRTC 等技术。但是,这些技术会过于复杂。而浏览器自带的 Broadcast Channel API[1] 可以让我们轻松地在不同浏览器窗口之间共享数据,而无需使用复杂的技术。 本…

Redis入门到实战(实战篇)缓存更新、穿透、雪崩、击穿!

Redis基础篇 Java面试宝典-redis 实战篇Redis 开篇导读 亲爱的小伙伴们大家好,马上咱们就开始实战篇的内容了,相信通过本章的学习,小伙伴们就能理解各种redis的使用啦,接下来咱们来一起看看实战篇我们要学习一些什么样的内容 短信…

电脑屏幕录制软件哪个好用?推荐这2款!

案例:怎样才能找到一款好用的电脑录屏工具? 【我工作时,需要经常录制电脑屏幕,而我现在使用的录屏工具不好用,十分影响我的工作效率。我需要一款好用的电脑录屏工具,小伙伴们有没有推荐?】 如…

Java并发编程之AQS

目录 一,什么是AQS二,AQS核心知识1,核心思想2,AQS中的共享状态值-state3, 同步队列为什么称为FIFO4, Condition队列-单向队列 三,具体实现1,独占模式下的AQS2,共享模式下…

RdViewer远控隐蔽利用及钓鱼攻击

本文转载于: https://mp.weixin.qq.com/s?__bizMzg4NzkwMDA5NQ&mid2247484000&idx1&sn56b24135aa0aa77a690ff29566341c4e&chksmcf8210b0f8f599a6eaa7743bc65ad4e79400839c40289a8f5407e9732e22a4ae693c0701d1b0&mpshare1&scene23&srci…

未来城市的无限可能

生命体:Mix ta没有棱角但又泾渭分明 冰冷而又生机勃勃 最近受《环球》杂志记者邀请,对未来城市展开了若干讨论,分享给大家: 《环球》杂志 未来城市是什么样子的?请用几个关键词或几句话描述。 我理想中的未来城市应该具…

蒙特卡洛方法的基本介绍和简单应用(求圆周率和定积分)

目录 一、什么是蒙特卡洛方法 二、蒙特卡洛方法的基本思想 三、用蒙特卡洛方法求圆周率 π 四、用蒙特卡洛方法求定积分 你听说过 "蒙特卡洛法" 吗?哦,那是一种计算不规则图形面积的计算机程序算法,具体做法是在软件中用大量的…

【银河麒麟V10】【服务器】麒麟容器常见问题

一、麒麟容器镜像下载链接 &#xff08;1&#xff09;kylin-V10-SP1-0711-x86_64 docker镜像下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/10WyBYRoOykqgnagjnoxdXw?pwdt4h5 提取码&#xff1a;t4h5 二、容器基础使用 #导入镜像 docker load < k…

6.100ASK_V853-PRO开发板支持MIPI摄像头

0.前言 ​ 100ASK_V853-PRO开发板支持4LINE的MIPI摄像头和2LINE的MIPI摄像头&#xff0c;使用百问网提供的Tina SDK包生成的镜像&#xff0c;系统已经配置好了&#xff0c;可以直接使用。本章介绍如何去适配一个MIPI摄像头&#xff0c;本文所用的2LINE的MIPI摄像头&#xff0c…

什么是应用交付网络(ADN)

从CDN到ADN CDN&#xff08;内容分发网络&#xff09;在90年代末受到麻省理工学院的启发并完成发明&#xff0c;00年代初成立第一家成功的CDN商业企业Akamai。CDN的目标是相对于最终用户在空间上分配服务&#xff0c;以提供高可用性和高性能。随着互联网的发展&#xff0c;CDN…

建筑行业搭建BI数据可视化平台,已成为大势所趋

建筑行业的项目管理是一个系统而复杂的过程&#xff0c;其重点主要是寻求造价、质量、工期等几个方面的平衡点&#xff0c;并且对项目的整个过程必须要有一个清晰和直观的了解。 因此可以通过BI数据可视化分析将各个节点的系统数据、业务数据完整的呈现&#xff0c;将各管理层…

数字孪生园区可视化大屏系统-广州华锐互动

工业园区是现代工业化生产的重要组成部分&#xff0c;也是推动经济发展和提升城市形象的重要载体。而数字孪生园区可视化大屏系统作为一种新兴的技术应用&#xff0c;可以为工业园区的建设、管理和发展带来很大的价值。 首先&#xff0c;数字孪生园区可视化大屏系统可以帮助工业…

[C++]普通二叉搜索树实现

目录 1 二叉搜索树的基本概念 2 二叉搜索树的构建 2.1 二叉搜索树的结点 2.2 搜索树类的结构 3 成员函数 3.1 插入 3.2 查找 3.3 删除&#xff08;重点&#xff09; 3.4 默认成员函数的辅助函数 4 普通的二叉搜索树的效率 1 二叉搜索树的基本概念 二叉搜索树又称二叉…

Java框架学习05(Spring事务详解)

1、什么是事务&#xff1f; 事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 我们系统的每个业务方法可能包括了多个原子性的数据库操作&#xff0c;比如下面的 savePerson() 方法中就有两个原子性的数据库操作。这些原子性的数据库操作是有依赖的&…

相亲交友app开发上线运营的整个流程是什么

一、相亲交友app开发基本流程 1、需求分析&#xff1a;需求分析是相亲交友app源码开发的第一步&#xff0c;也是最重要的一步。在需求分析阶段&#xff0c;可以了解客户对于系统的需求&#xff0c;确定系统功能实现的大致方向和功能。 2、系统架构&#xff1a;系统架构阶段就是…

这里有一份教你每天用领英获取20个询盘的免费课程,手慢无

于2023年3月22日&#xff0c;我们圆满完成了深圳宝安的外贸分享交流会&#xff0c;时隔两个月即将迎来我们的广州场。 在上次深圳会议&#xff0c;有幸邀请到江西省跨境电商协会会长莅临 给大家分享了&#xff1a; 如何帮助传统制造业从“0”开始做外贸、如何借助平台为企业…