对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用
1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer-Encoding:chunked的形式,通知页面数据是否接收完毕,例如长连接或者程序运行中可以动态的输出内容,例如一些运算比较复杂且需要用户及时的得到最新结果,那就采用chunked编码将内容分块输出。
2.除了如1所述之外的情况一般都是可以获取到Content-Length的。
在HTTP协议中,Content-Length用于描述HTTP消息实体的传输长度the transfer-length of the message-body。在HTTP协议中,消息实体长度和消息实体的传输长度是有区别,比如说gzip压缩下,消息实体长度是压缩前的长度,消息实体的传输长度是gzip压缩后的长度。
在具体的HTTP交互中,客户端是如何获取消息长度的呢,主要基于以下几个规则:
响应为1xx,204,304相应或者head请求,则直接忽视掉消息实体内容。
如果有Transfer-Encoding,则优先采用Transfer-Encoding里面的方法来找到对应的长度。比如说Chunked模式。
“如果head中有Content-Length,那么这个Content-Length既表示实体长度,又表示传输长度。如果实体长度和传输长度不相等(比如说设置了Transfer-Encoding),那么则不能设置Content-Length。如果设置了Transfer-Encoding,那么Content-Length将被忽视”。这句话翻译的优点饶,其实关键就一点:有了Transfer-Encoding,则不能有Content-Length。
Range传输。不关注,没详细看了:)
通过服务器关闭连接能确定消息的传输长度。(请求端不能通过关闭连接来指明请求消息体的结束,因为这样可以让服务器没有机会继续给予响应)。这种情况主要对应为短连接,即非keep-alive模式。
HTTP1.1必须支持chunk模式。因为当不确定消息长度的时候,可以通过chunk机制来处理这种情况。
在包含消息内容的header中,如果有content-length字段,那么该字段对应的值必须完全和消息主题里面的长度匹配。
“The entity-length of a message is the length of the message-body before any transfer-codings have been applied”
也就是有chunk就不能有content-length 。
其实后面几条几乎可以忽视,简单总结后如下:
1、Content-Length如果存在并且有效的话,则必须和消息内容的传输长度完全一致。(经过测试,如果过短则会截断,过长则会导致超时。)
2、如果存在Transfer-Encoding(重点是chunked),则在header中不能有Content-Length,有也会被忽视。
3、如果采用短连接,则直接可以通过服务器关闭连接来确定消息的传输长度。(这个很容易懂)
结合HTTP协议其他的特点,比如说Http1.1之前的不支持keep alive。那么可以得出以下结论:
1、在Http 1.0及之前版本中,content-length字段可有可无。因为这之前都不支持长连接.
2、在http1.1及之后版本。如果是keep alive,则content-length和chunk必然是二选一。若是非keep alive,则和http1.0一样。content-length可有可无.
综合之上总结, 我们的问题: tinyproxy HTTP服务器返回是以HTTP/1.0返回的, 而且标识了
Connection: Close头. 而浏览器请求是以HTTP/1.1请求, 并标识了Connection: Keep-Alive请求的, 所以浏览器期望收到至少带有Transfer-Encoding(重点是chunked)或者Content-Length其中一种方式的头. 而我们的代理直接发送HTTP响应应该就有问题: 
尝试解决办法:
1. hmconfig解析HTTP, 收到的HTTP响应如果带有Connection: Close的数据发送完成后, 关闭对浏览器的连接.
2. 设备端解析HTTP, 对没有content-length的HTTP响应补充头.
来自为知笔记(Wiz)

转载于:https://www.cnblogs.com/lovelacelee/p/5385683.html

http响应头里没有或者有content-length的几种可能性相关推荐

  1. The maximum string content length quota (8192) has been exceeded while reading XML data

    原文: The maximum string content length quota (8192) has been exceeded while reading XML data 问题场景:在我们 ...

  2. http协议中的响应代码从 1xx ~ 5xx,一共有41种

    http协议中的响应代码从 1xx ~ 5xx,一共有41种 http://how2j.cn/k/http/http-response-code/572.html 转载于:https://www.cn ...

  3. http 响应头里content-length 的几种情况

    对于http的请求返回结果要进行内容的长度校验主要有两种方式,二者互斥使用 1.客户端在http头(head)加Connection:keep-alive时,服务器的response是Transfer ...

  4. vue 获取响应头里set-cookie的值_最简化 VUE的响应式原理

    前言 前端目前两个当家花旦框架 VUE React,它们能够流行开来,响应式原理做出了巨大贡献.毕竟,它通过数据的变更就能够更新相应的视图,极大的将我们从繁琐的DOM操作中解放出来. 所以掌握它们的响 ...

  5. vue下载blob无法获取响应头里面的Content-Disposition来提取文件名

    下载二进制文件的时候,后端只返回一堆乱码,前端要获取文件名,后端只能把文件名加在响应头里面,前端去提取文件名 本地开发的时候是好的,没有报错,但是上传到服务器上后就出现了如下的报错 经排查一番,返回的 ...

  6. vue使用blob下载二进制文件流时无法获取响应头里面的Content-Disposition来提取文件名的解决办法

    下载二进制文件的时候,后端只返回一堆乱码,前端要获取文件名,后端只能把文件名加在响应头里面,前端去提取文件名 明明响应头里面存在这个属性和属性值,但是后端返回的data里面却没有这个属性 我去研究下, ...

  7. Posted content length of 26789546 exceeds limit of 10485760

    原来jfinal中默认上传为10M(10*1024*1024),故超过10M会报错 注:https://blog.csdn.net/weixin_43706875/article/details/10 ...

  8. MAC | svn: E175002: DAV request failed: 411 Content length required.

    今天在做svn compare的时候发现的这个问题 ! 网上有人说: 这可能是因为您的后端是较旧的svn版本. 在.subversion / servers文件中添加如下代码 [global] htt ...

  9. nginx 服务器的响应头,隐藏HTTP请求响应头里的nginx版本号

    搭建好nginx后,为了安全起见,我们都会想办法隐藏nginx的版本号.由于针对网络上经常爆出针对特定版本nginx的漏洞,将版本号隐藏好,可以有效的防止服务器被黑. 查看服务器是否显示nginx默认 ...

最新文章

  1. 半年 5 战 5 金:Kaggle 史上最快 GrandMaster 是如何炼成的?
  2. java 正则 捕获_Java通过正则表达式捕获组中的文本
  3. 手术步骤_做过 激光手术 恢复视力 的人们,后面怎么样呢?
  4. 是单向链表吗_一步一步教你从零开始写C语言链表
  5. neo4j python_Python 操作 Neo4j 数据库!
  6. 课时47:魔法方法:定制序列
  7. 用C#通过正则表达式截取字符串中符合条件的子字符串
  8. WEEK5 周记 作业——差分数组_TT的魔法猫
  9. 雷锋实验室: 伦敦奥运会手机应用盘点
  10. 用c++实现蓝桥杯超级玛丽
  11. 三星android pie,三星Galaxy系列Android 9.0 Pie
  12. verilog练习:hdlbits网站上的做题笔记(7)!强烈推荐!
  13. 计算机配置好一点的,怎么了解电脑配置好坏 电脑配置怎么样算好
  14. uview u-popup设置背景透明
  15. 北京公交一卡通可打公用电话 节省60%话费
  16. CSS 背景色 背景图片 渐变背景 - 径向渐变 background-image:radial-gradient()
  17. msn其他邮箱注册地址
  18. 使用matlab对2020版CST导出的txt画图文件处理使之适用于origin画图
  19. 【Deno】极简入门
  20. php随机名人名言,php随机输出名人名言的代码

热门文章

  1. 【多线程】Synchronized及实现原理
  2. Tomcat集群+Nginx反向代理+负载均衡
  3. Chipseq数据库的建立
  4. 2017年第八届蓝桥杯【C++省赛B组】
  5. java 通过反射获取调用类方法及属性
  6. python函数参数*args和**args
  7. Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
  8. ASP.NET Core中的配置
  9. appium===元素定位
  10. 【1】ASP.NET异步(1)