HttpClient4.3教程 第三章 Http状态管理

HttpClient4.3教程 第三章 Http状态管理

最初,Http被设计成一个无状态的,面向请求/响应的协议,所以它不能在逻辑相关的http请求/响应中保持状态会话。由于越来越多的系统使用http协议,其中包括http从来没有想支持的系统,比如电子商务系统。因此,http支持状态管理就很必要了。
当时的web客户端和服务器软件领先者,网景(netscape)公司,最先在他们的产品中支持http状态管理,并且制定了一些专有规范。后来,网景通过发规范草案,规范了这一机制。这些努力促成 RFC standard track制定了标准的规范。但是,现在多数的应用的状态管理机制都在使用网景公司的规范,而网景的规范和官方规定是不兼容的。因此所有的浏览器开发这都被迫兼容这两种协议,从而导致协议的不统一。

3.1.Http cookies

所谓的Http cookie就是一个token或者很短的报文信息,http代理和服务器可以通过cookie来维持会话状态。网景的工程师把它们称作“magic cookie”。
HttpClient使用Cookie接口来代表cookie。简单说来,cookie就是一个键值对。一般,cookie也会包含版本号、域名、路径和cookie有效期。
SetCookie接口可以代表服务器发给http代理的一个set-cookie响应头,在浏览器中,这个set-cookie响应头可以写入cookie,以便保持会话状态。SetCookie2接口对SetCookie接口进行了拓展,添加了Set-Cookie2方法。
ClientCookie接口继承了Cookie接口,并进行了功能拓展,比如它可以取出服务器发送过来的原始cookie的值。生成头消息是很重要的,因为只有当cookie被指定为Set-Cookie或者Set-Cookie2时,它才需要包括一些特定的属性。

3.1.1Cookies版本

兼容网景的规范,但是不兼容官方规范的cookie,是版本0. 兼容官方规范的版本,将会是版本1。版本1中的Cookie可能和版本0工作机制有差异。
下面的代码,创建了网景版本的Cookie:

    BasicClientCookie netscapeCookie = new BasicClientCookie("name", "value");    netscapeCookie.setVersion(0);    netscapeCookie.setDomain(".yeetrack.com");    netscapeCookie.setPath("/");

下面的代码,创建标准版本的Cookie。注意,标准版本的Cookie必须保留服务器发送过来的Cookie所有属性。

    BasicClientCookie stdCookie = new BasicClientCookie("name", "value");    stdCookie.setVersion(1);    stdCookie.setDomain(".yeetrack.com");    stdCookie.setPath("/");    stdCookie.setSecure(true);    // Set attributes EXACTLY as sent by the server    stdCookie.setAttribute(ClientCookie.VERSION_ATTR, "1");    stdCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".yeetrack.com");

下面的代码,创建了Set-Cookie2兼容cookie。

    BasicClientCookie2 stdCookie = new BasicClientCookie2("name", "value");    stdCookie.setVersion(1);    stdCookie.setDomain(".yeetrack.com");    stdCookie.setPorts(new int[] {80,8080});    stdCookie.setPath("/");    stdCookie.setSecure(true);    // Set attributes EXACTLY as sent by the server    stdCookie.setAttribute(ClientCookie.VERSION_ATTR, "1");    stdCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".yeetrack.com");    stdCookie.setAttribute(ClientCookie.PORT_ATTR, "80,8080");

3.2. Cookie规范

继续阅读→

你可能感兴趣的:(HttpClient4.3教程 第三章 Http状态管理)