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);

0 ответов

Другие вопросы по тегам