ajax - cloudflare 可以添加自定义 header 吗?

标签 ajax google-chrome cloudflare

无论如何要在 cloudflare 中添加自定义标题?

我们做了一些 https ajax 来缓存静态文件,
但它没有处理响应 header 中的某些 header ,例如“Access-Control-Allow-Credentials”,并导致 chrome 失败。

最佳答案

Scott Helme 发布了一种使用最近发布的新 Cloudflare Workers 实现此目的的方法。

https://scotthelme.co.uk/security-headers-cloudflare-worker/

let securityHeaders = {
  "Content-Security-Policy": "upgrade-insecure-requests",
  "Strict-Transport-Security": "max-age=1000",
  "X-Xss-Protection": "1; mode=block",
  "X-Frame-Options": "DENY",
  "X-Content-Type-Options": "nosniff",
  "Referrer-Policy": "strict-origin-when-cross-origin",
}

let sanitiseHeaders = {
  "Server": "My New Server Header!!!",
}

let removeHeaders = [
  "Public-Key-Pins",
  "X-Powered-By",
  "X-AspNet-Version",
]

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

async function addHeaders(req) {
  let response = await fetch(req)
  let newHdrs = new Headers(response.headers)

  if (newHdrs.has("Content-Type") && !newHdrs.get("Content-Type").includes("text/html")) {
    return new Response(response.body, {
      status: response.status,
      statusText: response.statusText,
      headers: newHdrs
    })
  }

  Object.keys(securityHeaders).map(function(name, index) {
    newHdrs.set(name, securityHeaders[name]);
  })

  Object.keys(sanitiseHeaders).map(function(name, index) {
    newHdrs.set(name, sanitiseHeaders[name]);
  })

  removeHeaders.forEach(function(name) {
    newHdrs.delete(name)
  })

  return new Response(response.body, {
    status: response.status,
    statusText: response.statusText,
    headers: newHdrs
  })
}

关于ajax - cloudflare 可以添加自定义 header 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43623584/

相关文章:

google-chrome - 嵌入式 Vimeo(iframe)全屏在 chrome 中不起作用

javascript - Facebook 分享按钮不会在 Chrome 中显示

php - 带 cloudflare 的 https 给出 502 而 http 工作正常

python-3.x - Cloudflare Pages 根据提交使用不同的 sphinx 版本,其中一个版本失败

php - Ajax POST 请求返回 int 而不是字符串

javascript - 如何从异步调用返回响应?

javascript - jquery-selectize.js 更改了下拉列表识别问题

jquery - 如何让 jquery 导航栏在 div 标签中加载信息?

javascript - .getComputedTextLength() 在 IE 和 Chrome 中返回不同的值

cloudflare - 使用 Cloudflare 缓存 JSON