尝试从我们的S3 CDN下载资源时遇到一些问题。
我们似乎在S3上正确设置了CORS。
S3 CORS troubleshooting guide指出您需要发布“ Origin”标头,否则它将忽略所有CORS标头:
如果缺少标头,则Amazon S3不会将请求视为 跨域请求,并且不会在 响应。
我已经使用curl进行了测试,以确保返回了相关的CORS标头,并且可以看到只有在发送“ Origin”标头时才返回这些标头。
例如:如果我运行以下命令:
curl -v -H "Origin: http://localhost" https://cdn.myurl.com/mybucket/mystuff.json
我得到以下标头(以及一堆其他信息):
access-control-allow-origin: *
access-control-allow-methods: GET, POST, HEAD
但是,当我不传递Origin标头时,那些返回标头就丢失了:
curl -v https://cdn.myurl.com/mybucket/mystuff.json
我正在尝试使用UnityWebRequest get请求提取数据。通过WebGL运行应用程序时,调用request.SendWebRequest()
时会看到异常。无法加载https://cdn.myurl.com/mybucket/mystuff.json: 请求中没有'Access-Control-Allow-Origin'标头 资源。因此,不允许原点“ http://localhost:17936” 访问。
那么我只能假定UnityWebRequest没有发送“ Origin”标头。
我不能显式设置标题,因为如果出现错误,我会得到一个错误:
UnityWebRequest request = UnityWebRequest.Get(uri);
request.SetRequestHeader("Origin", "http://localhost");
InvalidOperationException:无法覆盖系统指定的标头
在这一点上我很困。
更新:
@sideshowbarker提到浏览器会自动添加Origin标头,所以这对我来说可能是个红色鲱鱼。
他们还建议我需要在浏览器工具中查看请求标头。这是我在浏览器中查看来自WebGL应用程序对此特定对象的请求时看到的:
我这里有几个有趣的地方。
在这里,我能想到的唯一的其他扳手是我们在S3存储桶前面使用CloudFlare。我认为这不会引起问题,因为它应该转发CORS标头,但我将绕过CloudFlare做一个测试。
答案 0 :(得分:0)
您必须将CORS策略添加到托管游戏的S3存储桶中。 AWS Documentaion.这将允许您随后进行https调用和Rest API调用等。这是存储桶设置,而不是游戏设置。
答案 1 :(得分:0)
只需将“ HEAD”请求添加到Amazon的cors配置中
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"POST",
"HEAD"
],