Возможно, что-то подобное? Испытано.
plaintext;
}, $dom->find('div')));
echo $result['body'];
Header
this is a paragraph
this is another paragraph
Ключевое слово - подсистема балансировки нагрузки
Проблема сводится к тому, что подсистема балансировки нагрузки обрабатывает шифрование SSL / дешифрование, и это абсолютно очевидно для веб-сервера.
Request: Client -> 443or80 -> loadbalancer -> 80 -> php
Response: PHP -> 80 -> loadbalancer -> 443or80 -> Client
Реальный вопрос здесь, "Вы управляете конфигурацией подсистемы балансировки нагрузки?"
Если Вы делаете, существует пара способов обработать его. Настройте подсистему балансировки нагрузки, чтобы иметь отдельные сервисные определения для HTTP и HTTPS. Затем отправьте Трафик HTTP для портирования 80 из веб-серверов и Трафика HTTPS для портирования 81 из веб-серверов. (порт 81 не используется ничем больше).
В апаче настройте два различных виртуальных хоста:
<VirtualHost 1.2.3.4:80>
ServerName foo.com
SetEnv USING_HTTPS 0
...
</VirtualHost>
<VirtualHost 1.2.3.4:81>
ServerName foo.com
SetEnv USING_HTTPS 1
...
</VirtualHost>
Затем переменная среды USING_HTTPS
будет также 1
|0
, В зависимости от которого виртуальный хост взял его. Это будет доступно в $_SERVER
массив в PHP. Разве это не прохладно?
Если у Вас нет доступа к конфигурации Подсистемы балансировки нагрузки, то вещи немного более хитры. Не будет способа окончательно знать, используете ли Вы HTTP или HTTPS, потому что HTTP и HTTPS являются протоколами. Они указывают, как соединиться и через какой формат отправить информацию, но в любом случае, Вы используете HTTP 1.1 для выполнения запроса. Нет никакой информации в фактическом запросе, чтобы сказать, является ли это HTTP или HTTPS.
Но не падайте духом. Существует несколько идей.
6-й параметр к PHP's setcookie()
функция может дать клиенту команду отправлять cookie ТОЛЬКО по Подключениям HTTPS (http://www.php.net/setcookie). Возможно, Вы могли установить cookie с этим параметром и затем проверить на него по последующим запросам?
Другая возможность состояла бы в том, чтобы использовать JavaScript для обновления ссылок на каждой странице в зависимости от протокола (добавляющий ПОЛУЧИТЬ параметр).
(ни одно из вышеупомянутого не было бы пуленепробиваемо),
Другая прагматическая опция состояла бы в том, чтобы получить Ваш SSL на другом домене, такой как secure.foo.com
. Затем Вы могли обратиться к приему VirtualHost выше.
Я знаю, что это не самая легкая проблема, потому что я имею дело с нею в течение дня (загрузка сбалансировала веб-кластер позади подсистемы балансировки нагрузки Cisco CSS с модулем SSL).
Наконец, можно всегда брать перспективу, которую веб-приложение должно переключить на режим SSL при необходимости, и доверять пользователям для НЕ положения обратно его (в конце концов, это - их данные по строке (обычно)).
Надежда это помогает немного.
$ _SERVER ["HTTPS"] не там, включен или нет, неважно, при рассмотрении сайта через SSL или не-SSL. По некоторым причинам хостинг принял решение обслуживать все зашифрованные Запросы HTTPS, но вниз порт 80. И таким образом, $ _SERVER ["HTTPS"] никогда не включен, не там, просто никакая полезная обратная связь на той точке сервера. Так, чтобы параметр был всегда быть пустым.
Необходимо удостовериться, что у поставщика есть следующая строка в записи VHOST для сайта: SSLOptions +StdEnvVars
. Та строка говорит Apache включать переменные SSL в среду для Ваших сценариев (PHP).