近段时间去了一家新公司任职,公司产品是一个网站,但是我发现它不兼容谷歌浏览器,用习惯了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. 【MySQL】漫谈MySQL中的事务及其实现

    最近一直在做订单类的项目,使用了事务.我们的数据库选用的是MySQL,存储引擎选用innoDB,innoDB对事务有着良好的支持.这篇文章我们一起来扒一扒事务相关的知识. 为什么要有事务? 事务广泛的 ...

  2. RAID磁盘阵列笔记

    磁盘阵列RAID是服务器维护的必备知识,以前不太关心服务器维护方面的知识.目前要负责维护机房里的几台服务器,所以要关注这方面的内容. 磁盘阵列是用多块独立磁盘组成,提供两个方面的作用:数据安全冗余 和 ...

  3. collectionview使用

    创建UICollectionViewFlowLayout 对象来设置相关的布局,包括itemSize,headerReferenceSize,sectionInset.设置对应的布局大小,相关的和顶部 ...

  4. viewPager--viewpager时,发生内存溢出OOM问题

    两个问题:1.如果图片达到500kb每张,你这个划屏会有顿卡:2.快速滑动有出现0.几秒的白屏.图片越大,顿卡越明显. 回复parcool:500kb的背景算大的了,如果是想做图片墙,viewpage ...

  5. Java 技术文章摘录

    sokcet 编程实例 android bundle类 Android -- Looper.prepare()和Looper.loop() —深入版 Java NIO系列教程 XML操作 Androi ...

  6. Java中遍历Map集合的四种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  7. javascript 中正则表达式应用

    <script type="text/javascript"> var str="<script type='text/javascript'> ...

  8. Google Protocol Buffer 的使用和原理[转]

    本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...

  9. flash builder4.7 for Mac升级AIRSDK详解

    使用flash builder 打包ANE时或者打包ipa时候常常会遇到AIRSDK版本低的问题,然而flash builder4.7默认使用的AIRSDK是3.4而flash builder4.7 ...

  10. javascript 中slice,substr,substring方法的对比

    实际开发过程中,字符串是一种最常用的一种数据类型,而在程序中对字符串的操作也是十分繁琐,javascript中就提供了很多字符串相关的方法,然而由于方法过多,很多方法功能有交叉,参数有雷同,容易使用混 ...