Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 谷歌云存储与Rails ActiveStorage的CORS问题_Amazon S3_Gcloud_Rails Activestorage - Fatal编程技术网

Amazon s3 谷歌云存储与Rails ActiveStorage的CORS问题

Amazon s3 谷歌云存储与Rails ActiveStorage的CORS问题,amazon-s3,gcloud,rails-activestorage,Amazon S3,Gcloud,Rails Activestorage,我已经使用gsutil为我的bucket设置了CORS,我认为应该可以使用,但是我还没有通过“请求的资源上没有“访问控制允许源”头”错误 这是我的cors json: [ { "origin": [ "*" ], "responseHeader": [ "Content-Type", "Content-MD5" ], "method": [ "PUT", "POST", "GET"

我已经使用gsutil为我的bucket设置了CORS,我认为应该可以使用,但是我还没有通过“请求的资源上没有“访问控制允许源”头”错误

这是我的cors json:

[
  {
    "origin": [
      "*"
    ],
    "responseHeader": [
      "Content-Type",
      "Content-MD5"
    ],
    "method": [
      "PUT",
      "POST",
      "GET",
      "HEAD",
      "DELETE",
      "OPTIONS"
    ],
    "maxAgeSeconds": 3600
  }
]
我已经验证了这实际上是被设置的:

gsutil cors get gs://mah-bucket
[{"maxAgeSeconds": 3600, "method": ["PUT", "POST", "GET", "HEAD", "DELETE", "OPTIONS"], "origin": ["*"], "responseHeader": ["Content-Type", "Content-MD5"]}]
以下是失败请求的临时标头:

Content-MD5: Ug6Qj+DozqmniNxTXOYnDA==
Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
Origin: https://subdomain.example.com
Referer: https://subdomain.example.com/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
我已经遵循了这里的建议:

我也尝试了一个新的匿名窗口,所以它不会缓存以前的飞行前请求中的任何内容

更新: 我已经将问题缩小到使用谷歌服务的ActiveStorage的边缘案例。普通的文件上传表单可以与AmazonS3和Google GCS服务一起使用。使用js上传可以在亚马逊使用,但不能在谷歌使用

在每种情况下发出的请求都是相同的,只是服务之间存在一些身份验证差异,但对飞行前请求的响应是不同的。以下是S3飞行前请求响应:

Access-Control-Allow-Headers: content-md5, content-type
Access-Control-Allow-Methods: PUT, POST, GET, HEAD
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3600
Content-Length: 0
Date: Tue, 24 Jul 2018 22:32:51 GMT
Server: AmazonS3
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-id-2: xxx/x/xxx
x-amz-request-id: xxx
access-control-allow-headers: Content-Type,Content-MD5
access-control-allow-methods: PUT,POST,GET,HEAD,DELETE,OPTIONS
access-control-allow-origin: *
access-control-max-age: 3600
alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
cache-control: private, max-age=0
content-length: 0
content-type: text/html; charset=UTF-8
date: Tue, 24 Jul 2018 22:43:25 GMT
expires: Tue, 24 Jul 2018 22:43:25 GMT
server: UploadServer
status: 200
x-guploader-uploadid: xxx-xxx
以下是地面军事系统飞行前请求响应:

Access-Control-Allow-Headers: content-md5, content-type
Access-Control-Allow-Methods: PUT, POST, GET, HEAD
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 3600
Content-Length: 0
Date: Tue, 24 Jul 2018 22:32:51 GMT
Server: AmazonS3
Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
x-amz-id-2: xxx/x/xxx
x-amz-request-id: xxx
access-control-allow-headers: Content-Type,Content-MD5
access-control-allow-methods: PUT,POST,GET,HEAD,DELETE,OPTIONS
access-control-allow-origin: *
access-control-max-age: 3600
alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
cache-control: private, max-age=0
content-length: 0
content-type: text/html; charset=UTF-8
date: Tue, 24 Jul 2018 22:43:25 GMT
expires: Tue, 24 Jul 2018 22:43:25 GMT
server: UploadServer
status: 200
x-guploader-uploadid: xxx-xxx

尽管看起来很愚蠢,但这似乎是一个区分大小写的问题。

您是否真的使用了:

"https://subdomain.example.com",
"https://example.com",
"https://*.example.com"

作为起源?如果是这样,那可能就是问题所在。您可能没有从这些域中的任何一个调用您的gs bucket。您应该拥有从中调用它的域。包括localhost:port如果从那里进行测试

您使用的是:

"https://subdomain.example.com",
"https://example.com",
"https://*.example.com"

作为起源?如果是这样,那可能就是问题所在。您可能没有从这些域中的任何一个调用您的gs bucket。您应该拥有从中调用它的域。从那里包括localhost:port if测试结果表明,我从Rails复制的direct_uploads_controller.js文件版本在浏览器和服务兼容性方面存在许多问题。我复制了此文件夹中的所有文件,并安装了丢失的spark-md5软件包,现在一切正常:


我测试的提交是372da2a22950ad3ae5cf744ed8e3caa69a7ed44b。

结果表明,我从Rails复制的direct_uploads_controller.js文件版本在浏览器和服务兼容性方面存在许多问题。我复制了此文件夹中的所有文件,并安装了丢失的spark-md5软件包,现在一切正常:


我测试的提交是372da2a22950ad3ae5cf744ed8e3caa69a7ed44b。

不是字面意思,不是。我使用的是一个真正的域。但我已经尝试了每一次迭代。我现在有(等价物)在那里,它与请求中的来源和浏览器控制台中的
位置相匹配。来源
。不是字面意思,不是。我使用的是一个真正的域。但我已经尝试了每一次迭代。我现在有(等价物)在那里,它与请求中的来源和浏览器控制台中的
位置.origin
完全匹配。因为这是“rails gcs cors”问题的第一个搜索结果,我想说的是,指南中的示例文件与OP中的不同。由于这是“rails gcs cors”问题的第一个搜索结果,我想说指南中的示例文件与OP中的不同。