Pull to refresh

Проблема бесплатного SSL от Cloudflare и ее решение

Когда начал использовать бесплатный SSL от Cloudflare я конечно читал что на бесплатном тарифе SSL поддерживается «Most modern browsers», но наивно подумал что «Most modern browsers» это почти «All browsers». Увы, это далеко не так. Лично у меня во всех браузерах и на всех устройствах все сразу заработало как надо, я на радостях еще и HTTP с концами отключил (поставил серверный редирект с HTTP на HTTPS). А вот пользователи сразу начали жаловаться что не могут зайти на сайт, выдает ошибку вроде «На сайте используется неподдерживаемый протокол». Первую жалобу посчитал еденичным случаем, и отправил пользователя обновлять браузер. Но следом появилась аналогичная жалоба еще от одного пользователя. А потом еще, и еще, и еще. А ведь далеко не все могут догадаться как пожаловаться админу сайта который вообще не открывается. Реальное количество отказов в доступе думаю было намного больше чем количество поступивших жалоб.

В общем пользователей пользующихся браузерами не попадающими под категорию «Most modern browsers» оказалось не так мало, чтобы отказываться от них ради бесплатного SSL от Cloudflare. Но и от SSL или Cloudflare отказываться тоже не хотелось.

Решение проблемы — клиентский редирект.

HTTP оставляем основным протоколом, указываем http:// в ссылках для «поделиться» и тому подобных, в общем делаем все чтобы повысить вероятность попадания нового пользователя на сайт именно по HTTP.

В head страниц добавляем примерно такой код:

<head>
<?php if(!$https) print '<script async src="https://'.$_SERVER['HTTP_HOST'].'/https.js"></script>'; ?>
</head>

Если подключение не по HTTPS, в head добавляется загрузка скрипта https.js по HTTPS-протоколу. Если HTTPS не поддерживается браузером скрипт не подгрузится и пользователь останется на HTTP. Если браузер поддерживает HTTPS, то будет подгружен скрипт который перебросит пользователя на эту же страницу по HTTPS.

Пример скрипта https.js

if(window.location.protocol != 'https:') { 
window.location = 'https://'+window.location.host+window.location.pathname+window.location.search+window.location.hash; 
}
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.