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

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

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

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全部属性。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。spa

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规范

继续阅读→

相关文章
相关标签/搜索