在返回数据时设置头信息即可,例如:
const http = require("http");
http.createServer(function (req, res) {
res.writeHead(200,{
"Access-Control-Allow-Origin":'*'
})
}).listen(8888);
跨域是由浏览器限制的,浏览器允许
img
、script
、link
等标签访问不同域的内容。
将其中的*
设置为某个域名,那么则标识只允许某个域名可以访问。但是只能一个域名,如果需要多个域名需要增加服务器逻辑进行判断。
当请求头中包含一些自定义的头信息,那么默认情况下同样会收到跨域限制,因此需要设置允许的头:
const http = require("http");
http.createServer(function (req, res) {
res.writeHead(200,{
"Access-Control-Allow-Origin":'*',
//设置允许的请求头
"Access-Control-Allow-Headers":'X-Test-Cors',
//设置允许的请求方法
"Access-Control-Allow-Methods":'POST,PUT,Delete',
//设置最长时间,即1000S内无需再次发送预请求
"Access-Control-Max-Age":'1000',
})
}).listen(8888);
public
任何代理服务器都可以对数据进行缓存private
只有发起请求的浏览器可以缓存no-cache
任何一个节点都不可以缓存const http = require("http");
http.createServer(function (req, res) {
res.writeHead(200,{
"Cache-Control":'max-age=20',
})
}).listen(8888);
关于刷新缓存:可以文件名后加入根据内容生成的哈希码。
must-revalidate
如果缓存已经过期,需要向源服务端重新获取数据,不能直接使用proxy-revalidate
缓存服务器必须在过期时在源服务器重新请求no-store
本地和代理不可以缓存no-transform
不可以随便改动返回的内容Last-Modified
上次修改时间,配合If-Modified-Since
或者If-unModified-Since
使用Etag
数据签名,配合If-Match
或者If-Non-Match
使用,对比资源的签名判断是否使用缓存。Cookie包含的属性
max-age
和expires
设置过期时间Secure
只在https的时候发送HttpOnly
无法通过document.cookie访问const http = require("http");
http.createServer(function (req, res) {
res.writeHead(200,{
"Cache-Control":'max-age=20',
// 设置过期时间2s的cookie
"Set-Cookie":'id=123;max-age=2',
"Set-Cookie":'abc=456',
})
}).listen(8888);
Cookie存在过期时间,如果不设置过期时间,那么过期时效为浏览器关闭时。 为主域设置Cookie后所有子域都可以使用Cookie。 Session通常的使用方法时,通过cookie设置session。