仅在启用缓存时出现 COR 问题

问题描述 投票:0回答:1

在尝试对 R2 中托管的对象(相当于 Cloudflare S3)发出

fetch
请求时,我遇到了非常奇怪的 COR 问题组合:

  • 如果我在开发工具中禁用缓存: enter image description here

那么,我就没有 COR 问题了。

同样,如果我禁用缓存然后重新启用它,我也没有问题。但是...如果我“清除浏览器缓存”,然后刷新页面,我会遇到 COR 问题。

尝试使用以下 COR 策略对 R2 存储桶发出

fetch
请求时会发生这种情况:

[
  {
    "AllowedOrigins": [
      "https://localhost:3000",
      "http://localhost:3000"
    ],
    "AllowedMethods": [
      "GET",
      "HEAD",
      "POST",
      "PUT",
      "DELETE"
    ],
    "AllowedHeaders": [
      "*"
    ],
    "ExposeHeaders": [
      "*"
    ],
    "MaxAgeSeconds": 3600
  }
]

这应该允许所有 COR 请求。可能会发生什么?

需要注意的一件事 - 如果请求包含

Origin
标头,Cloudflare 仅返回正确的 COR 标头。

这是我用来测试 CORS 与非 CORs 版本的脚本:

#!/bin/bash

# config
url="$1"
origin="${2:-http://localhost:3000}"

if [ -z "$url" ]; then
    echo "usage: $0 <url> [origin]"
    echo "example: $0 https://your-r2-url.com/file http://localhost:3000"
    exit 1
fi

echo "testing cors for url: $url"
echo "using origin: $origin"
echo

# test 1: fresh request
echo "=== testing fresh request ==="
curl -si -h "origin: $origin" \
     -h "cache-control: no-cache" \
     "$url" | grep -v "^$"

# get response headers and extract etag
etag=$(curl -si -h "origin: $origin" "$url" | grep -i "etag" | tr -d '\r' | cut -d' ' -f2)

if [ ! -z "$etag" ]; then
    echo
    echo "=== testing cached request with etag: $etag ==="
    curl -si -h "origin: $origin" \
         -h "if-none-match: $etag" \
         "$url" | grep -v "^$"
fi

在这两种情况下我都得到了

Access-Control-Allow-Origin
标题。

amazon-s3 cors
1个回答
0
投票

我解决了这个问题:

            const response = await fetch(url, {
                cache: 'no-cache'
            });

说实话,我不确定发生了什么。我的假设是,由于

no-cache
仍然向服务器发出条件请求,它正在刷新一些重要的标头?

© www.soinside.com 2019 - 2024. All rights reserved.