Na navigaci | Klávesové zkratky

Translate to English… Ins Deutsche übersetzen…

Chrome a nekonečné přesměrování

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

  1. 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ěť?

    před rokem | odpovědět | reagoval [3] David Grudl
  2. jakub #2

    avatar

    Díky za info.

    Zrovna jsem řešil, proč mám nekonečný redirect na aukro.cz

    před rokem | odpovědět
  3. David Grudl http://davidgrudl.com #3

    avatar

    #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.

    před rokem | odpovědět
  4. Petr #4

    avatar

    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á.

    před rokem | odpovědět
  5. Patrik #5

    avatar

    Dokumentácia php tvrdí:
    ‚HTTPS‘
    Set to a non-empty value if the script was queried through the HTTPS protocol.

    http://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?

    před rokem | odpovědět

Zanechat komentář

Text komentáře
Kontakt

(kvůli gravataru)



*kurzíva* **tučné** "odkaz":http://example.com /--php phpkod(); \--