拒绝在 chrome 中获取不安全的标题“位置”并且在 Firefox 中没有内容

Posted

技术标签:

【中文标题】拒绝在 chrome 中获取不安全的标题“位置”并且在 Firefox 中没有内容【英文标题】:Refused to get unsafe header "Location" in chrome and no content in firefox 【发布时间】:2018-07-12 00:00:50 【问题描述】:

我正在尝试将文件上传到 ovh 对象存储(openstack swift),但遇到了问题。

在 Chrome 中我得到:

Refused to get unsafe header "Location"

我尝试通过将'Access-Control-Expose-Headers': 'Location' 添加到请求标头来解决此问题。但错误仍然存​​在。

在 Firefox 中,我在控制台中得到以下信息:

OPTIONS XHR
[HTTP/1.1 200 OK 421ms]

Request Headers:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.5
Access-Control-Request-Headers: access-control-expose-headers,tus-resumable,upload-length,upload-metadata,x-auth-token
Access-Control-Request-Method: POST
Connection: keep-alive
Host: storage.gra1.cloud.ovh.net
Origin: http://localhost:8089
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0

Response Headers:
Allow: HEAD, GET, PUT, POST, OPTIONS, DELETE
Content-Length: 0
Date: Thu, 01 Feb 2018 14:55:05 GMT
X-IPLB-Instance: 12318
X-Openstack-Request-Id: txe638462886d66db5ad3c6-005a732a49
X-Trans-Id: txe638462886d66db5ad3c6-005a732a49
access-control-allow-headers: x-auth-token, upload-metadata, upload-length, tus-resumable, access-control-expose-headers
access-control-allow-methods: HEAD, GET, PUT, POST, OPTIONS, DELETE
access-control-allow-origin: *
vary: Access-Control-Request-Headers


POST XHR 
[HTTP/1.1 204 No Content 579ms]
Request Headers
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.5
Access-Control-Expose-Headers: Location
Connection: keep-alive
Content-Length: 0
Host: storage.gra1.cloud.ovh.net
Origin: http://localhost:8089
Referer: http://localhost:8089/mywebpage
Tus-Resumable: 1.0.0
Upload-Length: 4885581
Upload-Metadata: modelId RmF2b3usrGVz,name MjIyLmpwZz==,type aW1hZ2UvanBlZz==
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0
X-Auth-Token: aSecret000000001

Response Headers
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: x-trans-id, content-language, X-Container-Read, expires, X-Storage-Policy, last-modified, etag, x-timestamp, pragma, cache-control, content-type, x-openstack-request-id
Content-Length: 0
Content-Type: text/html; charset=UTF-8
Date: Thu, 01 Feb 2018 14:55:05 GMT
X-IPLB-Instance: 12309
X-Openstack-Request-Id: txe638462886d66db5ad3c6-005a732a49
X-Trans-Id: txe638462886d66db5ad3c6-005a732a49

我不知道'No Content'是成功还是错误,反正文件没有发送,所以可能是最后一个。

我的问题: - 如何摆脱 Chrome 错误信息 - 如何获取文件。

【问题讨论】:

答案和 cmets 中的更多信息:***.com/questions/5822985/… 【参考方案1】:

Access-Control-Expose-Headers 应该由请求资源的提供者(OpenStack Swift)而不是客户端添加到响应中。您需要做的是配置 OpenStack Swift 以将此标头添加到其响应中。

那你打算怎么做呢? OpenStack 允许您为每个容器设置/附加 Access-Control-Allow-OriginAccess-Control-Max-AgeAccess-Control-Expose-Headers 的自定义值。详情请见this official document。

示例:

让我们创建一个容器并设置我们想要添加到Access-Control-Expose-Headers 的自定义标头值,以响应对该容器中对象的请求。

curl -i -X PUT -H "X-Auth-Token: yourtoken" \
    -H "X-Container-Meta-Access-Control-Expose-Headers: Location" \
    http://192.168.56.3:8080/v1/AUTH_test/cont1

现在,对于您在此容器中创建的每个对象,您将看到 Location 列在 Access-Control-Expose-Headers 中,并消除 Chrome 中的错误消息。

您可以在我上面链接的文档中查看可以为每个容器配置的其余 CORS 标头。

【讨论】:

我设置了 Location 标头符合您的说明,确实 Chrome 错误消失了,但不知何故它仍然存在于我使用的 uppy 包中,更具体地说,它存在于它的 tus plugin 中。错误是:Error: tus: invalid or missing Location header, originated from request (response code: 204, response text: ) 嗯,我用uppy的xhrupload插件替换了tus插件,现在开始工作了! 我很高兴它对你有用。 tus 的问题似乎是它在响应中寻找 Location 标头,但默认情况下 OpenStack 不会将其添加到响应中。

以上是关于拒绝在 chrome 中获取不安全的标题“位置”并且在 Firefox 中没有内容的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Chrome 的 xmlHttpRequest 时拒绝设置不安全的标头“Origin”

在 http 网站中使用地理位置获取地址

允许对我之前拒绝的网站使用地理位置

如何在 mac 中以不安全模式启动 chrome?

Chrome 扩展“拒绝加载脚本,因为它违反了以下内容安全策略指令”

HTTP遭抛弃,Chrome将全部标示为不安全!