Ajax: Wie erfahre ich, ob eine Benutzerskriptimplementierung den Origin-Header nicht setzt?

ei einigen Benutzerskriptimplementierungen (wie Google Chrome) sind direkte AJAX-Anforderungen zulässig, bei einigen anderen jedoch nicht. Außerdem gelten Einschränkungen für Same Origin Policy. Hier ist ein Teil des Codes:

/*
 * Get the size of the file.
 * @Button the current button for downloading the video.
 * @Url the http url of the video.
 */
function SetFileSize(Button, Url) {
    var ajax = new XMLHttpRequest();
    ajax.onloadend = function () {
        GetResolution(Button, Url, ' - ' + (parseInt(this.getResponseHeader("Content-Length")) / 1048576).toFixed(3) + ' Mo')
    }
    ajax.open('HEAD', Url, true); // <-- HEAD allow to get only the data of the headers.
    ajax.send(null);
}

/*
 * Retrieve width and height from an MPEG-4 file.
 * Width and height are stored as float values, where width come next to height inside binary data.
 * There is no fixed place in the file. The method is to get them at 10 bytes before "mdia".
 */
function GetResolution(Button, Url, FileSize) {
    var ajax = new XMLHttpRequest();
    ajax.onloadend = function () {
        var metadata = new DataView(this.response);
        for (i = 0;(i < metadata.byteLength) && (metadata.getUint32(i) != 0x6D646961); i += 32) {} // 0x6D646961="mdia"
        button.setAttribute('title', metadata.getUint32(i - 14) + 'x' + metadata.getUint32(i - 10) + FileSize);
    }
    ajax.responseType = 'arraybuffer'; // We want to handle binary data.
    ajax.open('GET', Url, true); // <-- the 'false' have been deprecated.
    ajax.setRequestHeader('Range', 'bytes=181-300'); // Proceed with a partial download.
    ajax.send(null);
}

Das Ergebnis ist der Server(https://cors-anywhere.herokuapp.com/) sendet einen 400-Fehler, der das @ meldOriginheader fehlt. Browser erlaubt nicht das @ zu setzOriginheader also ein schneller und schmutziger Hack wäre die benutzerdefinierte Einstellungx-requested-with. Wenn ein alter Browser das @ gesetzt hOriginheader richtig, dies macht ein Duplikat vonx-requested-with. Hier wäre Code:

ajax.setRequestHeader('x-requested-with', document.domain); // chrome doesn't support setting the 'Origin' header automatically.

Ich kann nicht @ verwendtry Anweisungen da synchrone AJAX-Anfragen veraltet sind, kann ich den Origin-Header nicht setzen. Also, wie kann ich wissen, ob der Browser keinen bestimmten Header gesetzt hat?

Antworten auf die Frage(0)

Ihre Antwort auf die Frage