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規範

繼續閱讀→

相關文章
相關標籤/搜索