一. Node.js中writeHead和setHeader的区别
writeHead可以设置http返回状态码,多个http响应头;
但是setHeader只针对单一属性的设置。
当使用 response.setHeader() 设置响应头时,则与传给 response.writeHead() 的任何响应头合并,且 response.writeHead() 的优先,因此 response.setHeader() 一定要放在response.writeHead() 的前面。
content-type
:互联网媒体类型;也叫做MIME类型
,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。
常见媒体类型:
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
application/xhtml+xml :XHTML格式
application/xml : XML数据格式
application/atom+xml :Atom XML聚合格式
application/json : JSON数据格式
application/pdf :pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : 中默认的encType,form表 单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
二. withCredentials
Access-Control-Allow-Credentials
这个是服务端下发到客户端的 response 中头部字段,意义是允许客户端携带验证信息,例如 cookie 之类的。
withCredentials: true,意思是客户端想要携带验证信息头,如果服务端设置是 Access-Control-Allow-Credentials
=> false,表示不允许携带信息头,这样就冲突了,因此前后端要保持一致。
三. Set-Cookie
-
HttpOnly:请注意,没有HttpOnly属性的cookie,在浏览器中可以使用document.cookie上访问,如果设置了 HttpOnly 属性,document.cookie就读取不到。
-
domain:存储的域名,
cookie是不跨域的,并且存储在主域名中子域名是可以访问到的,但是如果存在子域名中那么主域名是无法访问的
。所以这里一般是存在主域名,避免子域名访问不到cookie。 -
path:在domain下的哪个资源地址中使用cookie,一般指定根路径。
-
maxAge:有效期(毫秒)
-
expires=<date>:设置cookie的有效期,如果cookie超过date所表示的日期时,cookie将失效。如果没有设置这个选项,那么cookie将在浏览器关闭时失效。 注意:date是格林威治时间(GMT).
-
secure:只有在https的情况下才能使用cookie
-
singed:设置cookie是否签名
-
size:cookie的大小
默认情况下,cookie 在用户关闭会话时即关闭浏览器时过期。要持久化cookie,我们可以通过expires或Max-Age属性
注意:Max-Age优先于expires。
expires (绝对时间)
max-age (相对时间)过期时间
注意:
服务器的Set-Cookie只能设置在同域下,但是在浏览器的一个域下Application里却看到了多个域的cookie,这是因为这个页面用到了其他域的内容。
例如上面的new.qq.com,理论上都是qq.com域名下的内容,但是看到有.ipinyou.com的域,这是因为new.qq.com这个页面用了其他域名下的内容,且其他的那个域名需要cookie信息,所以才会在Application中展示出来。
四. Referrer policy
HTTP Cookie header 中set-cookie格式
请求头及响应头
Node设置响应头的方式
跨域问题导致设置 cookie 不生效
跨域设置cookie
nodejs 跨域设置cookie
Chrome 80 Cookie跨域 Samesite Lax 的错误
Cookie 的 SameSite 属性
CORS 跨域 Cookie 的设置与获取