2014-10-20 4 views
0

Я хочу, чтобы реализовать веб-прокси, как kproxy.com, так что я могу загрузить любой веб-сайт в IFRAME моего сайта и прокси все данные веб-сайта с моего сервераВнутренняя реализация прокси-сайтов, как kproxy

Я проверил их функциональность, и я обнаружил, что они заменяют все теги скриптов, теги ссылок (css) и теги изображений для извлечения содержимого со своего сервера

например. если оригинальный сайт содержит тег как

<script src="http://google.com/abc.js"></script> 

они заменят его

<script src="http://kproxy.com/redirect/foo/bar/abc.js"></script> 

совершится такой функциональность с заменой всех узлов, таким образом они могут быть проксированными через мой сервер

но теперь проблема остается с вызовами ajax, которые будут исходить от javascript и будут вызывать исходный сервер, поэтому в моем iframe я иногда получаю "x-frame-options = SAMEORIGIN" ошибка

Итак, что я могу сделать для того, чтобы иметь те же функции, что и kproxy? и прокси-сервер всего трафика через мой сервер.

+0

Какой веб-сервер вы используете в настоящее время? –

+0

@SteveSiebert В настоящее время я использую IIS 8.0 –

ответ

1

Ваша проблема возникает из-за некоторых ссылок (возможно, AJAX), которые генерируются в другом домене.

Вы должны проверить сценарии, загруженные для URL-адресов строится во время выполнения, как

...a="https:"==g.location.protocol?"https://csi.gstatic.com/csi":"http://csi.gstatic.com/csi");return... 

(пример взят из Google Analytics). То же самое касается некоторых апплетов jQuery.

Кроме того, вы должны убедиться, что некоторые скрипты не делают собственные вызовы AJAX для получения дополнительных URL-адресов. Если это так, вам нужно проверить, хотите ли вы проксировать эти вызовы.

В принципе, для каждого вызова, который дает вам сбой в одном происхождении, вам необходимо отслеживать, откуда он пришел, и дать указание вашему прокси распознать и переписать его.

Или вы можете попробовать и сделать то же самое в Javascript, то есть ввести код Javascript, который будет переписывать эти URL во время выполнения. Например, у вас может быть явная проверка, скажем, CKEditor

// client requested a script and you, the proxy, fetched it in 'script' 
if (script contains 'CKEDIT.options') { 
    determine init call position in script 
    split the script in two, A and B, before and after the init call 
    make 'script' equal to a new script made up of B plus C plus A concatenated 
    where C is the line "CKEDIT.options.url = 'http://mysite/proxy...';\n" 
    so that, user side, the initialization will happen with your site's address 
    The script will then propagate that address in lots of places without need 
    for you to rewrite anything else. 
} else { 
    // script is unmodified 
} 
... other checks like the above... 

... finally: 
send 'script' to the client