【发布时间】:2010-03-19 22:27:48
【问题描述】:
这是我今天面试时被问到的问题之一,
但我不确定答案。
【问题讨论】:
-
您已经有 2 个防弹答案。 Cookie 与 JavaScript 无关
-
您想要证明吗?禁用 js,清理你的 cookie,浏览一下,打开你的 cookie 缓存:满满的 cookie!
标签: javascript http cookies
这是我今天面试时被问到的问题之一,
但我不确定答案。
【问题讨论】:
标签: javascript http cookies
是的。 Cookie 是一种浏览器/服务器 http 技术,与客户端脚本完全无关。
cookie 的主要(或至少是初始)用途是在服务器端设置一个值并在服务器端读取它。
不过,客户可能会在其浏览器中禁用 cookie。
【讨论】:
答案是肯定的。下面的防弹推导:
cookie 作为 HTTP 标头发送 通过网络服务器到网络浏览器和 然后由原样发回 浏览器每次访问时 服务器。
要访问页面http://www.example.org/index.html,浏览器会连接到服务器www.example.org,向它发送一个如下所示的请求:
GET /index.html HTTP/1.1
Host: www.example.org
服务器通过发送请求的页面进行回复,该页面前面带有一个类似的文本包,称为“HTTP 响应”。此数据包可能包含请求浏览器存储 cookie 的行:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
(content of page)
仅当服务器希望浏览器存储 cookie 时,服务器才会发送 Set-Cookie 行。 Set-Cookie 是请求浏览器存储字符串 name=value 并在以后的所有请求中将其发送回服务器。如果浏览器支持 cookie 并且启用了 cookie,则对同一服务器的每个后续页面请求都将包含 cookie。例如,浏览器通过向服务器发送www.example.org 请求页面http://www.example.org/spec.html,如下所示:
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: name=value
Accept: */*
来源及延伸阅读:Wikipedia: HTTP Cookie
【讨论】:
Cookie 只是一个典型的 HTTP 标头。每当您的浏览器请求某个网站时,它都会发送如下请求标头:
GET /questions/2476288/will-cookie-be-available-wh...
Host: stackoverflow.com
....
Accepted-Languages: ....
Accepted-Encoding: ....
....
Cookies: cookie1=value1;cookie2=value2
如您所见,cookie 是 HTTP 协议的一部分,而不是 JS,但是 JS 能够创建/删除/修改 cookie。换句话说:cookie 独立于 JS。
【讨论】:
如果使用服务器端脚本设置 cookie,即使禁用 Javascript,网站也可以设置 cookie。
PHP 示例:
setcookie('test', 'test');
cookie 然后作为 HTTP 标头发送到站点,除非它们在浏览器中被禁用。是否禁用 Javascript 无关紧要。
【讨论】:
是的(虽然你将无法使用 JS 来设置或读取它)
【讨论】: