====== environ (WSGI) ====== V kontextu standardu [[wsgi|WSGI]] je **environ** speciální slovník (dictionary) v jazyce Python, který obsahuje všechny informace o aktuálním HTTP požadavku a proměnné prostředí serveru. Tento slovník předává webový server (např. Gunicorn nebo [[uwsgi|uWSGI]]) aplikaci při každém požadavku uživatele. ===== Klíčové skupiny informací ===== Slovník `environ` obsahuje tři hlavní typy dat: ==== 1. CGI proměnné ==== Standardní proměnné definované specifikací CGI, které popisují požadavek: * **REQUEST_METHOD:** Metoda požadavku (např. `GET`, `POST`). * **PATH_INFO:** Cesta za doménou (např. `/produkty/detail/5`). * **QUERY_STRING:** Parametry v URL za otazníkem. * **SERVER_NAME** a **SERVER_PORT:** Informace o serveru. ==== 2. WSGI specifické proměnné ==== Proměnné, které do slovníku přidává samo rozhraní WSGI: * **wsgi.input:** Proud (stream), ze kterého lze číst tělo požadavku (např. data z formuláře). * **wsgi.url_scheme:** Protokol (`http` nebo `https`). * **wsgi.errors:** Proud pro zápis chybových hlášení. ==== 3. HTTP hlavičky ==== Všechny hlavičky, které poslal prohlížeč, jsou v `environ` dostupné s předponou `HTTP_`: * `HTTP_USER_AGENT` (prohlížeč uživatele) * `HTTP_COOKIE` (uložené cookies) * `HTTP_ACCEPT_LANGUAGE` (preferovaný jazyk) ===== Příklad obsahu (v kódu) ===== Pokud byste si nechali vypsat obsah `environ` při přístupu na web, vypadal by přibližně takto: { 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/index.html', 'SERVER_NAME': 'localhost', 'SERVER_PORT': '8000', 'wsgi.input': <_io.BufferedReader name=11>, 'HTTP_USER_AGENT': 'Mozilla/5.0...', 'HTTP_HOST': 'mojedomena.cz', ... } ===== Význam pro vývojáře ===== Ačkoliv moderní frameworky jako [[django|Django]] nebo Flask schovávají `environ` za elegantní objekty (jako je `request`), znalost tohoto slovníku je zásadní pro: * Psaní vlastního [[https://it-slovnik.cz/pojem/middleware|middleware]]. * Ladění problémů s proxy servery (např. Nginx). * Pochopení toho, jak se přenášejí informace o IP adrese uživatele. --- //Související pojmy: [[wsgi|WSGI]], [[https://it-slovnik.cz/pojem/python|Python]], [[https://it-slovnik.cz/pojem/http|HTTP]]//