HTTP 421 Misdirected request - vysvětlení, příčina

Zdravím, všiml jsem si podivného chování při první návštěvě serveru (subdomena.serverpriklad.cz). (Předtím jsem si prohlížel serverpriklad.cz)
Vrátilo mi to kód 421. Při druhé návštěvě již to fungovalo. Opakovaně se to stane, když provedu odpojení od internetu (přeruším na určitou dobu připojení v počítači, ze kterého se připojuji) připojím se na první server a pak na druhý.

Čím je to způsobené a proč se to projevuje jen u některý skupin serverů?  Je to bug prohlížeče? Jaké jsou podmínky výskytu? Chápu to správně, že prohlížeč se chce připojit stejným tcp spojením na stejnou ip adresu (ale jiný virtual host stejného http serveru nebo jiného ?)? a server mu v tom brání (oprávněně)? Je to specifické pro HTTPS? (není možné mít jedno TCP spojení pro různé subdomény na stejném serveru)?

Jako Princip SNI chápu, vím že účelem je dát sdělit pole Host ("subdoménu" laicky) stroji na dané IP adrese, jelikož to nemůže vyčíst z hlavičky host, která je zašifrované (a každý virtualhost má i jiný certifikát), přesný mechanismus neznám (napadá mě, že to jde v hanshake TLS)

Kód: [Vybrat]
Misdirected Request

The client needs a new connection for this request as the requested host name \
does not match the Server Name Indication (SNI) in use for this connection.


A co znamená HTTP hlavička authority (v curl zapsané -H "authority: subdomena.serppklc.cz) ? a Jak se liší /souvisí s Host: ?


Re:HTTP 421 Misdirected request - vysvětlení, příčina
« Odpověď #1 kdy: 06. 09. 2019, 10:42:21 »
Pokud se nepletu, tak je to tím, že obě (sub)domény běží na stejné IP adrese.
Prohlížeč už má navázaný CONNECT na cílovou IP adresu, takže v prvním kroku necítí potřebu navázat nový CONNECT.
Teprve v druhém kroku ověří, že sice CONNECT vede na stejnou IP adresu, ale Host (v SNI) neodpovídá. Proto potřebuje nové spojení, nový CONNECT.

Opravte mě někdo, pokud to chápu špatně.

Re:HTTP 421 Misdirected request - vysvětlení, příčina
« Odpověď #2 kdy: 06. 09. 2019, 12:46:53 »
Zazil jsem neco podobneho, kdyz se na nase servery pripojoval jeden klient (z pohledu pripojeni). Chyba byla v jejich firewallu, ktery nejak spatne chapal, ze domenaA a domenaB jsou sice na stejne IP a tak sdilel spojeni pro obe domeny. Ze to pak nefungovalo na urovni SNI - apache2 neumel "prepojit" na druhou domenu, pak uz nikoho neprekvapilo.

Re:HTTP 421 Misdirected request - vysvětlení, příčina
« Odpověď #3 kdy: 06. 09. 2019, 14:05:53 »
Je to chyba klienta – pošle v hlavičce Host jiné jméno, než to platné pro aktuální spojení podle SNI. Je to tedy specifické pro HTTPS, protože tam se posílá hostname v SNI rozšíření TLS a pak ještě jednou v hlavičce Host. Zajímalo by mne, který klient to dělá – tipoval bych si, jestli to nebude nějaký „chytrý“ proxy server, nejspíš nějaký, který se bude pyšnit tím, jak zabezpečuje komunikaci…

Nemusí to být ani „stejné“ spojení – pokud budete testovat něco třeba pomocí curl, můžete v parametru pro SNI použít nějaké hostname, a pak do požadavku napíšete hlavičku Host, kde uvedete jiné hostname. Pokud budete zkoušet kontaktovat víc serverů, může se vám stát, že prostě zapomenete to jméno přepsat na obou místech. Nemusí tedy jít o následující požadavek, ale hned o ten první (je možné, že pak server pošle trochu jinou chybovou hlášku, ale princip – konflikt mezi SNI a hlavičkou Host – je stejný).

napadá mě, že to jde v hanshake TLS
Je to volitelná položka v úvodu TLS spojení, ještě v té nešifrované části.

A co znamená HTTP hlavička authority (v curl zapsané -H "authority: subdomena.serppklc.cz) ? a Jak se liší /souvisí s Host: ?
Hlavička :authority je nová v HTTP/2 a víceméně by měla nahradit hlavičku Host z HTTP/1.1. V požadavku by měla být buď jedna nebo druhá.