【发布时间】:2015-07-22 05:03:49
【问题描述】:
我正在尝试与 API 建立连接。当我调用这个 API 的方法时,它会响应一个通过 HTTP 标头发送的 cookie 值。
此标头会自动添加到客户端“我的浏览器”吗?还是我必须先解析请求并使用setCookie 创建一个cookie?
如果它没有自动添加cookies,有没有办法这样做?
【问题讨论】:
标签: javascript php api http-headers httpcookie
我正在尝试与 API 建立连接。当我调用这个 API 的方法时,它会响应一个通过 HTTP 标头发送的 cookie 值。
此标头会自动添加到客户端“我的浏览器”吗?还是我必须先解析请求并使用setCookie 创建一个cookie?
如果它没有自动添加cookies,有没有办法这样做?
【问题讨论】:
标签: javascript php api http-headers httpcookie
它将由您的 http 客户端自动处理(您无需手动设置)。 服务器应使用 Set-Cookie 标头(而不是 cookie)响应,然后客户端将保存该 cookie,并在下一次请求时发送。
设置 cookie
Cookie 使用 HTTP Set-Cookie 标头设置,在 HTTP 响应中发送。此标头指示浏览器存储 cookie 并在以后的请求中将其发送回服务器(如果浏览器不支持 cookie 或禁用了 cookie,当然会忽略此标头)。
例如,浏览器将它的第一个请求发送到 www.example.org 网站的主页:
GET /index.html HTTP/1.1
Host: www.example.org
...
服务器用两个 Set-Cookie 头响应:
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: theme=light
Set-Cookie: sessionToken=abc123; Expires=Wed, 09 Jun 2021 10:18:14 GMT
...
服务器的 HTTP 响应包含网站主页的内容。但它也指示浏览器设置两个 cookie。第一个“主题”被认为是“会话”cookie,因为它没有 Expires 或 Max-Age 属性。会话 cookie 通常会在浏览器关闭时被浏览器删除。第二个,“sessionToken”包含一个“Expires”属性,指示浏览器在特定日期和时间删除cookie。
接下来,浏览器发送另一个请求以访问网站上的 spec.html 页面。该请求包含一个 Cookie 标头,其中包含服务器指示浏览器设置的两个 Cookie。
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123
...
这样,服务器就知道这个请求和前一个请求相关。服务器将通过发送请求的页面来响应,并可能使用 Set-Cookie 标头添加其他 cookie。
服务器可以通过在响应页面请求时包含 Set-Cookie 标头来修改 cookie 的值。然后浏览器将旧值替换为新值。
cookie 的值可以包含任何可打印的 ASCII 字符(! 到 ~,unicode \u0021 到 \u007E),不包括 , 和 ;并且不包括空格。 cookie 的名称不包括相同的字符以及 =,因为这是名称和值之间的分隔符。 cookie 标准 RFC 2965 限制更多,但浏览器并未实现。
术语“cookie crumb”有时用于指代 cookie 的名称-值对。
Cookie 也可以通过在浏览器中运行的脚本语言(例如 JavaScript)来设置。在 JavaScript 中,对象 document.cookie 用于此目的。例如,指令 document.cookie = "temperature=20" 创建一个名称为 "temperature" 且值为 "20" 的 cookie。
【讨论】:
CURLOPT_HTTPHEADER将它添加到cURL请求中“因此我不必管理来自/to API 内部”?
CURLOPT_HTTPHEADER,API 不会收到标头。为什么会导致这个问题?我必须为 cURL 设置一个选项以通过 HTTP 标头自动包含设置的标头吗?我厌倦了使用curl_setopt($ch, CURLOPT_COOKIE, true);,但它没有自动包含标题
是的,cookie 将被添加到 document.cookie,除非在发送 cookie 时设置了 httponly 参数。
【讨论】: