Преодоление «Отображение запрещено X-Frame-Options» - PullRequest
408 голосов
/ 12 июля 2011

Я пишу крошечную веб-страницу, цель которой состоит в том, чтобы создать несколько других страниц, просто объединяя их в одно окно браузера для удобства просмотра. На нескольких страницах, которые я пытаюсь создать, запрещается создание рамок, и выдается «Отказ от отображения документа, потому что отображение запрещено X-Frame-Options». ошибка в Chrome. Я понимаю, что это ограничение безопасности (по уважительной причине), и у меня нет доступа для его изменения.

Существует ли какой-либо альтернативный метод кадрирования или не кадрирования для отображения страниц в одном окне, который не будет отключен заголовком X-Frame-Options?

Ответы [ 26 ]

1 голос
/ 16 июля 2019

Отредактируйте .htaccess, если вы хотите удалить X-Frame-Options из всего каталога.

И добавьте строку: Заголовок всегда сбрасывает X-Frame-Options

[содержимое из: Преодоление «Отображение запрещено X-Frame-Options»

1 голос
/ 27 апреля 2018

Единственный реальный ответ, если вы не контролируете заголовки своего источника, который хотите в своем iframe, - это прокси. Пусть сервер выступит в роли клиента, получит источник, уберет проблемные заголовки, при необходимости добавит CORS, а затем пингует ваш собственный сервер.

Есть еще один ответ, объясняющий, как написать такой прокси. Это не сложно, но я был уверен, что кто-то должен был сделать это раньше. По какой-то причине это было просто трудно найти.

Я наконец нашел несколько источников:

https://github.com/Rob--W/cors-anywhere/#documentation

^ предпочтительнее. Если вам нужно редкое использование, я думаю, вы можете просто использовать его приложение heroku. В противном случае, это код для самостоятельного запуска на вашем собственном сервере. Обратите внимание на то, что пределы.

whatorigin.org

^ второй выбор, но довольно старый. предположительно более новый выбор в python: https://github.com/Eiledon/alloworigin

тогда есть третий вариант:

http://anyorigin.com/

Что, по-видимому, допускает небольшое бесплатное использование, но помещает вас в общедоступный список позора, если вы не платите и не используете какую-то неопределенную сумму, с которой вы можете быть сняты, только если заплатите комиссию ...

0 голосов
/ 19 марта 2014

Не упоминается, но может помочь в некоторых случаях:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
    if (xhr.readyState !== 4) return;
    if (xhr.status === 200) {
        var doc = iframe.contentWindow.document;
        doc.open();
        doc.write(xhr.responseText);
        doc.close();
    }
}
xhr.open('GET', url, true);
xhr.send(null);
0 голосов
/ 02 октября 2017

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

ДОБАВИТЬ ниже в свой iframe

sandbox = "allow-same-origin-allow-scripts allow-popups allow-form"

0 голосов
/ 07 октября 2013

Используйте эту строку, приведенную ниже, вместо функции header().

echo "<script>window.top.location = 'https://apps.facebook.com/yourappnamespace/';</script>";
0 голосов
/ 11 августа 2015

У меня была эта проблема, и я решил ее, отредактировав httd.conf

<IfModule headers_module>
    <IfVersion >= 2.4.7 >
        Header always setifempty X-Frame-Options GOFORIT
    </IfVersion>
    <IfVersion < 2.4.7 >
        Header always merge X-Frame-Options GOFORIT
    </IfVersion>
</IfModule>

Я изменил SAMEORIGIN на GOFORIT и перезапустил сервер

...