﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Sheppard Y-随笔分类-网络编程</title><link>http://www.cppblog.com/yangsf5/category/20790.html</link><description>keep thinking keep coding.</description><language>zh-cn</language><lastBuildDate>Tue, 12 Jul 2016 10:32:11 GMT</lastBuildDate><pubDate>Tue, 12 Jul 2016 10:32:11 GMT</pubDate><ttl>60</ttl><item><title>cookie一小步</title><link>http://www.cppblog.com/yangsf5/archive/2014/01/16/205415.html</link><dc:creator>Sheppard Y</dc:creator><author>Sheppard Y</author><pubDate>Thu, 16 Jan 2014 03:54:00 GMT</pubDate><guid>http://www.cppblog.com/yangsf5/archive/2014/01/16/205415.html</guid><wfw:comment>http://www.cppblog.com/yangsf5/comments/205415.html</wfw:comment><comments>http://www.cppblog.com/yangsf5/archive/2014/01/16/205415.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yangsf5/comments/commentRss/205415.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yangsf5/services/trackbacks/205415.html</trackback:ping><description><![CDATA[<p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;"></p><div><div style="orphans: 2; text-align: -webkit-auto; widows: 2;"><div></div><fieldset><legend><span style="color: #ff0000; line-height: normal;">2016-07-11 日更新&nbsp;</span></legend><div><span style="line-height:normal;color:red;">此篇博客已经迁移到新博客，并做行文检查和优化排版：<br /></span><div></div></div><a href="http://blog.clawz.me/2014/01/16/14-a-step-to-cookie/"><div><div><span style="color:red;">http://blog.clawz.me/2014/01/16/14-a-step-to-cookie/</span></div></div></a></fieldset><a href="http://blog.clawz.me/2014/01/16/14-a-step-to-cookie/"><div><div></div></div></a><br /><font face="微软雅黑" size="3"><span style="line-height: normal;">一、怎么纠结上的</span></font></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;近期在准备借鉴云风的skynet来完善我们的架构。这个cookie研究是个插曲。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;我这有个http server只做与数据库的代理接口用，同事那边有个http的web server，他的server需要以http client身份来访问我的server取数据。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;我的server用的express，访问流程为先去一个path验证，验证完，这个http client就可以访问其他path了。验证的时候会标记client对应的session为已验证，之后的每次访问会检查这个标记。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">二、对cookie的认识加深了些</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;这里的cookie流程是这样的，验证之后，server会在response的headers里设置上&#8220;set-cookie&#8221;的值，接下来的request需要带上这个cookie，否则server认为这个client没有被验证。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;第二次request的response里可能会给设置新的cookie，第三次request需要带上第二次respones设置的cookie&#8230;&#8230;</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;这样就是每次访问带上上次返回的cookie，server才会认为你这次的访问启用的client已经被验证过。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;nodejs里的http.request默认是不会捎上cookie的，所以得自己封装下。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">三、ps</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;cookie的wikipedia：<a href="http://en.wikipedia.org/wiki/HTTP_cookie#Implementation">http://en.wikipedia.org/wiki/HTTP_cookie#Implementation</a></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;cookie以前做模拟登陆时有想研究过，那时对http完全不了解，加上其他的事情，给放弃了。这次总算稍微留个感性认识了。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp;&nbsp;&nbsp;&nbsp;这里写的乱七八糟的，回头有空再完善这篇吧。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;"><hr /></div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;同一个站点的cookie不一定只是登陆够给的那个，而且cookie也不局限于用于登陆标记。例如登陆后浏览好久，开始启用某个功能需要做标记，cookie字段就动态增加了。为此在给node.js的http.request封装的维护cookie的agent后来修改了。</div><div style="font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2; font-size: medium;">&nbsp; &nbsp; &nbsp;这些内容在《Http权威指南》里将很清楚，经典书才是硬道理。</div></div><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;"></p><img src ="http://www.cppblog.com/yangsf5/aggbug/205415.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yangsf5/" target="_blank">Sheppard Y</a> 2014-01-16 11:54 <a href="http://www.cppblog.com/yangsf5/archive/2014/01/16/205415.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>http与socket验证的区别</title><link>http://www.cppblog.com/yangsf5/archive/2014/01/10/205271.html</link><dc:creator>Sheppard Y</dc:creator><author>Sheppard Y</author><pubDate>Fri, 10 Jan 2014 05:53:00 GMT</pubDate><guid>http://www.cppblog.com/yangsf5/archive/2014/01/10/205271.html</guid><wfw:comment>http://www.cppblog.com/yangsf5/comments/205271.html</wfw:comment><comments>http://www.cppblog.com/yangsf5/archive/2014/01/10/205271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/yangsf5/comments/commentRss/205271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/yangsf5/services/trackbacks/205271.html</trackback:ping><description><![CDATA[<div style="orphans: 2; widows: 2;"><font face="微软雅黑"></font></div><fieldset><legend><span style="color: #ff0000; font-family: 微软雅黑; line-height: normal; orphans: 2; widows: 2;">2016-07-11 日更新&nbsp;</span></legend><div style="orphans:2;widows:2;line-height:normal;"><span style="color:red;">此篇博客已经迁移到新博客，并做行文检查和优化排版：</span></div><div></div><a href="http://blog.clawz.me/2014/01/10/14-http-socket-auth-diff/"><div><span style="color:red;">http://blog.clawz.me/2014/01/10/14-http-socket-auth-diff/</span></div></a></fieldset><a href="http://blog.clawz.me/2014/01/10/14-http-socket-auth-diff/"><div></div><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;"></p></a><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /><br />&nbsp; &nbsp; 这是很基础的概念，之前没怎么弄过http。对于自己，算是做个笔记吧。</p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">一、socket安全验证</p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp;&nbsp;&nbsp;&nbsp;socket链接是握手之后就一直连着，所以这条链接在第一包验证之后，之后这条链接不需要再验证。&#8220;第一个包&#8221;可能描述不准确，因为有时候第一包不一定就验证，可能是做路由之类。这里就不管这种情况了，只管第一个包直接验证的情况。<br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp;&nbsp;&nbsp;&nbsp;可以理解为server接受到client的链接，并且验证通过（如用户及密码对了）这个client链接后。以后这个client发过来的包，server都直接做逻辑处理而不再需要做验证链接合法性。这个信任是直到链接断开的。<br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp; &nbsp; 如果非法客户端来模拟登陆，至少需要得到有效的id及密码，这已经是密码自身安全的事情，不涉及这里谈的链接安全性。<br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp;&nbsp;&nbsp;&nbsp;如果非法客户端用正确的id及密码登陆后，发些非法包，这里的包验证应该是服务器上包处理时的包检查及逻辑检查的事，就是通常的游戏说的防刷（包频率、包里数据的合法范围等）。</p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;"><br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">二、http的安全验证</p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp;&nbsp;&nbsp;&nbsp;这里只关心http的短连接。<br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp;&nbsp;&nbsp;&nbsp;短连接就是每次建立链接-发包-断开。同一client的前后两次发到server的包，也相当于独立的两次，同一client的验证就需要每个http请求都要验证下。于是有了session和cookie。cookie是将client的标识放在client端，常用于server没有账户密码验证的方式。这里不讨论cookie。<br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp;&nbsp;&nbsp;&nbsp;server在第一个http请求验证client后，给他分配一个session。这个session简单的可以理解为server和client约定的一个client凭证（有有效期）。之后client在每个请求里加上这个session里规定的值，例如一个合适长度的随机字符串。<br /></p><p style="margin-right: 0px; margin-left: 0px; font-family: 微软雅黑; line-height: normal; orphans: 2; text-align: -webkit-auto; widows: 2;">&nbsp;&nbsp;&nbsp;&nbsp;这里的session不能有让恶意用户很容易破解的规律，例如用户的id之类的。所以上边提到随机字符串之类的。&nbsp; &nbsp;&nbsp;</p><img src ="http://www.cppblog.com/yangsf5/aggbug/205271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/yangsf5/" target="_blank">Sheppard Y</a> 2014-01-10 13:53 <a href="http://www.cppblog.com/yangsf5/archive/2014/01/10/205271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>