如何使用Hapijs正确地提供静态资产

时间:2015-01-22 14:52:53

标签: node.js cdn hapijs fastly

我试图快速指向正在运行hapijs并从/assets/提供静态文件的heroku实例。我的路线设置如下:

  // Assets
  {
    method: "GET",
    path: "/assets/{path*}",
    config: {
      cache: {
        privacy: 'public',
        expiresIn: 31536000000 // 1 year in milliseconds
      }
    },
    handler: {
      directory: { path: './public/assets'}
    }
  },

以下是每个请求发回的标题:

HTTP/1.1 200 OK
content-type: text/css; charset=utf-8
last-modified: Thu, 22 Jan 2015 07:08:07 GMT
etag: "9c7d48799e5230b7c97ef1978b81ad533c10b950"
set-cookie: csrf=xyz; Path=/
set-cookie: session=xyz; Path=/
cache-control: max-age=31536000, must-revalidate, private
Date: Thu, 22 Jan 2015 07:21:15 GMT
Connection: keep-alive

如何在此点的响应中设置Cookie,为什么cache-control标头设置为must-revalidateprivate。难道它只是公开吗?

2 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。我有一些设置Cookie的插件:yarhapi-auth-cookiecrumb。遗憾的是,还没有任何标准方法可以从特定路径中删除插件。

  • crumb允许您在注册选项中添加skip功能,以禁用它。

  • auth让我们通过设置auth: false在路线配置中停用它。

  • yar还没有任何机制可以执行此操作,所以我提交了一个PR来修复它

答案 1 :(得分:0)

在认为响应存储在缓存中之前,您还可以通过Fastly删除Cookie。为此,您需要执行以下配置步骤:

  1. 内容 - >头:

    姓名Remove Set-Cookie from /assets

    输入:Cache

    行动:Delete

    目的地:http.Set-Cookie

  2. 在新生成的标题配置:设置 - >缓存条件 - >

    姓名:/assets

    申请时:req.url ~ "^/assets/"

  3. 这将删除Set-Cookie标题,然后才能看到""""通过Fastly,可以使其安全。