Как определить, является ли запрошенный URL-адрес HTTPS за переключателем контента, который вызывает сервер по http? - PullRequest
1 голос
/ 18 февраля 2010

У меня есть классическая веб-страница asp, в которой я вызываю источник XML с использованием MSXML2 на коробке IIS. Для MSXML2 требуется полный URL-адрес http://www.dom.com/path и т. Д., И все это работало очень хорошо, пока я не попытался установить на сервер за переключателем содержимого по URL-адресу https.

После некоторой отладки я выяснил, что у переключателя содержимого нет пути для http-трафика, поэтому при вызове http-URL произошел сбой, и я смог исправить это, изменив целевой URL-адрес на https.

Поскольку этот код используется как в http, так и в настоящее время https, я хотел переключить тип URL в коде, чтобы у меня была разветвленная ветвь кода.

Я подумал, что это будет легко, и что это сработает

if Request.ServerVariables("HTTPS") = "off" then 

Но ни один переключатель контента не держит сертификат, а не веб-сервер, который планирует HTTP-трафик

Может кто-нибудь придумать, как я могу сказать, что такое полный URL-адрес с помощью https / http или каким-либо другим способом, которым я могу это исправить.

Большое спасибо, Пол

Ответы [ 2 ]

1 голос
/ 22 февраля 2010

Вам нужно изменить переключатель содержимого, чтобы он отправлял специальный заголовок, если исходный запрос поступил через https. Мы используем Zeus ZXTM, где я работаю, и я могу добавить правило трафика, которое говорит, что если запрос начинается с https, добавить заголовок с именем «FROM_SSL» со значением true. Затем я проверяю этот заголовок на сервере, а не использую встроенный материал.

1 голос
/ 20 февраля 2010

Сложно ответить на этот вопрос без детального знания устройства, которое вы называете «переключателем контента», каким бы оно ни было.

Возможно, лучше всего начать с этой простой страницы ASP: -

<%

Dim vntKey

For Each vntKey In Request.ServerVariables
    Response.Write vntKey & " = " & Server.HTMLEncode(Request.ServerVariables(vntKey)) & "<br />"
Next

%>

Нажмите эту кнопку через HTTPS на клиенте, и в появившемся списке заголовков HTTP могут появиться дополнительные пользовательские заголовки, добавленные устройством, которые могут позволить вам принять решение, которое вам нужно.

Редактировать

Альтернативой может быть настройка внутреннего сервера на прослушивание обоих портов 80 и, скажем, 8080. Настройте обратный прокси-сервер для пересылки запросов, поступающих на 443, на порт 8080 вашего сервера. Теперь вы можете обнаружить HTTPS, потому что запрос поступил в 8080 на вашем внутреннем сервере.

...