近段时间去了一家新公司任职,公司产品是一个网站,但是我发现它不兼容谷歌浏览器,用习惯了chrome的我简直是如鲠在喉。终于我抽出了时间,想纠正这个问题。F12一看,发现谷歌提示:net::ERR_INCOMPLETE_CHUNKED_ENCODING,跟了一下代码,发现在一个 ajax 的时候出的问题,再次跟到后台发现了一个老员工写的函数 ReturnString():

    protected new void ReturnString(string str)
{
try
{
Response.Clear();
Response.Write(str);
Response.Flush();
Response.Close();
}
catch
{
}
}

  然后错误就出在 Response.Close() 这儿,我以前很少用 Close()都是 End(),所以也没咋注意,我简单的把 Response.Flush(); Response.Close() 改成 Response.End() 之后,暂时解决了问题,也就没管它了。

结果昨天下午,同事说另一个地方的另一个功能出了问题,他们会重复调几次后台,而第一次成功会直接 Close 掉,以拒绝掉多次调用,但 Response.End() 达不到这效果。这就是我解决了一个“BUG”,导致的另一个“BUG”。

因为快要下班了,只好先将就改回 Response.Close(),对于我这样的强迫症患者来说,这是不可忍受的。

今天一大早就过来了,百度了半天,都文不对题,要么就建议用回 Response.End,问题是我只想解决问题,不想制造新问题,这个方案当然不行。

然后研究了一会儿,抓包一看,发现数据并不完整,想到会不会是网络连接异常中断导致缓冲未完全导出,然后忽然想到之前做过一个日志记录,其中有一段用了 StreamWriter sw = new...;    sw.write(string);  sw.close(), 然后打开文件一看,发现 string 并未写全,12345 只写入了 123,后来改用  binarywriter 解决了问题,于是把代码一变终于解决了问题。

    protected new void ReturnString(string str)
{
try
{
Response.Clear(); /*
* 说明:
* Response.Close() 会强制关闭客户端连接,会导致谷歌浏览器认为异常结束
* 而 Response.Write(string) 又会存在缓冲问题,在 Close 的时候,谷歌浏览器并未获取到完整的 string 内容,
* 即便加上 Content-Length 参数也不管用。
* 直接 将内容转换为 byte[] 数组用 Response.BinaryWrite 可避免系统缓冲,解决此问题。
* 类似的问题也发现在 System.IO 的 StreamWriter 中,有时候写大文件的过程中
* 调用了 StreamWriter.Close() 会导致写入文件不完整,BinaryWriter 即可解决。
* 另外在此处,即便是调用了 BinaryWrite 也并未避免 Response.Close() 带来的连接异常问题。
* 虽然 谷歌已经获取到了所有的数据,但并不知道数据的具体长度,仍然会导致解析异常
* 所以还需要加上 Content-Length 参数
*/
//Replace {
//Response.Write(str);
// } to {
byte[] b = Response.ContentEncoding.GetBytes(str);
Response.BinaryWrite(b);
Response.AddHeader("Content-Length", b.Length.ToString());
// } by zhangjing 2016-10-25 Response.Flush();
Response.Close();
}
catch
{
}
}

  

chrome浏览器调用 ajax 提示net::ERR_INCOMPLETE_CHUNKED_ENCODING问题解决方案,以及 Response.Close 和 Response.End 的一些问题。的更多相关文章

  1. chrome 浏览器调用 ocx 插件(二)

    原文:http://blog.csdn.net/wangchao1988ok/article/details/46561537 chrome 版本:43.0.2357.124 之前写过关于 chrom ...

  2. 中文版Chrome浏览器不支持12px以下字体的解决方案

    中文版Chrome浏览器不支持12px以下字体的解决方案 Chrome 27之前的中文版桌面浏览器会默认设定页面的最小字号是12px,英文版则没有限制,主要是因为chrome认为汉字小于12px就会增 ...

  3. chrome 浏览器调用 ocx 插件

    原文:http://blog.csdn.net/wangchao1988ok/article/details/45193489 IE 上使用 ocx 插件网上已经有很多资料说明,这里就不重复了,那如何 ...

  4. Asp.net 不安全端口 解决chrome浏览器访问时提示:ERR_UNSAFE_PORT

    https://blog.bbzhh.com/index.php/archives/136.html 想在vps做个测试,看看是否25端口屏蔽是否生效,于是起了一个小web服务在25端口做测试,但是使 ...

  5. 解决Chrome浏览器访问https提示“您的连接不是私密连接”的问题

    安装fiddler后,使用Chrome访问https网站时,可能会出现以下错误,本文说明如何解决此类问题: “您的连接不是私密连接”.“NET::ERR_CERT_AUTHORITY_INVALID” ...

  6. Chrome浏览器桌面通知提示设置

    版本 24.0.1312.56 m     老版本23.* 桌面通知,也可以由用户在Chrome浏览器中自定义:板手 -> 选项  -> 高级选项 –> 通知 (管理例外情况…).

  7. Chrome浏览器中autocomplete="off"不起作用解决方案

    多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录. 如果不想让浏览器缓存input的值,有2种方法: 方法一: 在不想使用缓存的input中添加 autocompl ...

  8. chrome浏览器解决ajax跨域问题

    方法一 1.右键谷歌快捷方式,选择"属性". 2.打开属性窗口,切换到"快捷方式"选项卡. 3.在目标路径的后面添加[ --disable-web-securi ...

  9. Chrome浏览器安装插件提示(net::ERR_NAME_NOT_RESOLVED)

    在chrome的webstore中安装currently插件.使用goagentFQ后能正常访问,但出现"net::ERR_NAME_NOT_RESOLVED"错误. 该错误的含义 ...

随机推荐

  1. PHP静态变量定义memcache对象的调用

    <?php $do = $_GET['do']; myCache($do,'do'); echo myCache($do); /** * 缓存管理 * @param mixed $name 缓存 ...

  2. ln命令小陷阱

    一个文件夹下面的文件结构是 -dir1 -assetsdir -subdir1 -subdir2 这个时候如果我想在subdir1和subdir2下面分别创建assetsdir的链接文件夹的话,应该怎 ...

  3. VirtrualBox使用已存在的镜像创建虚拟机

    再将一个已经存在的虚拟机镜像拷贝为另一个新的虚拟机镜像后,要将该新的镜像添加到新的虚拟机中时会出现错误提示,从而导致不能创建虚拟机.例如有'D:\App\VirtualBox VMs\CentOS_6 ...

  4. Oracle补习班第七天

    Keep conscience clear, then never fear. 问心无愧,永无畏惧 服务端监听 lsnrctl status  #查看监听服务 netca #配置动态监听 lsnrct ...

  5. VMware下安装Linux系统,ORACLE软件,DBCA建库

    操作系统安装   在vmware下安装Linux (OEL5.6),用于数据库服务器 1.打开vmware,选择"创建新的虚拟机"       2.选择自定义安装   3.选择虚拟 ...

  6. Visual Studio 插件AnkhSvn 更改Svn URL和登录信息

    AnkhSvn配置文件:%AppData%\Subversion\auth\ 删除这个文件夹中所有内容 然后连接,重新设置相关信息 设置静态地址 设置路由器 以TP-LINK路由器为例,其他路由器类似 ...

  7. 转mysql 多表 update sql语句总结

    mysql 多表 update 有几种不同的写法. 假定我们有两张表,一张表为Product表存放产品信息,其中有产品价格列Price:另外一张表是ProductPrice表,我们要将ProductP ...

  8. java中Collection和Collections的区别

    1.Collection: 它是java集合类的一个通用接口,所有集合类都实现的它 2.Collections: 它是一个封装集合类常用工具方法的类,不能被示例化,只支持静态调用

  9. Python format格式化输出

    http://www.jb51.net/article/63672.htm 推荐参考 >>> '{0},{1}'.format('hello','python') 'hello,py ...

  10. mac 设置 git 和github 告别命令行

    针对和我一样的新手,大虾们请轻拍. 很多小伙伴都想用git管理自己的代码,或者想在github上上传自己的项目.在网上找了几篇这方面的文章,都是用命令行设置的. 用命令行管理和安装太坑爹,这里有一个简 ...