Заголовки CORS для доступа к файлу в другом домене

Я пытаюсь создать программу аудио визуализации на Codepen. Я создал свой собственный веб-сервер Ubuntu с Apache, который позволяет мне прямой доступ для изменения заголовков и конфигурации сервера.

Хотя браузеры могут получать доступ к файлам в другом домене, для чтения частот в аудио требуются специальные заголовки CORS. Чтобы прочитать аудио частоты, я должен использоватьcreateMediaElementSource для доступа к аудио информации, включая частоты. Когда браузер видит этот метод JavaScript, он знает, что на сервере должны быть установлены определенные заголовки, чтобы разрешить доступ. Что подводит нас к мотивам этого вопроса: какие заголовки нужно установить?

Все протестированные мной браузеры возвращают ошибку CORS. Вот как выглядит ошибка в Firefox, хотя я тестировал ее в Chrome, Opera и Safari с похожими результатами:

Блокирован перекрестный запрос: одна и та же политика происхождения запрещает чтение удаленного ресурса вhttp://williamgreen.hopto.org/audioVisualization/song.mp3, (Причина: заголовок CORS ‘Access-Control-Allow-Origin’ не совпадает с nu (null) ’).

Файл возвращается206 partial content, Вот возвращенные заголовки сервера (в настоящее время):Вот отправленные заголовки (в настоящее время):

function log(text) {
  document.getElementById("log").textContent += text + "\n";
}

var audio, source, context;
var url = "http://williamgreen.hopto.org/audioVisualization/song.mp3";

document.addEventListener("DOMContentLoaded", function() {
  log("URL: " + url);
  
  log("Creating Audio instance from audio file");
  audio = new Audio(url);
  audio.crossOrigin="anonymous";
  
  audio.addEventListener("canplay", function() {
    log("Playing audio file through HTML5 Audio for 3 seconds");
    audio.play();
    
    setTimeout(function() {
      log("Creating Web Audio context");
      context = new (typeof AudioContext != "undefined" ? AudioContext : webkitAudioContext)();

      log("Calling createMediaElementSource on audio (switching to Web Audio)");
      source = context.createMediaElementSource(audio);
      
      setTimeout(function() {
        log("Connecting source to context destination");
        source.connect(context.destination);
        
        log("\nIf no sound can be heard right now, the problem was reproduced.");
      }, 1000);
    }, 3000);
  });
});
<div id="log"></div>

Что мне нужно изменить, чтобы это работало?

Ответы на вопрос(1)

Ваш ответ на вопрос