使用Http请求下载文件带来的问题

java.io.IOException: Broken pipe
当使用http请求的方式将文件作为响应内容给浏览器,这个时候如果浏览器未开启自动下载(浏览器可能会终止这个tcp连接),文件不会下载成功,但是这个时候请求已经到达服务器,如果这个时候,响应的文件达到一定的值(服务器玩tcp通道中写入数据),服务器会出现java.io.IOException: Broken pipe异常。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Transfer-Encoding和Content-Length

Transfer-Encoding是HTTP响应头的一个字段,用于指示服务器在传输消息主体时所使用的编码方式。它告诉客户端如何解析消息主体。常见的值包括chunked和identity。
chunked:表示消息主体被分成了一系列的块(chunks)。每个块都包含块的大小和块的内容。这种编码方式允许服务器在传输过程中动态生成消息主体,无需知道消息主体的总大小。这对于动态生成内容或长时间生成的内容非常有用,因为它允许服务器逐块发送数据,而不必等待整个消息主体完全生成。
identity:表示消息主体没有经过任何编码,是未经压缩或转换的原始内容。当Transfer-Encoding字段的值为identity时,消息主体的大小通过Content-Length字段来指定。
Transfer-Encoding头的存在优先级高于Content-Length头。如果存在Transfer-Encoding头,那么消息主体的长度由编码方式决定;如果不存在Transfer-Encoding头,则消息主体的长度由Content-Length头指定。

传输编码(Transfer-Encoding)和内容长度(Content-Length)由服务器端生成响应时所采用的具体情况决定(同一个请求多车会有两种不同的响应,请求头为Transfer-Encoding或Content-Length)。

Transfer-Encoding决定
如果服务器能够确定消息主体的总大小,并且在传输过程中不需要动态生成内容,那么服务器通常会使用Content-Length来指定消息主体的长度,并且不需要使用Transfer-Encoding头。
如果服务器无法确定消息主体的总大小,或者希望在传输过程中动态生成内容(例如流式传输),那么服务器可能会选择使用Transfer-Encoding: chunked,以便能够逐块传输消息主体,而不必等待整个消息主体完全生成。

Content-Length决定:
如果使用Content-Length头来指定消息主体的长度,那么客户端可以根据这个长度来准确地判断消息主体的结束位置,而不需要进行流式解析。这种情况下,通常不需要使用Transfer-Encoding头。
如果消息主体的长度无法确定,或者需要在传输过程中动态生成内容,那么通常会选择使用Transfer-Encoding: chunked来实现分块传输。

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

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

相关文章

Dynamo初学常识梳理(四)——Revit图元

希望想学 Dynamo 的小伙伴坚持住,每天积累一点点知识,Dynamo 你很快就能上手的!Dynamo 并不是你想的那样难学哦! 今天要讲的是如何从 Dynamo 中获取 Revit 的图元,这些节点很常用,不需要全背下来&#xff0…

指针运算笔试题解析

题目1: int main() { int a[5] { 1, 2, 3, 4, 5 }; int* ptr (int*)(&a 1); printf("%d %d", *(a 1), *(ptr - 1)); return 0; } ptr中存放了整个数组的地址,ptr是int*类型,&a1跳到5的地址后又被强制类…

Freesia Spring配置文件与其他文件

common-api模块【application.yml文件】 project:version: 来自顶级pom.xml的properties配置 --- spring:profiles:# 根据当前活跃环境指定对应的 application文件active: profiles.active --- spring:datasource:driver-class-name: com.p6spy.engine.spy.P6SpyDriverurl: jd…

算法DFS 复习

思路:for 代表的是每一位的纵向,数字变化,dfs 代表的是横向的,位置变化。vis 来做到每个枚举的数不重复,并且要在搜索前记录,搜索后还原。模拟该样例 dfs3 的时候是输出,dfs0,1&…

『大模型笔记』Ollama ModelFile(模型文件)

Ollama ModelFile(模型文件) 文章目录 一. Ollama 模型文件1.1. 格式1.2. 示例1.2.1. 基本`Modelfile`1.2.1. `模型文件`位于 [ollama.com/library](https://ollama.com/library)1.3. 说明1.3.1. From(必填)1.3.1.1. 从 llama2 构建1.3.1.2. 从 `bin` 文件构建1.3.2. PARAMETER…

【DAY05 软考中级备考笔记】线性表,栈和队列,串数组矩阵和广义表

线性表,栈和队列,串数组矩阵和广义表 2月28日 – 天气:阴转晴 时隔好几天没有学习了,今天补上。明天发工资,开心😄 1. 线性表 1.1 线性表的结构 首先线性表的结构分为物理结构和逻辑结构 物理结构按照实…

【LabVIEW FPGA】CIC滤波器

一、CIC滤波器应用概述 在通信数字信号上下变频时,经常会用到对数字信号的升采样和降采样,即通过CIC数字速率器实现变采样率。 二、滤波器IP 首先设置滤波器基本参数(filter specification) 滤波器类型(Filter Type…

uipath调用js代码

1,调用js代码,不带参数,没有返回值 为了去掉按钮的disabled属性 function(){ document.getElementsByClassName(submitBtn)[0].removeAttribute(disabled); } 2,调用js代码,带参数,没有返回值 输入参数&a…

使用Go语言编写API接口的技术

在本篇技术性博客中,我们将讨论如何使用Go语言编写一个简单的API接口。我们将使用net/http包来处理HTTP请求和响应,并且通过JSON来传递数据。 步骤一:定义API响应结构体 首先,我们需要定义一个结构体来表示API的响应。在我们的示…

【conda】实现conda环境迁移的4种方式

文章目录 方案1: 使用conda pack制作压缩包并在目标环境解压使用方案2: 使用package列表文件重新创建conda环境方案3: scp将环境文件夹拷贝到目标主机上方案4: 通过--clone先克隆一个环境再conda pack打包迁移 方案1: 使用conda pack制作压缩包并在目标环境解压使用 适合离线环…

基于51单片机的四位并行数据主从机传输设计

基于51单片机的四位并行数据主从机传输设计[proteus仿真] 主从机通信系统这个题目算是课程设计和毕业设计中常见的题目了,本期是一个基于51单片机的四位并行数据主从机传输设计 需要的源文件和程序的小伙伴可以关注公众号【阿目分享嵌入式】,赞赏任意文…

WPF调用webapi并展示数据(一):WPF页面的构建

有错误欢迎大家给我指正 本项目为WPFPrismnet6.0 RestSharp调用API UI为MaterialDesignThemes EF Core自动生成数据库 效果展示: 项目启动后点击待办事项进入数据展示页 源码地址:绎Ronion/WPF.ToDo (gitee.com) 1.准备 1.1创建WPF项目 1.2 创建…

解决划分标签问题的算法分析与实现

引言 在这篇博客中,我们将讨论一种解决划分标签问题的算法,该算法可以有效地将输入字符串划分为尽可能多的子串,使得每个字母最多出现在一个子串中。我们将通过代码实现和详细解释来展示这一算法的工作原理。 题目描述 给你一个字符串 s 。…

Axure 入门文档 文件格式 全局样式 元件居中

文件格式 .rp 原型文件.rplib:元件库文件.rpteam 团队项目文件.html 项目网页文件 批量设置居中 选中多个,然后上方任务栏即可设置 设置自定义页面视图尺寸 项目-自适应视图设置 点击页面空白处就可以使用 添加元件说明 当一个元件创建好,可以设…

[R] Underline your idea with ggplot2

Preview: # 介绍:之前的教程中,我们学习了如何使条形图或直方图看起来更好 比如: 1. How to select a graph calibrate the geom part 2. How to select variables calibrate the aes part 3. How to add a title calibrate the labs …

消除类游戏解题思路(ccf 201512-2)

问题描述   消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有连续三个或更多的相同颜色的棋子时,这些棋子都被消除。当有多处可以…

指针乐园----上

大家好,我是Beilef,许久未见还请多多关照。 文章目录 目录 文章目录 前言 一、指针是什么 二、指针的运用 1.指针变量和地址 2.指针变量和解引⽤操作符(*) 解引用操作符 3.指针变量类型及意义 3.2指针的-整数 3.3 void* 指针 …

Android13 framework层添加关机接口

framework层修改: t0_sys/frameworks/base/core/api/current.txt method RequiresPermission(android.Manifest.permission.REBOOT) public void reboot(Nullable String);method public void rebootp();t0_sys/frameworks/base/core/java/android/os/IPowerManager…

docker-compose Install Dockge

Dockge Dockge 是一个精美的、易于使用的、反应式的自托管 docker compose.yaml 面向堆栈的管理器。 主要特性: 通过Web页面管理compose.yaml文件。 创建/编辑/启动/停止/重新启动/删除容器。更新Docker镜像。交互式Web终端。响应式设计,实时更新进度(Pull/Up/Down)和Web…

C++搜索二叉树的实现

搜索二叉树的实现 keykey-value测试用例 key namespace key{ template<class k> struct BSTreeNode {BSTreeNode<k>* _left;BSTreeNode<k>* _right;k _key;BSTreeNode(const k& key):_left(nullptr),_right(nullptr),_key(key){}};template <class k…