我想了解有關REST服務器和託管瓶服務器。即使REST服務器設置標題,訪問控制允許來源錯誤
在服務器URL運行卷曲我得到:
HTTP/1.1 200 OK
Access-Control-Allow-Methods: POST, OPTIONS, GET, HEAD
Access-Control-Allow-Origin: *
Access-Control-Max-Age: 21600
Content-Type: text/html; charset=utf-8
Date: Sat, 28 Jun 2014 07:08:41 GMT
Server: gunicorn/19.0.0
Content-Length: 36
Connection: keep-alive
但是,當我嘗試從另一個URL訪問數據,我得到:
的XMLHttpRequest不能加載 - 服務器URL - 。請求的資源上沒有「Access-Control-Allow-Origin」標題。起源 - 頁面url - 因此不允許訪問。
到目前爲止,我還試圖讓數據下面的代碼:
var formData = new FormData();
formData.append("name",username);
formData.append("id", userid);
var request = new XMLHttpRequest();
request.open("POST", "my-server-url");
request.send(formData);
console.log("Running Create user")
console.log("Status: "+request.status);
console.log("error: "+request.error);
console.log("responseText: "+request.responseText);
返回
Running Create user
Status: 0
error: undefined
responseText:
我與AJAX和jQuery嘗試也失敗,上述
描述了同樣的錯誤$.ajax({
url:'--server url--',
type:'POST',
data : mydata,
dataType: 'JSON',
success: function(data) {
console.log(data)
}
});
也
$.ajax({
url:'--server url--',
type:'POST',
data : mydata,
dataType: 'JSONP',
async: false,
success: function(data) {
console.log(data)
}
});
我在Python代碼中使用了crossdomain decorator snippet。
對於我的服務器的路由處理一個樣本:
@app.route("/", methods=['POST', 'GET', 'OPTIONS'])
@crossdomain(origin='*')
def create():
if request.method == 'POST':
name = request.form['name']
id = request.form['id']
#duplicate = collection.find_one({'name': name, 'token': token})
duplicate = collection.find_one({'id': id})
if not duplicate:
data = {'name': name,
'id': id}
collection.insert(data, safe=True)
response= make_response({'status': 'created'}, 201)
response.headers['Access-Control-Allow-Origin'] = "*"
return response
else:
response= make_response({'status': 'already exists'}, 302)
response.headers['Access-Control-Allow-Origin'] = "*"
return response
您是否在瀏覽器的控制檯中看到OPTIONS請求?如果是這樣,你可以在你的服務器上運行curl -XOPTIONS並在這裏發佈結果嗎? – kojo
@kojo感謝您的迴應。我終於找到了一個解決方法,並解決了通過ajax發送formData和設置'processData:false,contentType:false,'(現在我想弄清楚它爲什麼工作:-)的cors問題) – Wasi