XML во фрейме не загружает XSLT - чья это проблема, Chrome, Firefox или моя? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть очень простое приложение ASP.NET MVC 5, размещенное на сервере интрасети, где на одной из страниц есть iframe для отображения документа:

<div class="document-view-container">
    ...
    <iframe class="document-frame" src="@Url.Action("GetDocumentImage", "Imaging", ...)" ></iframe>   
    ...
</div>

Иногда возвращаемый документPDF служил application/pdf, иногда фрагмент текста служил text/plain, а иногда XML служил text/xml.

. Метод GetDocumentImage извлекает содержимое документа из базы данных и возвращает егоиспользование File:

return File(doc.document.ToArray(), doc.mime_type);

Когда документ представляет собой XML, он часто содержит ссылку на таблицу стилей, с которой его следует просматривать:

<?xml-stylesheet type="text/xsl" href="//server.local/folder/content/grn.xslt"?>
<document>
   ...
</document>

Иногда эта таблица стилей происходит из того же субдомена, что и то, что возвращает @Url.Action() (т. Е. Тот же источник с iframe), но иногда это не так.

Если это не так, таблица стилей успешнозагружен и используется в Firefox, но Chrome отказывается загружать таблицу стилей и отображает в консоли ошибку

Небезопасная попытка загрузить URL http://server.local/folder/content/grn.xslt из фрейма с URL http://documents.server/imaging/GetDocumentImage/52855.Домены, протоколы и порты должны совпадать.

Это известная проблема, но, насколько я понимаю, она применима только к локальным файлам, а не к файлам, обслуживаемым с сервера, и одно из решений специально разместить файлы на сервере .Кроме того, он работает в Firefox.

Каков источник этой проблемы?

  • Это Chrome, который обрабатывает XML в iframe как локальный файл и, следовательно, неправильноне позволяет ему запрашивать таблицу стилей с сервера?
  • Является ли Firefox проблемой безопасности, когда он разрешает XML-файл из iframe запроса таблицы стилей, когда это должно быть запрещено?
  • Это я, кто недостаточно правильно обрабатывает XML с сервера, заставляя Chrome принять его за локальный файл?

Как правильно это исправить?

1 Ответ

1 голос
/ 23 сентября 2019

Я думаю, что существуют разные политики, в Firefox вы можете запросить таблицу стилей, поскольку Firefox использует CORS (https://www.w3.org/wiki/CORS#xml-stylesheet_processing_instruction_.28XMLSS.29) на xml-stylesheet запросах, в то время как Chrome не применяет CORS к таким запросам, равно как и Safari /Webkit (https://bugs.webkit.org/show_bug.cgi?id=110880).

Таким образом, последний блокирует попытку, первый выполняет ее только при использовании CORS для запроса, и ваше приложение на http://documents.server/ настроено на разрешение запросов кому-либо, отвечаяс access-control-allow-origin: *. Если http://documents.server/ не сделает этого, тогда загрузка перекрестного источника потерпит неудачу даже в Firefox.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...