IE9 X-Frame-Options запрещает загрузку

У меня тут большие неприятности. У меня есть приложение .Net MVC 4, которое использует пользовательский интерфейс Kendo в качестве основы макета и для загрузки. Загрузка работает нормально во всех браузерах, за исключением IE9 (9.0), работающего на Windows Server 2008 RC2 x64я действительно не знаю, важна ли эта информация.

Это дает мне ошибку SCRIPT5: Access Denied, когда Кендо пытается отправить асинхронный вызов. Согласно этот пост Член Telerik на форумах пользовательского интерфейса кендо, Кендо создает iframe, чтобы сделать возможной асинхронную загрузку в предыдущих версиях IE10.

Я попытался добавить заголовок в веб-конфиг API:

<customHeaders>
    <add name="Access-Control-Allow-Credentials" value="true" />
    <add name="X-Frame-Options" value="ALLOW-FROM *"/>
</customHeaders>

Другие заголовки для CORS имплицитно устанавливаются для CORS Handler Class, например это в API.

Итак, я вижу этот заголовок в заголовках ответа на запрос IE, поэтому IE извлекает его. Я не знаю поддержки - особенно в IE - для значения ALLOW-FROM ни в том случае, если он принимает *. Но я попытался использовать значение SAMEORIGIN для этого заголовка, и это не сработало, и у меня есть причина для этого: Мой WebApi не находится по тому же адресу, что и внешний интерфейс. Они находятся на разных серверах. и адреса. Загрузка отправляется непосредственно в API по этому URL-адресу:

http://dev.******.com/webserviceapi/api/UserProfile/Upload

И Front-End находится в:

http://dev.******.com/portal/

Скрытый контент в URL одинаков для обоих адресов.

Поэтому я понятия не имею, как этого добиться. Эта ошибка не соответствует ничему, что я нашел в Интернете. Любая помощь будет очень признательна!! Заранее спасибо.


person DontVoteMeDown    schedule 11.06.2013    source источник


Ответы (1)


Я думаю, что это может быть открытое состояние,

Использовать этот

if (xhr.readyState == 1 /* OPENED */)

это открыто на стороне сервера, открыто соединение с сервером, см. это

Если вы использовали этот класс из блог msdn

public class ValuesController : ApiController

если класс не является общедоступным, вы также можете получить ошибку.. перед CORS..

вы видели второй комментарий в Блоге...

jQuery.support.cors = true; вам нужно изменить это, чтобы явно поддерживать неподдерживающие междоменные вызовы, в следующем комментарии говорится...

that flag tells jQuery to use an alternative object for making cross-domain calls if the browser doesn't natively support it on its XmlHttpRequest implementation. For example, in IE8 that will cause jQuery to switch from XmlHttpRequest to the **XDomainRequest** object (in IE10 they "fixed" it in a way that XmlHttpRequest can be used for all requests). Regardless of the object on the client, the server still needs to "play the game" and return the appropriate headers so that the browser will allow such requests to be made.

Да, пост от Teleric Team Member логически совершенен, но у каждого IE свой способ работы с событиями и системой, (уж больно, это один из тех..BUG) Я еще не нашел список ошибок IE9, но есть один ссылка, в которой указаны ошибки IE8, просто укажите, если это имеет отношение, это полезно, поскольку мы знаем, что нам нужно иметь дело с.. :)

Попробуйте readyState == 2, если это работает нормально.

Я думаю, что должна быть какая-то мелочь, которую вы должны упустить.

сошлитесь на вторую статью того же автора на блог msdn

обратитесь к этому, если это поможет quirkmode

Я не являюсь постоянным пользователем mvc, поэтому не могу правильно оценить другие аспекты этой ситуации.

Я ищу другие причины, опубликую, если найду что-то связанное.

Я надеюсь, это поможет...

person MarmiK    schedule 17.06.2013
comment
Спасибо, мужик. Я согласен, что это может быть небольшая недостающая деталь. Я внимательно посмотрю на ваш пост и скоро сообщу вам результат. Еще раз спасибо. - person DontVoteMeDown; 17.06.2013