2013-04-03 2 views
0

Для создания пользовательского обратного прокси (написанного на C++) я хочу сделать перевод URI в реальном времени в HTML-содержимое. Например, если я хочу получить доступ к ressource на http://myserver/, используя http://my-reverse-proxy/myserver, все абсолютные и точечные ссылки, такие как http://myserver/somecontent1.ext или /somecontent2.ext, необходимо изменить.Realtime URI-перевод содержимого HTML в C/C++

HTML-тег

<img src="/sample.png"> 

бы поэтому быть переведены на

<img src="/myserver/sample.png"> 

С моей точки зрения есть в подходах:

1) Использование регулярных выражений и замены строк, чтобы найти все связанные HTML-теги и их пути, используя группы захвата, и выполняют некоторую замену строк.

2) Разбирайте весь контент HTML, выполняйте некоторые преобразования в дереве разбора и хорошо печатайте результат обратно до допустимого источника HTML.

И вот в чем заключается этот вопрос: есть ли у вас какие-либо впечатления, какое решение может быть быстрее и, возможно, даже более разумным? Вы знаете рамки, которые я могу использовать, чтобы не изобретать колесо? Поскольку этот процесс следует использовать позже и для ресурсов на основе CSS и на основе XML, он не должен быть решением, зависящим от HTML.

Заранее благодарен!

+0

Если вы планируете использовать его для CSS, ваш вариант 2 невозможен ... – FredericS

+0

@FredericS Я могу анализировать и символизировать CSS, почему бы не работать? Используя что-то вроде [SDF] (http://www.program-transformation.org/Sdf/SdfLanguage), я даже мог понять разбор встроенного CSS в HTML-контенте. – muffel

+0

уверен, что вы можете анализировать как CSS, так и XML, но языки вообще не похожи. У вас будет синтаксический анализатор, зависящий от CSS, зависящий от HTML и XML парсер и минимальное повторное использование кода (общая часть преобразования, скорее всего, будет вашим вариантом 1, но на определенных узлах ваших синтаксических диаграмм). – FredericS

ответ

0

Прокси-серверы обычно работают, будучи серверами. Они обрабатывают все HTTP-запросы, изменяют запрошенные URL-адреса и затем передают модифицированный запрос на сервер с другой стороны.

Вы должны придерживаться этой парадигмы. Это намного проще и эффективнее, чем обманывать сами файлы. Все, что делается в режиме реального времени, может быть выполнено в точке запроса.

Кроме того, следует, вероятно, спросить: почему пользовательский обратный прокси? Такие вещи уже существуют.

+0

. сервер, который я разрабатываю, заключается в предоставлении внешнего доступа к внутренним ресурсам. Поскольку внутренние ресурсы не могут быть изменены (так же, как веб-интерфейс телеприставки или некоторых средств домашней автоматизации), а некоторые внешние устройства, такие как смартфоны, не могут подключаться к частичным ressource с использованием (HTTP-) прокси-серверов самостоятельно, мне действительно нужно Таким образом: веб-браузер подключается к удаленной прокси-системе. Целевая сеть идентифицируется с использованием пути URI (например, '/ myserver'), а обратный прокси - это« посредник », который взаимодействует между браузером и целевым веб-сервером. – muffel

+0

@muffel, почему ваш сервер не просто перенаправляет все запросы на прокси? то есть перенаправить любой запрос на 'http: // myserver /' на 'http: // my-reverse-proxy/myserver'? –

+0

Поскольку сервер не сможет перехватить какой-либо запрос после первого. Пример. Я хочу получить доступ к «myserver» с помощью некоторого веб-браузера, у которого нет настроек прокси-серверов. Все, что я могу сделать, это открыть URL-адрес.Поэтому я получаю доступ к 'http: // reverse-proxy/myserver', который переводится на' http: // myserver'. Этот результат содержит изображение '', которое браузер будет загружать как 'http: // reverse-proxy/a.png' вместо' http: // reverse-proxy/myserver/a.png'. Многие мобильные браузеры не могут использовать прокси-серверы в интернет-соединениях 3G, но я также хочу их адресовать. – muffel