Cookie 可以包含多个键值对,因此它不仅限于单个值。一个 Cookie 可以携带多个属性,每个属性由键值对表示
Set-Cookie: name=value; expires=Sat, 30 Apr 2022 23:59:59 GMT; path=/; domain=.example.com; secure; HttpOnly
在HTTP协议中,请求头之间使用回车加换行符(CRLF,即\r\n)进行分割
Header1: Value1\r\n
Header2: Value2\r\n
Header3: Value3\r\n
- Host 请求头用于指定客户端发起请求的目标服务器的主机名和端口号
Host: www.example.com:8080 - Referer 请求头用于指示请求的来源 URL,即告诉服务器请求是从哪个页面跳转过来的。它记录了当前请求的来源页面的 URL 地址。
例如,当用户点击网页上的链接或提交表单时,浏览器会将 Referer 请求头包含在发送的请求中,以告知服务器请求的来源。 - content-type:body内容的格式
text/plain:纯文本,不包含任何格式的文本数据。
text/html:HTML 格式的文档。
application/json:JSON 格式的数据。
application/xml:XML 格式的数据。
multipart/form-data:表单数据,用于文件上传等场景。
application/x-www-form-urlencoded:URL 编码的表单数据。
image/jpeg:JPEG 图像格式。
image/png:PNG 图像格式。
application/pdf:PDF 文档格式。
application/octet-stream:二进制数据流,通常用于文件下载等场景。
- Authorization:请求头
JWT返回: 服务器将生成的 JWT或其他凭证发送回客户端。
请求认证: 客户端在每个后续请求中将 JWT或者其他凭证 添加到 Authorization 头中发送给服务器。
csharp
Authorization: Bearer <token>
- set-cookie:响应头中携带
浏览器在本地存储 cookie 时会存储 cookie 的名称和值,以及与 cookie 相关的元信息(如过期时间、路径、域、安全标志等)。当浏览器发送请求时,它只会在请求头部中携带 cookie 的名称和值,而不会携带其他元信息。
一个http请求可以携带多个set-cookie
csharp
Set-Cookie: name=value; Expires=Wed, 09 Jun 2021 10:18:14 GMT; Max-Age=3600; Domain=example.com; Path=/subdir; Secure; HttpOnly; SameSite=None
Set-Cookie: name1=value1; Expires=Wed, 09 Jun 2021 10:18:14 GMT; Max-Age=3600; Domain=example.com; Path=/subdir; Secure; HttpOnly; SameSite=None
name=value: Cookie 的名称和值。
Expires=Wed, 09 Jun 2021 10:18:14 GMT: 指定 Cookie 的过期时间。
Max-Age=3600: 指定 Cookie 的最大生存时间(单位为秒)。
Domain=example.com: 指定了 Cookie 可以发送到的域。
Path=/subdir: 指定了服务器上的路径,Cookie 只有在这个路径下才发送。
Secure: 指定该 Cookie 只能通过 HTTPS 连接发送到服务器。
HttpOnly: 设置了此标志后,Cookie 将无法通过 JavaScript 访问。
SameSite=None: 设置了 SameSite 属性,以防止跨站点请求伪造 (CSRF) 攻击。
通常情况下,建议使用Max-Age而不是Expires,因为Max-Age相对Expires更加灵活且易于处理。如果两者同时设置了,浏览器会优先遵循Max-Age的值。
- cookie:当访问到本地cookie对应的域名时,如果cookie没有过期,浏览器会自动携带
一个http响应可以携带多个cookie
csharp
GET /example_page HTTP/1.1
Host: example.com
Cookie: sessionid=abc123; user_pref=dark_mode; cart_items=3
csharp
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 235
Date: Wed, 20 Apr 2022 08:00:00 GMT
Server: Apache
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Example</title>
</head>
<body>
<h1>Hello, World!</h1>
<p>This is an example HTML page.</p>
</body>
</html>