Das genannte Beispiel klappt vorzüglich. Nicht aber funktioniert es mit 127.0.0.1 www.cardgames.io/hearts/
Weil das kein Domain-Name ist.
Die hosts-Datei definierte eine lokale Liste zur DNS-Namensauflösung. Diese wird konsultiert bevor bei einem DNS-Server angefragt wird.
Wenn Du im Browser www.cardgames.io/hearts/ eingibst, dann macht der intern http://www.cardgames.io/hearts/ daraus (da HTTP angenommen wird so lange nicht explizit ein anders Protokoll angegeben wird. Diese URL wird dann in 3 Teile aufgesplittet zur Weiteren Verarbeitung:
- http:// - definiert das Protokoll
-
www.cardgames.io - der Hostname
- /hearts/
Danach wird der Hostname zu einer IP-Adresse aufgelöst (das ist ein mehrstufiger Prozess, die hosts-Datei und der lokale DNS-Cache sind dabei der erste Schritt, ansonsten wird der lokale DNS-Server im Netzwerk befragt (zu Hause der DSL-Router; der kann u.U. auch für diese Art von Sperre eingesetzt werden), und falls der die Anfrage nicht selbst beantworten kann fragt es beim DNS-Server des ISPs nach (und das ist noch nicht der letzte in der Kette). Wenn die IP-Adresse bekannt ist, dann erfolgt eine HTTP-GET-Anfrage auf Port 80 (HTTP-Standard-Port) an diese IP-Adresse. D.h. wird der folgende Text an Port 80 des Servers gesendet:
GET /hearts/ HTTP/1.1
Host: www.cardgames.io
Wobei der Host-Name nochmal mitgesendet wird um mehrere Domains durch einen Server bedienen zu können. Hoffe das trägt nun ein wenig zum Verständnis des Ganzen bei ;-)