Chrome 44 (beta) odesílá nově hlavičku HTTPS: 1, která může způsobovat problémy.
Na některých hostinzích (z těch co používám třeba
WebSupport už to opravili) si pak PHP myslí, že požadavek je pod
šifrovaným spojením HTTPS. Tj. proměnná
$_SERVER['HTTPS'] === 'on'
.
U aplikací v Nette, které neběží pod https, to pak způsobí
nekonečný redirect. Aplikace si prostě myslí, že k ní přistupujete přes
URL https://example.com
a přesměrovává na
http://example.com
.
Můžete to vyzkoušet z příkazové řádky pomocí:
curl -I --header "HTTPS: 1" http://example.com`
Že je hlavička HTTPS: 1
problematická se
už ví, takže je možné, že se změní a do Chrome nedostane.
Každopádně jako rychlý workaround, aby nedocházelo ke smyčce
přesměrování v betaverzi Chrome, je přidat na začátek bootstrap.php:
unset($_SERVER['HTTPS']);
Zároveň je dobré si uvědomit, že na některých hostinzích lze detekci šifrovaného spojení velmi snadno ošálit.
Doplnění: Chrome 45 už hlavičku HTTPS: 1 neodesílá.
Komentáře
Tomáš2 #1
Nějak mi to nesedí, v $_SERVER jsou http hlavičky požadavku prefixované HTTP_, jak dojde k naplnění klíče HTTPS? Je tohle tedy problém pouze s Nette nebo už mám děravou paměť?
jakub #2
Díky za info.
Zrovna jsem řešil, proč mám nekonečný redirect na aukro.cz
David Grudl #3
#1 Tomáš2, hlavička s prefixem je tam taky,
$_SERVER['HTTP_HTTPS'] === '1'
Jde o problém serveru nebo PHP, nevím přesně. Problém Nette to není, jinak bych vydal opravu.
Petr #4
Dík, také jsem to před nějakou dobou řešil a nepřišel jsem na to, čím to je; záhada vyřešena
BTW Chrome 45 hlavičku stále posílá.
Patrik #5
Dokumentácia php tvrdí:
‚HTTPS‘
Set to a non-empty value if the script was queried through the HTTPS protocol.
https://www.php.net/…s.server.php
vyzerá to teda, že to nie je v súlade so špecifikáciou, resp. s draftom. Ako teda v php do budúcnosti spoľahlivo overovať HTTPS protokol?
Tento článek byl uzavřen. Už není možné k němu přidávat komentáře.