【发布时间】:2013-01-29 09:30:46
【问题描述】:
我尝试以 10 MB 的块上传用户提交的文件。我目前正在使用原始 XMLHttpRequest(和 XDomainRequest)在前端推送每个单独的切片(File.prototoype.slice)。后端是使用upload module的Nginx。
仅供参考,这里是我如何使用slice的概要:
element.files[0].slice(...)
我了解跨浏览器前缀方法webkitSlice 和mozSlice 等等。
我遇到的问题是实际发出跨域请求。我正在从server.local 上传到upload.server.local。在 Firefox 中,options 请求正常,然后实际的post 失败。在 Chrome 和 Opera 中,options 请求失败并显示
OPTIONS https://URL Resource failed to load
这里是来自 Firefox 的标题:
请求标头
OPTIONS /path/to/asset HTTP/1.1
Host: upload.server.local:8443
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:18.0) Gecko/20100101 Firefox/18.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Origin: https://server.local:8443
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-disposition,content-type,x-content-range,x-session-id
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
响应标头
HTTP/1.1 204 No Content
Server: nginx/1.2.6
Date: Wed, 13 Feb 2013 03:27:44 GMT
Connection: keep-alive
access-control-allow-origin: https://server.local:8443
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Headers: x-content-range, origin, content-disposition, x-session-id, content-type, cache-control, pragma, referrer, host
access-control-allow-credentials: true
Access-Control-Max-Age: 10000
实际的post 请求永远不会离开浏览器。 Nginx 访问日志永远不会看到post。浏览器出于某种原因将其停止。如何解开此帖子被屏蔽的原因?
Chromium 24
Firefox 18
Opera 12.14
我已验证所有浏览器都正确支持 CORS here。
通过将我的上传指向https://cors-test.appspot.com/test,我已经确认问题肯定出在服务器端标头上。
【问题讨论】:
-
如果您在这两个站点上都使用 HTTP 而不是 HTTPS 会发生什么?
标签: nginx xmlhttprequest cross-domain cors fileapi