【问题】
在vs2010中调试C#的代码,以及用IE9中的F12抓取分析网页过程中。
有关于cookie的domain值,看到有些是“.live.com”,有些是“login.live.com”的,即有些domain值,起始是以点开始的,有些却不是:
所以此处想要搞清楚,对于cookie的domain值,起始是否包含点,还是不论包含和不包含,意义都是一样的?
【解决过程】
1.通过IE9的F12中的缓存->查看cookie信息,可以查看当前所有的cookie的信息。
看到其中,很多cookie的值,都是显示为“live.com”,而又去抓取到的网络信息中,看到对应返回的cookie的值中的domain的值,其实是”.live.com”,所以此处可以看出来,至少IE9中,会将对应的“.live.com”显示为“live.com”的。
2.而对于domain的值,是否必须以点开头,还是都允许,开头有没有点都一样?
对此,其找了下相关资料,找到这里:
RFC2109:HTTP State Management Mechanism
看到具体的解释为“The value for the Domain attribute contains no embedded dots or does not start with a dot. ”,即cookie的domain的值,必须是以点开始的,不以点开始的cookie,应该拒绝丢弃。
3. 看到这里,以为就找到了最权威的解释了。但是一想又不对,因为前面见到很多cookie的domain值,是“login.live.com”,即没有以点开始,但是好像也是有效和可用的。所以,好像是IE9或者是实际的实现中,又没有遵循上面的RFC2109规范?
【总结】
暂时看起来,对于需要自己赋值domain域的cookie,那么最好赋值以点开头的域,比如”.live.com”。至少这样符合规范。
另外,在IE9中的F12中所查看到的cookie的domain域,将“.live.com”显示为“live.com”,则暂时可以理解为,只是这么显示而已,省却了开头的那个点而已。
【后记 2012-02-19】
后来经过一些教训而学到了更多关于domain方面的知识:
1.首先,最容易知道和理解的是,如果domain和所要提交的http的host不同,那么对应的cookie则是无效的,即不起作用的。
而其中的host,举例来说,对于这样的网址:
其Host是对应的cid-9a8b8bf501a38a36.users.storage.live.com,而一个cookie,如果其domain是cid-9a8b8bf501a38a36.users.storage.live.com或.users.storage.live.com,则是匹配的,即发送对应的http的请求的时候,对应的cookie是有效的,而如果该cookie的domain是.storage.live.com或storage.live.com或.live.com等等,那么都是不匹配的,发送对应的http的请求的时候,即使调用了HttpWebRequest的CookieContainer.Add添加了对应的cookie,也是不起作用的。
【Cookie的Host和Domain的关系】
先说Host,一个http的请求中的host,在C#代码中添加对应的header的时候,是不需要添加Host的,该值是http请求或网页自动计算的,不需要也不能设置此Host值。
而Cookie中的Domain,比如domain是.live.com,要和对应的访问的网页地址中的Host相匹配,否则,对该http请求,cookie是无效的,就不起作用了。访问该网页之前,即使添加此cookie到CookieContainer,也是做无用功。
举例例子,参数上面的解释。
所以,host和domain的话,实际上,正常情况下,是应该相匹配的。
【Cookie的domain的值所表示的的作用域】
cookie的domain,代表了其作用域,即有效范围。
一般是对应的http地址的最开始那部分的值。
比如对于访问http://login.live.com//xxxx来说,cookie的domain是.live.com的话,那么就是和此网页相匹配,和此网页的Host=login.live.com相匹配,是有效的。
尤其需要注意的是,cookie的domain所代表的含义。
举例来说,如果一个cookie的domain是.live.com的话,那么对于去访问.users.storage.live.com
或.storage.live.com类型的地址的话,是无效的,因为.live.com,其作用域,只是xxx.live.com,而并不包括xxx.users.storage.live.com或xxx.storage.live.com类型的地址。
这点需要特别注意,否则就会像我一样,搞错了cookie的domain的作用域,使得访问不同地址,cookie变的无效而使得程序调试始终无法得到预想的结果,折腾了太长的时间。
转载请注明:在路上 » 【全部解决】Cookie的Domain值的起始是否包含点的问题 + cookie的Domain和Host的关系 + Cookie的Domain的作用域/有效范围