web开发中常用http headers总结

request headers

Accept-Language: 支持的语言类型,类似于一个数组,每种语言对应一个权重(0-1的数字),一般用来做多语言用

Content-Type: 请求体的类型

application/x-www-form-urlencoded: a=1&b=2
application/json: {"a": "1", "b": "2"}
multipart/form-data: 文件类型

复制代码

Referer: 资源在哪个网站中被使用,来源。可篡改,重要的东西不可依赖于他

Accept-Encoding: 浏览器支持的格式

Origin: 当前网站的来源,只支持post请求

Cookie: 每次发请求,都会带到服务端

If-Modified-Since: 缓存相关,详见下文的 Last-Modified

If-None-Match: 缓存相关,详见下文的 Etag

Range: Range:bytes=n-m, 请求内容的第n 到m 的字节

服务端设置res.setHeader('Content-Range', 'bytes n-m/total'),
并设置状态码res.statusCode = 206
复制代码

response headers

Content-Type: 设置响应内容的类型和编码, 经常配合mime模块使用

res.setHeader('Content-Type', mime.getType(req.url) + ';charset=utf-8' )
复制代码

Cache-Control: 强制缓存,设置缓存有效时长(比expires靠谱)

res.setHeader('Cache-Control', 'no-cache') //不设置强制缓存
res.setHeader('Cache-Control', 'max-age=3600') //强制缓存1小时, 单位:秒
复制代码

Expires: 强制缓存 单位:毫秒,设置缓存失效的一个时间点

res.setHeader('Expires', new Date( Date.now() + 3600 * 1000 ).toLocaleString()) 
复制代码

Last-Modified: 上次修改时间

// 通过fs.stat 拿到 statRes, 拿到上次修改的时间
// 设置给Last-Modified, 浏览器下次访问这个文件时候
// 会带上一个头If-Modified-Since, 取出值old
// 再次通过fs.stat获取修改时间,和old进行比较
// 若相同,则设置304,并end,否则重新设置Last-Modified并重新返回文件
res.setHeader('Last-Modified', statRes.ctime.toGMTString())
复制代码

Etag: 存放根据文件内容计算出的价签字符串

// sign的计算可以根据实际情况来定,可以用md5文件内容加签得到一个值,
// 常用的是文件内容的 修改时间的16进制+内容长度的16进制值,
// 也可以通过其他算法, 得到一个不规则字符串,
// 设置到Etag以后,浏览器下次访问这个文件,会带上一个头If-None-Match
// 取到值old以后,重新根据文件内容用相同算法计算一个sign,和old比较,
// 若相同,则设置304,并end,否则重新设置Etag并重新返回文件
res.setHeader('Etag', sign);
复制代码
3种缓存可以同时使用, Last-Modified和Etag是并且关系,有一个没对上,就重新发送文件

Content-Range: 返回部分内容,和响应头Range配合使用

Content-Length: 响应内容的字节长度

Access-Control-Allow-Origin: 允许哪个源来访问

可以设置成 *(所有网站) ,也可以设置一个白名单,当当前访问的域名在白名单中,
就设置成当前访问的域名
复制代码

Access-Control-Allow-Methods: 允许哪些方法访问,GET,POST,PUT,DELETE。。。

Access-Control-Allow-Credentials:是否可携带cookie
需要前端ajax也设置xhr.withCredentials = true;

Content-Encoding: 告诉浏览器,按照那种方式解析文件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值