![](/img/trans.png)
[英]Flask CORS - no Access-control-allow-origin header present on a redirect()
[英]How do I make Cloudfiles FormPost return the “Access-Control-Allow-Origin” header to enable CORS?
我想在Rackspace CluodFiles容器中啟用CORS,所以在閱讀文檔后,我看到我必須設置一些容器元數據(我使用的是Python和Pyrax ):
from pyrax import cloudfiles
cloudfiles.set_container_metadata(container_name, {
'X-Container-Meta-Access-Control-Allow-Origin': 'localhost:8000',
'X-Container-Meta-Access-Control-Expose-Headers': 'Access-Control-Allow-Origin',
'X-Container-Meta-Access-Control-Max-Age': '10',
})
print cloudfiles.get_container_metadata(container_name)
我得到輸出:
{'x-container-meta-access-control-allow-origin': 'localhost:8000',
'x-container-meta-access-control-expose-headers': 'Access-Control-Allow-Origin',
'x-container-meta-access-control-max-age': '10',
'x-container-meta-access-log-delivery': 'false'}
但是瀏覽器沒有在OPTIONS
預檢請求中獲得Access-Control-Allow-Origin
,因此取消了AJAX調用:
HTTP/1.1 401 Unauthorized
Content-Length: 131
Content-Type: text/html; charset=UTF-8
Allow: HEAD, GET, PUT, POST, COPY, OPTIONS, DELETE
X-Trans-Id: txXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Date: Wed, 13 Nov 2013 20:07:34 GMT
Connection: keep-alive
少了什么東西?
謝謝!
Rackspace有關於如何在這里為容器啟用CORS的文檔。 例7.11是一個CORS測試頁面,它允許您在嘗試上傳文件之外測試配置。
測試CORS頁面 - 接受對象或容器的標記和URL,讓你嘗試在其上調用HTTP方法。
注意 :我刪除了“DELETE”方法,因為它可能會產生不希望的結果(例如刪除容器/對象)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test CORS</title>
</head>
<body>
Token<br><input id="token" type="text" size="64"><br><br>
Method<br>
<select id="method">
<option value="GET">GET</option>
<option value="HEAD">HEAD</option>
<option value="POST">POST</option>
<option value="PUT">PUT</option>
</select><br><br>
URL (Container or Object)<br><input id="url" size="64" type="text"><br><br>
<input id="submit" type="button" value="Submit" onclick="submit(); return false;">
<pre id="response_headers"></pre>
<p>
<hr>
<pre id="response_body"></pre>
<script type="text/javascript">
function submit() {
var token = document.getElementById('token').value;
var method = document.getElementById('method').value;
var url = document.getElementById('url').value;
document.getElementById('response_headers').textContent = null;
document.getElementById('response_body').textContent = null;
var request = new XMLHttpRequest();
request.onreadystatechange = function (oEvent) {
if (request.readyState == 4) {
responseHeaders = 'Status: ' + request.status;
responseHeaders = responseHeaders + '\nStatus Text: ' + request.statusText;
responseHeaders = responseHeaders + '\n\n' + request.getAllResponseHeaders();
document.getElementById('response_headers').textContent = responseHeaders;
document.getElementById('response_body').textContent = request.responseText;
}
}
request.open(method, url);
request.setRequestHeader('X-Auth-Token', token);
request.send(null);
}
</script>
</body>
</html>
要在pyrax或任何其他SDK之外設置這些值,我使用了以下代碼:
https://gist.github.com/chrisrasco/7455804
請記住在適當的位置設置容器的用戶名,apikey和路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.