API Dailymotion - CORS: сервер имеет Access-Control-Allow-Origin: * но запрос ajax не проходит через браузер того же источника
Возможно, это проблема с API Dailymotion, который появляется: см. Здесь: jQuery ajax-запрос блокируется, потому что Cross-Origin
В вышеупомянутом вопросе решение - JSONP, однако это не будет работать здесь для запроса POST.
Из моего тестового запроса за пределами браузера выясняется, что сервер принимает запросы CORS, однако мои запросы Ajax постоянно терпят неудачу, независимо от того, сколько я работаю с опциями.
Мои настройки ajax:
type:"POST",
//I tried without this parameter
xhrFields: {
//I tried with false
withCredentials: true
},
processData: false,
//I tried with the correct content type of 'multipart/form-data',
contentType: false,
//I tried with this enabled(and without)
//crossDomain:true,
Пример запроса вне браузера (обратите внимание, что настройки CORS выглядят хорошо)
POST /upload?uuid=21dddfd208868ec5ee38c0f641aa0a43 HTTP/1.1
User-Agent: curl/7.35.0
Host: upload-01 . sv6 . dailymotion . com
Accept: */*
Content-Length: 139
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------5219277ca226e314
* Done waiting for 100-continue
HTTP/1.1 200 OK
Date: Sun, 30 Aug 2015 21:05:54 GMT
Content-Type: text/plain
Transfer-Encoding: chunked
Connection: keep-alive
* Server xupload/2.2.6 is not blacklisted
Server: xupload/2.2.6
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Content-Range, Content-Disposition, Content-Description, Session-ID
Access-Control-Allow-Methods: GET, POST
Ошибка Ajax:
DAILYMOTION Object { readyState: 0, getResponseHeader: .ajax/v.getResponseHeader(), getAllResponseHeaders: .ajax/v.getAllResponseHeaders(), setRequestHeader: .ajax/v.setRequestHeader(), overrideMimeType: .ajax/v.overrideMimeType(), statusCode: .ajax/v.statusCode(), abort: .ajax/v.abort(), state: .Deferred/d.state(), always: .Deferred/d.always(), then: .Deferred/d.then(), 10 more… } error Exception { message: "", result: 2153644038, name: "", filename: "https://ajax.googleapis.com/ajax/li…", lineNumber: 4, columnNumber: 0, inner: null, data: null, stack: ".send@/ajax-googleapis-com/a…" } dmupload.js:98:12
"DAILYMOTION[object Object]error[Exception... "<no message>" nsresult: "0x805e0006 (<unknown>)" location: "JS frame :: ajax-googleapis-com/ajax/libs/jquery/2.1.4/jquery.min.js :: .send :: line 4" data: no]"
ошибка firebug:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://upload-01.sv6.dailymotion.com/upload?uuid=6513ac948c1c71afdfca3be8d359d0a5&seal=12dc43863f90d931f63e6492cdb40a9e?access_token=dXgDWFQYX1gPVRxOUBpaEQlFER5ZQ0hHCg. (Reason: CORS request failed).
ОБНОВЛЕНИЕ: я получил запрос параметров, чтобы пройти, я бросил jquery и использовал только ajax, используя этот код:
var xhr = new XMLHttpRequest();
xhr.open('POST', myUrl2, true);
xhr.setRequestHeader('Authorization', 'Bearer ' + token);
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
//xhr.setRequestHeader('X-Upload-Content-Length', blob.size);
// xhr.setRequestHeader('X-Upload-Content-Type', blob.type);
xhr.onload = function(e) {
if (e.target.status < 400) {
var location = e.target.getResponseHeader('Location');
} else {
alert("err10")
}
};
xhr.onerror = function(e) {
alert("err1", e)
};
xhr.send({'file': blob});
ОБНОВЛЕНИЕ 2: Теперь я могу отправить запрос POST, но не могу прочитать ответ. Я все же смогу использовать функцию обратного вызова, чтобы это не имело значения, но это не сработало. вот пояснительный скриншот и мой новый код.
var fd4 = new FormData();
console.log(blob)
fd4.append("file", blob);
var xhr = new XMLHttpRequest();
xhr.open('POST', myUrl2, true);
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
//xhr.withCredentials = true;
xhr.setRequestHeader('Content-Length', blob.size);
// xhr.setRequestHeader('X-Upload-Content-Type', blob.type);
xhr.onload = function(e) {
console.log("HEADERS", e.target.getAllResponseHeaders())
if (e.target.status < 400) {
var location = e.target.getResponseHeader('Location');
//sendFile_(blob, blobl.size, blob.type, myUrl2);
} else {
alert("err10")
}
};
xhr.onerror = function(e) {
console.log("HEADERS", e.target.getAllResponseHeaders())
alert("err1", e)
};
xhr.send(fd4);