最近写了一个自己的http服务器(基于netty,但不使用netty自带的http协议包)。一般的请求都是直接使用指定content-length的方式去实现的,但对于一些大文件的传输效率则不太理想,之前一直只是大概知道分块传输,但一直没有真正码过相关代码,这次就尝试实现了一下。

总共三部分:

1、设置响应头

2、分块传输: 长度\r\n内容\r\n,长度为16进制字符串

3、空数据块:用于标记结束, 0\r\n\r\n

    private String CRLF = "\r\n";private void write(ChannelHandlerContext ctx) throws IOException {//响应头ctx.writeAndFlush(getHeaderByteBuf());//数据分块传输InputStream in = App.class.getClassLoader().getResourceAsStream("jquery-3.0.0.js");byte[] bs = new byte[1024];int len = 0;while((len = in.read(bs)) > 0) {ctx.writeAndFlush(getChunkedByteBuf(bs, len));}//空数据块表示结束ctx.writeAndFlush(getEnd());}/*** 响应头信息* @return*/private ByteBuf getHeaderByteBuf() {StringBuffer header = new StringBuffer();header.append("HTTP/1.1 200 OK").append(CRLF);header.append("content-type: application/javascript").append(CRLF);header.append("transfer-encoding: chunked").append(CRLF).append(CRLF);return Unpooled.copiedBuffer(header.toString().getBytes());}/*** 获取chunked数据块* size(16进制长度)\r\n content(具体内容)\r\n* @param bs* @param len* @return* @throws IOException*/private ByteBuf getChunkedByteBuf(byte[] bs, int len) throws IOException {ByteArrayOutputStream out = new ByteArrayOutputStream();//size\r\nout.write(Integer.toHexString(len).getBytes());out.write(CRLF.getBytes());//content\r\nout.write(bs, 0, len);out.write(CRLF.getBytes());return Unpooled.copiedBuffer(out.toByteArray());}/*** 获取空数据块 0\r\n\r\n* 空数据块是最后传输,表示数据结束* @return*/private ByteBuf getEnd() {StringBuffer contentCount = new StringBuffer("0").append(CRLF).append(CRLF);return Unpooled.copiedBuffer(contentCount.toString().getBytes());}

HTTP协议 chunked相关推荐

  1. c客户端http post chunked协议上传到服务器demo源码

    下面例子中 :c 客户端采用 chunked协议上传到服务器,java 服务器返回的不是chunked 协议 chunked 编码协议格式参考 https://blog.csdn.net/wy5761 ...

  2. HTTP返回内容前面出现一个多出来的数字 Transfer-Encoding: chunked

    我们用测试工具例如postman测试post或者get返回内容是很正常的.但是从编程调试可以看到变量的内容是这样的: postman: HTTP/1.1 200 OK Date: Fri, 09 Se ...

  3. cowboy源码分析

    2013-01-21 by 谢鸿锋 原创文章,转载请注明:转载自Erlang云中漫步 目录 ================================= 一.概述 二.ranch源码分析 三.c ...

  4. HTTP协议中的chunked编码解析

    " HTTP协议中的chunked传输编码全接触." 在HTTP协议中,服务器发往客户端的数据中,通常都包括HTTP头和HTTP体,当存在HTTP体的时候,HTTP体的长度通常是由 ...

  5. http协议中content-length 以及chunked编码分析

    转载请注明出处 http://blog.csdn.net/yankai0219/article/details/8269922 0.序 1.http/1.1协议中与chunked编码的相关字段 1)E ...

  6. http协议里的chunked编码与测试

    http协议里的chunked编码与测试 如果有写过http下载的人,或多或少了解一点chunked编码的传输方式.例如笔者最初不知道这个http传输方式,以前能行的代码有一天就突然不行了,抓包才发现 ...

  7. HTTP 协议之 Chunked 解析

    这里填写标题 1. HTTP 协议之 Chunked 解析 1. HTTP 协议之 Chunked 解析 在网上找了好一会, 始终没发现有解析 Chunked 编码的文章, 那就自己写一个吧, 呵呵. ...

  8. java chunked编码解码_HTTP协议中的CHUNKED编码解析

    HTTP协议中的TRANFER-ENCODING:CHUNKED编码解析 通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输.c ...

  9. java http data chunk_Http chunked协议

    HTTP协议中的TRANFER-ENCODING:CHUNKED编码解析 通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输.c ...

最新文章

  1. SpringBoot如何自动生成实体类和Dao层以及映射文件(mybatis generator 自动生成代码)
  2. HDU 1153 magic bitstrings(读题+)
  3. vivado实现异步复位的D触发器
  4. otsu阈值分割算法原理_大津二值化算法OTSU的理解
  5. vue项目运行启动方法(从github上下载了一个前端项目进行运行)
  6. springboot+vue用websocket消息推送和监听端口
  7. android 机顶盒 系统开发入门,读《Android电视机(机顶盒)初次开发的一些经验分享》后的笔记...
  8. IDEA查看Maven路径
  9. NFNet的学习笔记
  10. (亲测无坑)Centos7.x使用kubeadm安装K8s集群1.15.0版本
  11. Java命名规范+常量定义方法
  12. 适合人工智能开发的5种最佳编程语言优缺点对比
  13. python仿真电力系统自动化技术_基于MSAA的自动化封装和设计—python版(转)
  14. 云服务器维护安全管理制度,云服务器安全管理制度
  15. JavaScript中的this指向以及bind()函数
  16. 【数据分析与挖掘(二)】面试题汇总(附答案)
  17. android p屏幕使用时间,MIUI迎来第414周更新,新增屏幕使用时间,小米6获Android P更新!...
  18. C语言:开平方判断素数
  19. mysql(zip版)下载安装教程
  20. Sandbox——沙箱技术,来自chromium开发文档

热门文章

  1. 【重写爬虫案例】百度图片、今日头条今日街拍爬取图片中遇到的问题
  2. Vetur can‘t find `tsconfig.json` or `jsconfig.json` in e:\决策测试
  3. 电子发票的板式文件服务器地址是什么,税务Ukey电子发票配置菜单参数设置操作指南.pdf...
  4. 我的世界基岩版开服务器教程BDS篇
  5. 戳进来,带你走近飞凌嵌入式旗舰级AIoT芯RK3588开发板
  6. 关于java解析bvh动作文件
  7. 架构活动需要尊重和顺应人性
  8. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java影视创作论坛系统13b52
  9. (一)Graphvite源码编译安装——faiss 源码安装
  10. geoJson 下载