javascript - CloudFlare Workers - 检查 Cookie、添加 header 、设置 Cookie

标签 javascript cookies http-headers cloudflare cloudflare-workers

我想通过 CloudFlare workers 动态添加 http-headers只限初次来访者。例如这些 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-headers,然后设置该特定 cookie。
  3. 如果 cookie 确实存在,则什么也不做。

您可以使用代码 here .

这是来自 CF 博客的一般示例(涉及 cookie 和 header ):

// 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
})

最佳答案

这是一个实现您所描述内容的 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
}

关于javascript - CloudFlare Workers - 检查 Cookie、添加 header 、设置 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49428779/

相关文章:

PHP Header 重定向通过 if 语句

javascript - 使用 ES6 + Flow 代替 TypeScript

javascript - 当&&之前的语句为false时强制&&之后的语句执行

javascript - 有没有好的 'cookie' javascript 库?

cookies - 从 WebView2 Edge 网站登录获取 cookie 以进行 WinInet/WinHTTP 爬网

perl - 我如何手动将 cookie 添加到 WWW::Mechanize 已经存在的 cookiejar

javascript - AWS API 使用 Javascript 签署 POST 请求

javascript - 获得 Websocket 连接的完整响应

javascript - 使用 'undefined' 函数参数返回简单类型错误

javascript - 按照维基百科上的说法实现 LLL 算法,但遇到了严重的问题