HTTP各种特性总览

时间:2022-07-23
本文章向大家介绍HTTP各种特性总览,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

CORS跨域请求的限制与解决

在返回数据时设置头信息即可,例如:

const http = require("http");
http.createServer(function (req, res) {
    res.writeHead(200,{
    	"Access-Control-Allow-Origin":'*'
    })
}).listen(8888);

跨域是由浏览器限制的,浏览器允许imgscriptlink等标签访问不同域的内容。

将其中的*设置为某个域名,那么则标识只允许某个域名可以访问。但是只能一个域名,如果需要多个域名需要增加服务器逻辑进行判断。

CORS跨域限制以及与请求验证

当请求头中包含一些自定义的头信息,那么默认情况下同样会收到跨域限制,因此需要设置允许的头:

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);

缓存头Cache-Control的含义和使用

  • 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和Etag的使用

验证头

  • Last-Modified 上次修改时间,配合If-Modified-Since或者If-unModified-Since使用
  • Etag 数据签名,配合If-Match或者If-Non-Match使用,对比资源的签名判断是否使用缓存。

Cookie和Seesion

Cookie包含的属性

  • max-ageexpires设置过期时间
  • 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。

HTTP长连接