拒绝在 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-Origin
、Access-Control-Max-Age
和 Access-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”