Web 服務(wù)器通過(guò)發(fā)送一個(gè)稱為?`Set-Cookie`?的 HTTP 消息頭來(lái)創(chuàng)建一個(gè) cookie,`Set-Cookie`消息頭是一個(gè)字符串,其格式如下(中括號(hào)中的部分是可選的):
~~~
Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]
~~~
消息頭的第一部分,value 部分,通常是一個(gè)?`name=value`?格式的字符串。事實(shí)上,這種格式是原始規(guī)范中指定的格式,但是瀏覽器并不會(huì)對(duì) cookie 值按照此格式來(lái)驗(yàn)證。實(shí)際上,你可以指定一個(gè)不含等號(hào)的字符串,它同樣會(huì)被存儲(chǔ)。然而,最常用的使用方式是按照?`name=value`?格式來(lái)指定 cookie 的值(大多數(shù)接口只支持該格式)。
當(dāng)存在一個(gè) cookie,并允許設(shè)置可選項(xiàng),該 cookie 的值會(huì)在隨后的每次請(qǐng)求中被發(fā)送至服務(wù)器,cookie 的值被存儲(chǔ)在名為 Cookie 的 HTTP 消息頭中,并且只包含了 cookie 的值,忽略全部設(shè)置選項(xiàng)。例如:
~~~
Cookie: value
~~~
通過(guò)?`Set-Cookie`?指定的可選項(xiàng)只會(huì)在瀏覽器端使用,而不會(huì)被發(fā)送至服務(wù)器端。發(fā)送至服務(wù)器的 cookie 的值與通過(guò)?`Set-Cookie`?指定的值完全一樣,不會(huì)有進(jìn)一步的解析或轉(zhuǎn)碼操作。如果請(qǐng)求中包含多個(gè) cookie,它們將會(huì)被分號(hào)和空格分開(kāi),例如:
~~~
Cookie: value1; value2; name1=value1
~~~
服務(wù)器端框架通常包含解析 cookie 的方法,可以通過(guò)編程的方式獲取 cookie 的值。
