我试图通过AJAX将文件发送到rackspace。这是我第一次看CORS。我在文档中看到了发送预检请求的选项,但是由于我亲自设置标题并知道我的来源有效,我试图放弃,这些是我上传端点的标题:
HTTP/1.1 204 No Content
Content-Length: 0
X-Container-Object-Count: 2
Accept-Ranges: bytes
X-Container-Meta-Access-Log-Delivery: false
X-Container-Meta-Access-Control-Expose-Headers: etag location x-timestamp x-trans-id
X-Timestamp: 1401852621.29287
X-Container-Meta-Access-Control-Allow-Origin: h ttp://localhost:8080**<-- (manually added the space after "h" so stackoverflow would let me submit)
X-Container-Bytes-Used: 5572910
Content-Type: text/plain; charset=utf-8
X-Trans-Id: txfc64055cb1114b6fb0ef6-0053a77a46ord1
Date: Mon, 23 Jun 2014 00:52:22 GMT
但是,每当我尝试发送请求时,它立即在chrome中失败并显示以下消息:
XMLHttpRequest cannot load [**I'm redacting my actual endpoint**]. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'h ttp://localhost:8080' is therefore not allowed access.
以下是我的请求标题:
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryZSg4nEq8EDaXQQBu
Origin:h ttp://localhost:8080
Referer:h ttp://localhost:8080/tools/artwork
<-- (manually added the space after "h" so stackoverflow would let me submit)
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.152 Safari/537.36
我错过了什么?即使您知道原产地是否被允许,是否需要预检请求?我从来没有看到过包回来好像Chrome不发送?
答案 0 :(得分:2)
是的,只要你的CORS请求不是“简单”变种,就需要进行预检 - 这意味着你有一个GET,HEAD或POST以外的方法,一个除application / x-www-form之外的内容类型-urlencoded,multipart / form-data或text / plain,或者您的请求设置自定义标头。
但是,无论如何,您粘贴的回复首先不包含Access-Control-Allow-Origin
(它有X-Container-Meta-Access-Control-Allow-Origin
),这就是您的请求被拒绝的原因。
答案 1 :(得分:-1)
在您的服务器中,添加Access-Control-Allow-Origin: http://foo.example
标题。
例如在Spring Controller中,response.setHeader("Access-Control-Allow-Origin", "http:localhost:8080");
其他事项,
Access-Control-Allow-Origin: http://foo.example // you can add as many urls separated by commas or '*' to allow all urs
Access-Control-Allow-Methods: POST, GET, OPTIONS // Request method options separated by commas
Access-Control-Allow-Headers: X-PINGOTHER
Access-Control-Max-Age: 1728000 // expiration in milliseconds
请参阅此MDN网站。