Вебторрент сломан

Я пытаюсь понять, как заставить веб-торрент воспроизводить видео, но получаю странные ошибки. Вот pastebin: https://pastebin.com/raw/3wp5F8Fh

А вот и живая версия: https://41182065-e8d9-40b1-8dd9-9433b402bce9.htmlpasta.com/

Когда мы заходим в консоль хрома, мы получаем это:

Mixed Content: The page at 'https://41182065-e8d9-40b1-8dd9-9433b402bce9.htmlpasta.com/' was loaded over HTTPS, but requested an insecure script 'http://momentjs.com/downloads/moment.min.js'. This request has been blocked; the content must be served over HTTPS.
/favicon.ico:1 Failed to load resource: the server responded with a status of 404 ()
(index):1 Access to XMLHttpRequest at 'https://nyaa.si/download/941788.torrent' from origin 'https://41182065-e8d9-40b1-8dd9-9433b402bce9.htmlpasta.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
webtorrent.min.js:4 Uncaught Error: Error downloading torrent: XHR error
    at webtorrent.min.js:5
    at t.exports.<anonymous> (webtorrent.min.js:7)
    at t.exports.t (webtorrent.min.js:5)
    at t.exports.r.emit (webtorrent.min.js:4)
    at XMLHttpRequest.c.onerror (webtorrent.min.js:7)

person Ryan Glen    schedule 21.06.2019    source источник


Ответы (1)


Объяснение содержится в сообщении об ошибке, но вкратце: ваш браузер заблокировал запрос, потому что вы используете AJAX для связи с удаленным сервером, и этот сервер не отправляет соответствующий заголовок «Access-Control-Allow-Origin».

Причина, по которой такие запросы блокируются, заключается в том, чтобы защитить вас от вредоносных скриптов: если вы вошли на веб-сайт А и имеете доступ к некоторым личным данным, тогда веб-сайт Б не сможет инициировать запрос AJAX для доступа к этим данным, если только А доверяет Б.

Общий термин для этого вида доступа — «Общий доступ к ресурсам между источниками» или «CORS». Для получения дополнительной информации у Mozilla есть хорошее резюме здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

Если у вас есть контроль над удаленным сервером, ответ с соответствующим заголовком позволит пройти запросу (хотя обратите внимание, что некоторые браузеры, такие как Safari, по-прежнему будут блокировать файлы cookie с удаленного сервера, поскольку этот метод может использоваться для отслеживания).

person DaveMongoose    schedule 21.06.2019
comment
Могу ли я что-нибудь сделать? У меня нет доступа к этому серверу. - person Ryan Glen; 21.06.2019
comment
@RyanGlen В этом ответе приведены некоторые подробности того, как его обойти: stackoverflow.com/a/43881141/2208016 Но я бы посоветовал быть осторожным - некоторые из предложений (например, прокси) означают, что вы передаете данные через третью сторону, поэтому важно доверять этой третьей стороне или, по крайней мере, осознавать риски. - person DaveMongoose; 21.06.2019
comment
Я пробовал использовать прокси, он просто выдавал мусорные данные, см. здесь: https://cors.io/?https://nyaa.si/download/941788.torrent Есть идеи, почему это может происходить? - person Ryan Glen; 21.06.2019
comment
@RyanGlen это не мусорные данные - это содержимое файла .torrent (вы можете скачать его самостоятельно, если хотите проверить). Я не уверен, как вы заставляете веб-торрент загружать его, но это выходит за рамки этого вопроса. - person DaveMongoose; 21.06.2019
comment
Я так и думал, но я не могу загрузить этот файл из браузера. Вероятно, я мог бы написать какой-нибудь бэкэнд-скрипт для загрузки этих данных с cors.io, но я не совсем уверен, что это хорошее решение? Моя идея: написать ruby-скрипт для загрузки файла .torrent с cors.io, а затем сделать так, чтобы webtorrent указывал на локальную версию файла .torrent. Будет ли это работать? - person Ryan Glen; 21.06.2019