HTTP Cookie基本流程
Cookie定義
HTTP cookie技術可以把網站伺服器發送給瀏覽器的特定數據都存在客戶端的硬碟上,目的是把無狀態的HTTP請求(stateless)變成有狀態的HTTP請求(stateful)。為什麼叫cookie呢?因為它的和magic cookie很類似的原理,magic cookie用於描述程序接收到數據並把數據原封不動的返回去的一種行為。1994年網景(netscape)公司的程序員開發一個在線購物應用,設計購物車時,不想把這些數據都存在伺服器端,而是直接存在用戶的電腦上,減輕服務端的儲存壓力,不過現代版的購物車通常都是儲存在伺服器(Cache/資料庫)中,cookie可只記錄購物車的唯一標識符,而不是直接記錄具體的商品。
Cookie流程及結構
大部分web網站都會使用到cookie,使用它的基本流程可以概括為3步
- 瀏覽器向伺服器請求一個從未請求過的web頁面;
GET /index.html HTTP/1.1
Host: www.example.org
...
- 瀏覽器會在接下來的http請求的header中把以上cookie原樣返回給伺服器。
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: theme=light
Set-Cookie: sessionToken=abc123; Expires=Wed, 09 Jun 2020 10:18:14 GMT
...
- 伺服器返回瀏覽器此頁面,並在返回http包的header中設置set-cookie屬性;
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123
…
上面示例設置了兩個cookies: 第一個是theme,由於沒有設置它的Expires 或 Max-Age屬性,所以是個session cookie,它會在瀏覽器關閉時直接被刪除掉。 第二個是SessionToken,它有過期時間,所以只會在指定的過期時間後才會被刪除(也可手動刪除)。
瀏覽器訪問http://www.example.org/spec.html時,會把上一步的cookies設置在header中原樣返回給伺服器,當然不需要再指定cookie的其它屬性,只需要把key-value返回即可。
伺服器根據設置的cookies就能知道標識這個客戶,把無狀態的HTTP請求變成了有狀態的請求。
可以看看具體的網頁端的知乎是如何登錄的?