Chinaunix首页 | 论坛 | 博客
  • 博客访问: 224940
  • 博文数量: 27
  • 博客积分: 1151
  • 博客等级: 少尉
  • 技术积分: 426
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-15 19:25
文章分类
文章存档

2012年(5)

2011年(6)

2010年(16)

我的朋友

分类: 系统运维

2012-05-06 09:10:10

By fireworks2@foxmail.com

1. 外网问题露征兆,调查误入歧途
    A 同学最先和我反馈,其电脑上存在打不开某域名网页的问题。
    用wireshark根据ping域名所得出的ip抓不到包,http级别的抓包工具也抓不到包,以为是浏览器自己问题(其实不是的!于是很多弯路...)

2. 外网用户始反馈,错误路上越陷越深
    反馈用户不多,认为属于个例,应该是用户自己环境问题(浏览器、操作系统等) 
    在用户电脑上看了挺久的IE各种设置,似乎没问题,后面干脆重置了一下IE,用户问题消失

3. 反馈者与日俱增,误打误撞找原因 
    现在心里开始七上八下,估计是我们自己后端的原因,推测这一现象应当不是个例
    此次不敢直接重置IE,事先问了,开始逐步挨项检查,但点来点去后面不小心把用户的浏览器缓存和cookie一并清除了,用户问题消失

4. 谨小慎微删cookie,表面原因被找到
    这次学乖了,有新用户反馈时,我去调整IE选项的时候特地先删除缓存,再删除cookie;并且先把cookie给存起来了。
    发现仅仅删掉了我们域名下的cookie,问题消失,但是不能逆向重现问题。看到用户cookie很多,想到了广告排重系统是基于cookie的,猜测是因为cookie太多或者太大之类导致的。
    后来想起来可以使用导出cookie功能,或许可以用来重现问题。虽然后面马上又有一个用户反馈,但是他是IE9的,导出的cookie不是我想要的cookie,作罢。

5. 其他用户相继出现问题,问题终于重现
    这次使用IE导出用户cookie,清cookie后问题消失,导入cookie后问题重现(确定问题的确和cookie有关系) 
    之前有同事和我说过大厅首页打不开的问题,我将用户的问题cookie导入到他俩的IE,问题重现!
    
    又继续看了一阵,想要精确定位问题

        调整 cookie个数、单个cookie大小、cookie总大小...
        终于发现cookie总大小与问题相关,如果cookie太大时,即出现问题。
        更换了一个短几个字节的URL,发现问题又消失了,所以估计和URL长度还有关系,和cookie长度也有关系

    中间结论:必须缩小cookie缓存时间、数目以及每个cookie的大小

6. 怕辗转反侧而刨根问底,真相大白
    为了看具体协议包里面的cookie大小,再次使用wireshark抓包,根据ping到的IP去过滤,发现抓不到包! 
    直接抓80端口,然后选中正确的IP进行过滤,刷新了页面,这才发现其实出错的时候是有向服务器发包的
    看了一会,发现原来GET请求的总包超过 4096 就被CDN给RST掉了,真相终于大白,找到CDN的同事核实了一下,的确如此。

7. 采用有损服务, 解决
问题
    在设置新的cookie时,保护判断一下,如果可预判即将出现异常(cookie很大了),就应当停止增加cookie。
    这种思想其实就是有损服务、柔性可用,在保护判断时如果cookie很小,则可以正常提供服务;而在cookie较大时,则予以保护,提供有损服务,不继续增加cookie。
    另外同时考虑了cookie污染的问题,对有效期、大小、域名、路径等各项设置cookie时需要指定的参数都做了优化。关于cookie污染,主要指因滥用cookie导致许多上行访问都带上了本不需要cookie,具体可自行google。

8. 关于cookie
    在分析问题过程当中,还查阅了大量和cookie相关的文章,其中几篇列在这里
    另外还用到了一个查看IE的cookie工具: 查看IE的cookies工具_original.rar   
    针对同一域名,IE7、8最多保存50个cookie。
   
    描述cookie实现限制的RFC:
   
  1.       * at least 300 cookies

  2.       * at least 4096 bytes per cookie (as measured by the characters
  3.          that comprise the cookie non-terminal in the syntax description
  4.          of the Set-Cookie2 header, and as received in the Set-Cookie2
  5.          header)

  6.       * at least 20 cookies per unique host or domain name


9. 长得像客户端的页面
    因为发布方便,以及可以快速迭代,且有较好的平台无关性(仅和IE版本及设置有关)等优点,经常有客户端程序会将部分功能会借助页面来实现(其中有较大比例直接使用了IE,还有少量会自行挂载webkit),没屏蔽右键的,可经右键查看页面地址。

    当然客户端同页面相比,还是有优势的,可以保持TCP长连接,采用细水长流的方式同后端进行通信,体验当然也相对好。另外还可以执行一些对于页面而言较复杂的运算。

    对于各种应用加载的IE内核,其使用的cookie和IE是共用的,但是不包括会话期间存活的cookie。推测是会话期间存活的cookie是临时存储的,没放到某个文件内,这样就无法共享。


阅读(3247) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~