在Http请求中的Cookie种类与状态详解

原创 2016年05月31日 15:36:53

很多人以为Cookie就是存储在浏览器所在电脑硬盘中的那个txt文件,在必要的时候浏览器会读取这个文件然后发送到服务器端。其实这只是cookie的一个方面。Cookie可以分为存储在内存中和存储在硬盘两种方式,存储在硬中的时候,一个网站通常有一个.txt文件来存Cookies,一个Cookie对象最终转换为txt文件中的一条记录。保存在浏览器线程分配的内存中的Cookie对象,在关闭这个浏览器窗口后,就销毁了。很多人并不知道cookie在内存中存在这个方面。以前我写过一个文章介绍这两种cookiehttp://blog.csdn.net/sundacheng1989/article/details/8194466,以及内存中cookie的应用。

 

最近在研究微信,灵感来源于网上有一个Python版本的测试谁把你拉黑了的代码。我就想写一个C#版本的。最终也写出来了,但是腾讯在服务器端加了很多限制,所以不太好用。其实原来很简单,就是利用网页版的微信,然后通过使用抓包工具,来查看每次的请求都有哪些内容,然后用C#实现这些HTTP请求。

 

在研究抓包的过程中,确实学到了很多东西。比如说最重要的一点就是关于内存中cookie的问题。在使用C#模拟浏览器来完成一些HTTP请求的时候,最繁琐的东西就是cookie, 这里说的是硬盘中的cookie,因为浏览器可以用cookie,这里包含了一些身份信息,而我们使用C#的时候是没有办法用的。所以为了避免这个问题,我使用了Chrome的匿名模式来进行网页微信的登录。

 

Chrome的匿名模式,是不会使用任何硬盘cookie文件的。在网页版微信发出一次HTTP请求之后,我使用Fiddler抓包工具去查看这次请求的内容,意外的东西发现了。

 


竟然发现在Chrome匿名模式下,HTTP请求也是会携带cookie。但是注意,这里并不是硬盘上的cookie,而且浏览器内存中的cookie!这种cookie很特别,在关闭浏览器后就会消息,所以只存在于这次的浏览器窗口。

 

其实,既然内存中有相关的cookie,那么肯定是在某个时候,服务器端向浏览器端发送了相关的cookie信息。因为我就从fiddler中找这次请求前边的请求信息,果然是在一次的HTTP respond中携带了相关的cookie信息。




所以总结一下,cookie分为两种,一种是硬盘上的,另一种是内存中的。Chrome的匿名模式只是不会使用硬盘中的cookie,但是每次的HTTP request请求还是会携带内存中的cookie信息。

 

在研究的过程中,还有一个很重要的知识点就是如何在C#中使用内存中的cookie.当我在使用C# WebAPIHttpClient类向微信的服务器发出请求的时候,明明是同样的URL,同样的参数,但是使用C#代码与使用浏览器获取到的结果就是不一样。最后找到关键的问题所在。因为浏览器每次都携带内存中的cookie,而C#代码没有cookie,所以造成了结果不一样。那么怎么解决这个问题?其实微软的HttpClient类已经能够很好的解决,我之所以遇到问题,是因为每次要发起Http请求的时候都会new一个新的类,但是如果我使用以前的HttpClient,当服务器端返回cookie的话,就会保留在这个对象中,或者说内存中,下次再使用的话,就会携带cookie发起请求。所以,在应用程序中,一定要使用同一个HttpClient,这样才能很好的利用cookie


版权声明:本文为博主原创文章,未经博主允许不得转载。

cookie讲解-------浏览器种cookie

1  responce添加Set-Cookie参数:  http request的返回responce为; [('Content-Type', 'application/x-javascript'...

Cookie的两种类型

Cookie的两种类型 在项目开发中我们时常将需要在客户端(浏览器)缓存的数据,一般客户端数据我们使用Cookie中,所以有必要了解清楚Cookie在保存数据时的两种类型。 两种类型的...
  • X_X_OO
  • X_X_OO
  • 2016年09月05日 20:32
  • 2330

HTTP Cookie 详解二

今天webryan给team做了一个关于HTTP cookie的分享,从各个方面给大家介绍一下大家耳熟能详的Cookie。主要是翻了维基百科的很多内容,因为维基百科的逻辑实在是很清晰:),ppt就不分...

HTTP cookies 详解

HTTP cookies,通常又称作"cookies",已经存在了很长时间,但是仍旧没有被予以充分的理解。首要的问题是存在了诸多误区,认为cookies是后门程序或病毒,或压根不知道它是如何工作的。第...

Cookie的版本与类型

目前有两个版本: 版本0 : 由Netscape公司制定的,也被几乎所有的浏览器支持。Java中为了保持兼容性, 目前只支持到版本0, Cookie的内容中不能空格,方括号,圆括号,等于号(=),逗...

模拟发送带cookies的http请求的两种方法

如果想发送带cookies的请求,有两种方式,一种使用工具,一种使用java代码,干货如下:使用工具使用的工具是postman和Postman Interceptor使用谷歌浏览器的扩展程序下载(需要...

HTTP中的Cookie

HTTP协议之CookieHTTP协议之Cookie 使用Cookie的原因 Cookie的定义 客户端和服务器的Cookie 客户端发送请求报文的Cookie 服务器端响应报文的set-cookie...
  • Kodoo
  • Kodoo
  • 2015年09月27日 17:10
  • 1381

Http状态的传递和保存 之 Cookie

Cookie 如果想自由的传递和读取,用Cookie。        Cookie是和站点相关的,也就是只有存储Cookie的服务器站点才能读取和访问。并且每次向服务器请求的时候除了发送表单参数外...

单点登录系列之——HTTP请求与Cookie讲解

HTTP、Cookie、Session      HTTP协议作为无状态协议,无状态并不陌生,EJB bean中就有有状态、无状态之分,对于HTTP协议而言,无状态同样指每次request请求之前是...

Postman发送带cookie的http请求

Postman带cookie
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Http请求中的Cookie种类与状态详解
举报原因:
原因补充:

(最多只允许输入30个字)