zoukankan      html  css  js  c++  java
  • chrome请求cgi遇到net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

    测试一个web demo的时候,通过chrome请求板子上的web server的cgi时总是提示:net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)

    搜遍整个网络(Google + Baidu),尝试过所有可以尝试的建议,都不起作用。

    在一遍文章里面看到了一句话:该问题本质原因都是响应数据不完整导致,排查针对这个去就行,包括前端后端所有都有可能导致,常见的应该是数据配置限制了。

    后面来看确实是【真理】!

    首先说明一下,在HTTP/1.1的时候增加一个“Transfer-Encoding: chunked”属性,意思是支持数据分块传输,优点是通讯比较灵活体验好。可以看到上面的错误信息就跟这个有关。

    开始的解决方法,就是在web server里面强制移除“Transfer-Encoding: chunked” Header属性,然后就能在chrome里面正常获取cgi返回值。但是测试发现,通讯不太稳定,会发生获取不到值的情况,这时页面内容就刷不出来,影响用户体验;

    然后通过对chunked分块传输机制仔细研究,发现确实是由于返回cgi数据的时候,未发送结束标志导致chrome浏览器认为收到的块数据不完整,从而抛出了:net::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)的异常。

    根据chunked属性要求,发生的最后一块数据必须是长度为0的空字符串,否则chrome就不知道是否传输结束。

    所以,经过仔细的排查,确实是web server端少发了长度为0的空字符串作为结束标记,增加上就可以了。(至于为什么会少发,是由于其它问题导致进入了非正常逻辑,正常逻辑分支是有发生结束标记的,所以当前解决方案是在非正常逻辑里面也增加一条发生结束标记的语句)

    有关chunked介绍,可以浏览:https://blog.csdn.net/u014569188/article/details/78912469,讲的比较详细。

  • 相关阅读:
    使用Egret Conversion 转化as代码到ts代码,
    C++ 部分知识点
    mac下 使用 versions版本控制工具 修复游戏bug过程
    Egret 显示容器
    Egret --视觉编程,显示对象,事件
    VS2015 使用
    TypeScript 学习四 面向对象的特性,泛型,接口,模块,类型定义文件*.d.ts
    Prestashop--网站后台配置(一)
    Prestashop--访问优化
    eclipse 中 Android sdk 无法更新的问题
  • 原文地址:https://www.cnblogs.com/wzc0066/p/15194883.html
Copyright © 2011-2022 走看看