Počínaje verzí 4D 21 mohou nyní vývojáři 4D plně ovládat odpovědi HTTP pomocí jednoduchého konfiguračního souboru: HTTPRules.json. Ať už chcete zvýšit zabezpečení, optimalizovat výkon nebo spravovat přístup ke statickým zdrojům, tato funkce vám poskytne potřebnou flexibilitu, aniž byste museli napsat jediný řádek kódu.
Pojďme se ponořit do jejích možností a způsobů jejich použití.
Jak se pravidla používají
Chcete-li funkci aktivovat, umístěte soubor HTTPRules.json do složky Sources vašeho projektu.
Případně můžete pravidla definovat programově tak, že je definujete v atributu settings. rules a objekt nastavení předáte funkci Web server. start(). Tím se nahradí pravidla definovaná v jakémkoli existujícím souboru.
Obsahem souboru nebo atributu settings. rules je kolekce pravidel.
Každé pravidlo je objekt a je definováno vzorem regulárního výrazu (regexPattern), který odpovídá URI požadavku.
Akce pravidla jsou definovány jeho atributem:
- setHeaders: k úpravě hlaviček odpovědi HTTP.
- addHeaders: přidat hlavičky do odpovědi HTTP.
- removeHeaders: odebrat hlavičky z odpovědi HTTP.
- denyAccess: odepřít nebo povolit přístup ke zdroji.
- redirect: přesměrovat požadavek HTTP.
- status: definovat vlastní stav odpovědi HTTP.
Pokud je server HTTP spuštěn s pravidly, lze zohledňovaná pravidla získat v rámci atributu Web server.rules.
Všimněte si, že pravidla jsou vyhodnocována postupně a na jeden požadavek se může vztahovat více pravidel.
POPIS AKCÍ
Nastavit vlastní hlavičky
Můžete aktualizovat existující hlavičky odpovědi HTTP a vytvořit je, pokud neexistují.
Tato akce je definována atributem setHeaders. Je to objekt obsahující dvojice klíč-hodnota hlaviček, které se mají nastavit v odpovědi HTTP.
Příklad:
{
"regexPattern": "/(.*)",
"setHeaders": {
"X-Frame-Options": "SAMEORIGIN",
"Content-Security-Policy": "default-src 'self'"
}
}
S tímto pravidlem budou všechny odpovědi HTTP obsahovat hlavičky X-Frame-Options a Content-Security-Policys jejich definovanými hodnotami, navíc k hodnotám definovaným serverem 4D HTTP.
Přidání vlastních hlaviček
Do odpovědi HTTP můžete přidat vlastní hlavičky. Je to užitečné zejména pro hlavičky, které mohou mít několik výskytů, jako například soubory cookie.
Tato akce je definována atributem addHeaders. Je to objekt obsahující dvojice klíč-hodnota hlavičky, které se mají přidat do odpovědi HTTP.
Příklad:
{
"regexPattern": "/(.*)",
"addHeaders": {
"Set-Cookie": "myCookie=123456; Max-Age=14400"
}
}
S tímto pravidlem budou všechny odpovědi HTTP obsahovat další hlavičku Set-Cookie s její definovanou hodnotou, navíc k těm, které definuje server 4D HTTP nebo vaše vlastní.
Odstranění hlaviček
Z odpovědi můžete odstranit nežádoucí hlavičky, například Server, která odhaluje verzi 4D.
Tato akce je definována atributem removeHeaders. Jedná se o kolekci klíčů hlaviček, které se mají z odpovědi HTTP odstranit.
Příklad: V případě, že je v hlavičce hlavičky uveden název hlavičky, je možné ji zadat do seznamu hlaviček:
{
"regexPattern": "/(.*)",
"removeHeaders": :
}: ["Server", "X-Frame-Options"] }
Pomocí tohoto pravidla budou ze všech hlaviček odpovědi HTTP odstraněny hlavičky Server a X-Frame-Options.
⚠️ Některé hlavičky nelze aktualizovat, přidávat ani odstraňovat, např. Date a Content-Length.
Odepření/povolení přístupu ke zdrojům
Přístup k určitým URI můžete zablokovat tak, že ve výchozím nastavení vrátí stav 403 Forbidden.
Tato akce je definována atributem denyAccess. Jedná se o logickou hodnotu: true pro odepření přístupu a false pro jeho povolení.
Příklad: Příkladem je příkaz, který se týká přístupu k serveru:
{
"regexPattern": "/private/(.*)",
"denyAccess": true,
}
S tímto pravidlem nebudou doručeny všechny prostředky ze složky /private/ a podsložek.
Přístup do podsložek můžete také explicitně povolit:
Příklad:
{
"regexPattern": "/private/allowed/(.*)",
"denyAccess": false
}
Pomocí tohoto pravidla jsou přístupné všechny prostředky ze složky /private/allowed/ a podsložek, i když je definováno předchozí pravidlo zakazující přístup do nadřazené složky /private/.
Přesměrování požadavků
Požadavky můžete přesměrovat na jinou adresu URL. Můžete zadat stavový kód (ve výchozím nastavení 301 pro trvalé, 302 pro dočasné).
Tato akce je definována atributem redirect. Je to text obsahující základní url adresu přesměrování.
Příklad: V případě, že se jedná o přesměrování na jinou adresu, můžete použít následující příklad:
{
"regexPattern": "^/images/(.*)",
"redirect": "https://cdn.example.com/images/",
"status": 301
}
Pomocí tohoto pravidla budou všechny zdroje z podsložky images přesměrovány na definovanou CDN.
Všimněte si, že znak „^“ začínající regex vzor je v případě přesměrování důležitý, aby se zabránilo vrácení nesprávných URI.
Nastavení vlastních stavových kódů
Můžete přepsat výchozí stavový kód pro odpověď HTTP.
Tato akce je definována atributem status. Jedná se o číslo vrácené jako stavový kód odpovědi HTTP.
Příklad:
{
"regexPattern": "^/maintenance.html",
"status": 503
}
S tímto pravidlem bude při požadavku na stránku maintenance.html vrácený stavový kód 503.
⚠️ Ujistěte se, že vámi definovaný stav odpovídá odpovědi zaslané serverem HTTP!
Kombinace akcí a pravidel
V pravidle lze kombinovat několik akcí, pokud mají stejný regexPattern.
Příklad:
{
"regexPattern": "/docs/(.*).html",
"addedHeaders": {
"Cache-Control": "max-age=3600"
},
"removedHeaders": ["X-Powered-By"]
}
Toto pravidlo platí pro všechny soubory HTML umístěné v podsložce docs.
Pravidla lze také kombinovat v logickém pořadí a plně tak konfigurovat odpovědi serveru HTTP.
Příklad kompletní kolekce pravidel:
[
{
"comment": "Všechny požadavky: povolit metodu GET pro, odstranit hlavičku 'Server' a nastavit bezpečnostní hlavičky",
"regexPattern": "/(.*)",
"setHeaders": {
"Allow": "GET",
"X-Frame-Options": "SAMEORIGIN",
"Content-Security-Policy": "default-src 'self'"
},
"removeHeaders": [
"Server"
]
},
{
"comment": "REST requests: allow POST method",
"regexPattern": "/rest/(.*)",
"addHeaders": {
"Allow": "POST"
}
},
{
"comment": "Soubory HTML ve složce 'doc': nastavte kontrolu mezipaměti",
"regexPattern": "/docs/(.*).html",
"setHeaders": {
"Cache-Control": "Max-Age=3600"
},
"removeHeaders": [
"X-Powered-By"
]
},
{
comment": "Status 503 on 'maintenance' page",
"regexPattern":
"status": "^/maintenance.html": 503
},
{
"comment": "Přesměrovat soubory CSS a JS",
"regexPattern": "^(.*\\\\.(css|js))",
"redirect": "https://cdn.example.com/"
},
{
"comment": "Přesměrování obrázků s trvalým stavovým kódem",
"regexPattern": "^(.*\\\\.(jpg|jpeg|png|gif))",
"redirect": "https://cdn.example.com/images/",
"status": 301
},
{
"comment": "Odepřít přístup všem zdrojům umístěným ve složce 'private'",
"regexPattern": "/private/(.*)",
"denyAccess": true
},
{
"comment": "Povolit přístup ke všem zdrojům umístěným ve složce 'private/allowed'",
"regexPattern": "/private/allowed/(.*)",
"denyAccess": false
}
]
Shrnutí
Díky souboru HTTPRules.json se 4D stává výkonnějším a flexibilnějším serverem HTTP. Nyní můžete:
- přidávat, upravovat nebo odebírat hlavičky
- Blokovat nebo povolovat přístupy
- Přesměrovat požadavky
- Nastavit vlastní stavové kódy
Není třeba složitá logika filtrování pomocí kódu, stačí provést konfiguraci v souboru HTTPRules.json a můžete začít!
A pokud vaše aplikace potřebují mít vlastní pravidla (např. bezpečnostní pravidla) v závislosti na nasazených prostředích nebo zákaznících, je to velmi snadné pomocí souboru Web server příkazem!
Jste připraveni zjednodušit si nasazení webu? Začněte používat pravidla ještě dnes.
