CloudFlare Workers-检查Cookie,添加标题,设置Cookie

别墅

我想仅通过首次访问者通过CloudFlare工作者动态添加http-header 例如,这些标头:

Link: </path/to/file.css>; rel=preload; as=style; nopush
Link: </path/to/script.js>; rel=preload; as=script; nopush

因此,我需要通过CloudFlare Workers中的JavaScript进行以下操作:

  1. 检查客户端是否存在特定的cookie。
  2. 如果该cookie不存在,请添加http-header,然后设置该特定cookie。
  3. 如果cookie存在,则不执行任何操作。

您可以在此处使用代码

这是CF博客中的一个一般示例(涉及cookie和标头):

// A Service Worker which skips cache if the request contains
// a cookie.
addEventListener('fetch', event => {
  let request = event.request
  if (request.headers.has('Cookie')) {
    // Cookie present. Add Cache-Control: no-cache.
    let newHeaders = new Headers(request.headers)
    newHeaders.set('Cache-Control', 'no-cache')
    event.respondWith(fetch(request, {headers: newHeaders}))
  }

  // Use default behavior.
  return
})
肯顿·瓦尔达(Kenton Varda)

这是实现您所描述内容的Cloudflare Worker:

addEventListener('fetch', event => {
  event.respondWith(handle(event.request))
})

async function handle(request) {
  // Check for cookie.
  let cookies = request.headers.get('Cookie') || ""
  if (cookies.includes("returning=true")) {
    // User has been here before. Just pass request through.
    return fetch(request)
  }

  // Forward request to origin, get response.
  let response = await fetch(request)

  // Copy Response object so that we can edit headers.
  response = new Response(response.body, response)

  // Add headers.
  response.headers.append("Link",
      "</path/to/file.css>; rel=preload; as=style; nopush")
  response.headers.append("Link",
      "</path/to/script.js>; rel=preload; as=script; nopush")

  // Set cookie so that we don't add the headers
  // next time.
  response.headers.set("Set-Cookie", "returning=true")

  // Return on to client.
  return response
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Cloudflare Workers Buffer.from()

访问Cloudflare Workers站点的压缩数据

Cloudflare Workers-带有Vuejs的SPA

Cloudflare Workers:如果 URL 包含参数,则注入代码

具有几乎相同路线的 Cloudflare Workers

Cloudflare Workers KV承诺不能并行化吗?

我可以使用 Cloudflare Workers 批量处理请求吗?

Cloudflare Workers-选择性缓存HTML内容

Cloudflare Workers 站点中的缓存控制标头

如何更改缓存的 Cloudflare cookie?

如何让Angular应用程序与Cloudflare Workers一起工作-Workers Sites

Cloudflare Wordpress网络设置?

在cloudflare worker标头的'Set-Cookie'标头中设置多个cookie.set('Set-Cookie'函数

将ReadableStream存储在Cloudflare Workers KV等分布式数据存储中的用例是什么?

heroku cloudflare子域SSL设置

如何在CloudFlare中设置NX TTL?

DNS设置:使用CloudFlare / rhcloud的OpenShift

使用Cloudflare为Minecraft设置SRV记录

添加cloudflare时发生SSL错误

CloudFlare 工作人员获取 HTTPS 在 workers.dev 子域上有效,但在自己的子域上无效,出现 525 错误

如何使用 Python 或 DDNS 和 Cloudflare 检查公共 IP

Cloudflare:如何设置(DNS和名称服务器)

设置DNS记录以绕过Cloudflare似乎没有立即生效?

使用 Cloudflare 时在 AWS 安全组中设置静态 IP

如何将Cloudflare库添加到Codeigniter

Traefik:将子域自动添加到cloudflare DNS

cloudflare-sdk:无法通过 API 添加 MX 记录

使用C#在CloudFlare中添加DNS记录

如何通过标题设置cookie?