HTTP上传大文件要考虑的问题
2023-09-11 14:18:08 时间
1、大文件上传服务器内存占用
一般WEB开发框架如SpringMVC,在基于Web容器如Tomcat处理HTTP请求时,都倾向于采用职责链流水线式的处理机制。HTTP请求被封装为一个可解析对象放在内存里依次往下传。如果请求不光是正常文本,还带着上传文件,则需要考虑Web容器限制当个请求的大小。如很多WEB容器默认一个请求最多分配20M的服务器内存,如果要在一次请求中上传文件则要根据限制上传文件大小调整这个配置。比如100M,这个时候如果有10个人同时上传100M文件,则就会占用1G内存。如果要上传更大文件,则要考虑分割文件分多次请求上传。
如果上传文件占用内存太大可能会导致服务器被拖死,所以部分大型网站用专用服务器来处理大文件上传。
2、文件大小限制
HTTP协议1.1版本中消息体长度字段Content-Length的类型规定为16个字节的Decimal类型【它能表示的最大值大到没朋友】,且没有对该长度做逻辑上限制。但如果程序里用Int类型表示文件大小字节数,由于4个字节的int类型最大能表示的you有符号整数位为2GB-1,无符号整数最大值为4GB,会导致程序能上传的最大文件为2GB或4GB。
3、其它常见问题
- 大文件传输,应该支持断点续传;
- 要有文件校验,校验不对的话能自动重传;
- 要考虑多线程分片上传,并发控制,带宽压力,限速上传;
- 多文件排队上传;
- 中转临时文件的删除机制;
https://www.zhihu.com/question/39593108
相关文章
- 文件上传漏洞
- [转] 通过Ajax方式上传文件,使用FormData进行Ajax请求
- netty系列之:搭建HTTP上传文件服务器
- Windows、Linux之间传输文件的几种方式
- NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用
- JavaWeb(文件上传)
- Unix lrzsz命令 上传本地文件到服务器 / 发送文件到客户端
- C++中TCP socket传输文件
- linux下如何映射宿主机中的文件到容器中?
- linux下split切割的文件如何合并
- MVC文件上传07-使用客户端jQuery-File-Upload插件和服务端Backload组件裁剪上传图片
- 请求与上传文件,Session简介,Restful API,Nodemon
- linux环境下恢复rm误删的文件
- CNVD-C-2020-121325:禅道文件上传漏洞通告
- 模块源代码文件时怎么样变成模块对象的?
- shell脚本实现FTP自动上传文件
- Spring Boot 2.x基础教程:实现文件上传
- SpringMVC使用StandardServletMultipartResolver上传文件
- issue - 登录前的信息和标识文件
- java的Spring MVC 文件上传
- Hadoop如何将TB级大文件的上传性能优化上百倍
- RestTemplate 优雅将字符串以文件的方式上传
- SpringMVC 理论与有用技术(二)文件上传
- 对FreeRTOS的task.c文件源码的分析笔记(一)
- SecureCRT中使用 rz 上传文件 遇到 rz: command not found 的解决办法
- 工具及方法 - 使用Total Commander来查找重名文件
- 文件上传accept 属性 文件上传只能上传固定格式