我正在尝试与API建立连接。当我调用此API的方法时,它会使用通过HTTP标头发送的cookie值进行响应。
此标题会自动添加到客户端“我的浏览器吗?”或者我是否必须首先解析请求并使用setCookie
创建cookie?
如果它没有自动添加cookie,有没有办法这样做?
答案 0 :(得分:6)
它将由您的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。
答案 1 :(得分:0)
是的,除非在发送Cookie时设置document.cookie
参数,否则Cookie会添加到httponly
。