У меня есть приложение Rails 3.0.x, которое отображает страницу, содержащую веб-плеер Yahoo. Плеер воспроизводит аудиофайл, обслуживаемый приложением Rails, контроллер, который обрабатывает запрос файла, использует send_data для отправки mp3-файла:
send_data content, :filename=>dsLabel, :type=>mimeType, :disposition => 'attachment'
(*) Я также пробовал встроенное расположение
Это отлично работает в Safari, IE и FF. Однако в Opera вы нажимаете кнопку воспроизведения, и звук никогда не воспроизводится, код Yahoo минимизирован, и немного сложно точно сказать, что не так, но я пришел к выводу, что это не проблема javascript, насколько я могу судить.
Одна вещь, которую следует отметить в отношении сайта, заключается в том, что когда я локально нахожусь в той же сети на работе, наш DNS-сервер разрешает сайту 10.x.x.x IP-адрес локальной сети, в противном случае он разрешается в общедоступный IP-адрес.
В Opera, если я открою «Настройки» и добавлю имя хоста под Trusted Websites->Secure Internal Hosts
, а затем перезагружу страницу, звук будет воспроизводиться нормально. Если я изменю свой DNS на OpenDNS, он также будет работать нормально. Кажется, я столкнулся с проблемой политики безопасности Opera, которую не совсем понимаю.
Мне кажется, что хотя внутренне мой хост разрешается в IP-адрес локальной сети, после загрузки Opera считает, что это общедоступный сайт, и поэтому MP3 не загружается, однако он также разрешается в IP-адрес локальной сети, поэтому он не похож на общедоступный /частная дивергенция.
Я надеялся, что кто-то в сообществе Stackoverflow, лучше разбирающийся в безопасности Opera, сможет объяснить политику, которую я здесь применяю.