Upgrade
*******
Upgrade na verzi 3.4.1
======================
- za proxy nyní konfigurace ve výchozím stavu důvěřuje jen hlavičkám `X-Forwarded-*`. Pokud vaše proxy posílá hlavičku `Forwarded`, nastavte volbu [proxyHeaders |configuration#HTTP proxy] na `forwarded` nebo `both`.
- `Request::getRemoteAddress()` vrací `null`, pokud adresa klienta předaná proxy není platná IP adresa
Upgrade na verzi 3.4
====================
Minimální požadovaná verze PHP je 8.3.
- metoda `Request::isSameSite()` je zastaralá ve prospěch `isFrom()`, která původ požadavku zjišťuje z hlaviček `Sec-Fetch-*`. Automatická ochrana formulářů a signálů se tím zpřesní a mění se jedno chování: přímá navigace (záložka, ručně zadaná adresa, odkaz z e-mailu) se už za same-site nepovažuje. Pokud nějaký signál spoléhá na akční odkazy v e-mailech, označte jej `#[Requires(sameOrigin: false)]`.
- cookie `_nss` se nyní posílá pouze prohlížečům, které neposílají hlavičku `Sec-Fetch-Site`
- `setCookie()` posílá atribut `Max-Age` a pro `SameSite=None` a partitioned cookie vynutí příznak `Secure`
- enum `SameSite` nahrazuje konstanty `IResponse::SameSiteLax` apod., které jsou zastaralé
- expirace se všude vykládá shodně: číslo je relativní počet sekund, text je interval nebo datum. Předávání absolutního UNIX timestampu je zastaralé a session cookie představuje hodnota `null` místo `0`.
- zastaralá metoda `Request::getRemoteHost()` vrací `null`
- dávno zastaralá třída `Nette\Http\UserStorage` byla odstraněna
Celý příběh přechodu na hlavičky `Sec-Fetch-*` vypráví článek [Čtvrt století s CSRF |https://blog.nette.org/cs/csrf-konecne-resi-prohlizec].
Upgrade na verzi 3.2
====================
- přihlašovací údaje z HTTP Basic Authentication už nejsou součástí objektu `Url`, takže `$url->getUser()` a `$url->getPassword()` vracejí prázdný řetězec. Přečtete je novou metodou `$request->getBasicCredentials()`.
Důvody této změny vysvětluje článek [Nette Http 3.2: změna přístupu ke credentials |https://blog.nette.org/cs/nette-http-3-2-zmena-pristupu-ke-credentials].
Upgrade na verzi 3.1
====================
- cookie jsou odesílány s příznakem `sameSite: Lax`
- `cookieSecure` je nyní ve výchozím nastavení 'auto'
- volba `session.cookieSecure` je zastaralá, místo ní se používá `http.cookieSecure`
- cookie `nette-samesite` přejmenována na `_nss`
- `Nette\Http\Request::getFile()` přijímá pole klíčů a vrací `FileUpload|null`
- `Nette\Http\Session::getCookieParameters()` je zastaralá
- `Nette\Http\FileUpload::getName()` přejmenována na `getUntrustedName()`
- `Nette\Http\Url`: `getBasePath()`, `getBaseUrl()` a `getRelativeUrl()` jsou zastaralé (tyto metody jsou součástí `UrlScript`)
- `Nette\Http\Response::$cookieHttpOnly` je zastaralé
- `Nette\Http\FileUpload::getImageSize()` vrací dvojici `[width, height]`
- při `autoStart: smart` (výchozí hodnota) se session už nestartuje hned po startu aplikace jen proto, že prohlížeč poslal session cookie; nastartuje se až při prvním čtení nebo zápisu. Přibyly hodnoty `always` a `never`.
- pokud prohlížeč pošle session ID, kterému neodpovídá žádná session, Nette cookie smaže místo toho, aby zakládalo novou session
- pro přístup k sekcím session preferujte metody `set()`, `get()` a `remove()`; na rozdíl od přístupu k proměnným správně rozlišují čtení od zápisu a zbytečně nestartují session
- výchozí hodnoty `cookiePath` a `cookieDomain` lze nastavit v konfiguraci
Chování session podrobně popisuje článek [Nette Http 3.1: mnohem chytřejší sessions |https://blog.nette.org/cs/nette-http-3-1-mnohem-chytrejsi-sessions].
Upgrade na verzi 3.0
====================
- objekt `Nette\Http\UrlScript` (který vrací třeba `Nette\Http\Request::getUrl()`) je nyní immutable
- v zápisu `new Nette\Http\Url('abcd')` představuje `abcd` cestu, nikoliv doménu; od verze 3.0 tedy `(new Nette\Http\Url('abcd'))->setScheme('http')` korektně vygeneruje `http:abcd` místo dřívějšího `http://abcd`
{{maintitle: Upgrade Nette HTTP: změny v jednotlivých verzích}}
{{description: Co se změnilo v Nette HTTP 3.4.1, 3.4, 3.2, 3.1 a 3.0 a jak upravit kód, včetně toho, kterým hlavičkám z proxy se důvěřuje.}}
Upgrade
Upgrade na verzi 3.4.1
- za proxy nyní konfigurace ve výchozím stavu důvěřuje jen hlavičkám
X-Forwarded-*. Pokud vaše proxy
posílá hlavičku Forwarded, nastavte volbu proxyHeaders na forwarded nebo
both.
Request::getRemoteAddress() vrací null, pokud adresa klienta předaná proxy není platná
IP adresa
Upgrade na verzi 3.4
Minimální požadovaná verze PHP je 8.3.
- metoda
Request::isSameSite() je zastaralá ve prospěch isFrom(), která původ požadavku
zjišťuje z hlaviček Sec-Fetch-*. Automatická ochrana formulářů a signálů se tím zpřesní a mění se
jedno chování: přímá navigace (záložka, ručně zadaná adresa, odkaz z e-mailu) se už za same-site nepovažuje. Pokud
nějaký signál spoléhá na akční odkazy v e-mailech, označte jej #[Requires(sameOrigin: false)].
- cookie
_nss se nyní posílá pouze prohlížečům, které neposílají
hlavičku Sec-Fetch-Site
setCookie() posílá atribut Max-Age a pro SameSite=None a partitioned cookie vynutí
příznak Secure
- enum
SameSite nahrazuje konstanty IResponse::SameSiteLax apod., které jsou zastaralé
- expirace se všude vykládá shodně: číslo je relativní počet sekund, text je interval nebo datum. Předávání
absolutního UNIX timestampu je zastaralé a session cookie představuje hodnota
null místo 0.
- zastaralá metoda
Request::getRemoteHost() vrací null
- dávno zastaralá třída
Nette\Http\UserStorage byla odstraněna
Celý příběh přechodu na hlavičky Sec-Fetch-* vypráví článek Čtvrt století s CSRF.
Upgrade na verzi 3.2
- přihlašovací údaje z HTTP Basic Authentication už nejsou součástí objektu
Url, takže
$url->getUser() a $url->getPassword() vracejí prázdný řetězec. Přečtete je novou metodou
$request->getBasicCredentials().
Důvody této změny vysvětluje článek Nette Http 3.2: změna přístupu ke
credentials.
Upgrade na verzi 3.1
- cookie jsou odesílány s příznakem
sameSite: Lax
cookieSecure je nyní ve výchozím nastavení ‚auto‘
- volba
session.cookieSecure je zastaralá, místo ní se používá http.cookieSecure
- cookie
nette-samesite přejmenována na _nss
Nette\Http\Request::getFile() přijímá pole klíčů a vrací FileUpload|null
Nette\Http\Session::getCookieParameters() je zastaralá
Nette\Http\FileUpload::getName() přejmenována na getUntrustedName()
Nette\Http\Url: getBasePath(), getBaseUrl() a getRelativeUrl() jsou
zastaralé (tyto metody jsou součástí UrlScript)
Nette\Http\Response::$cookieHttpOnly je zastaralé
Nette\Http\FileUpload::getImageSize() vrací dvojici [width, height]
- při
autoStart: smart (výchozí hodnota) se session už nestartuje hned po startu aplikace jen proto, že
prohlížeč poslal session cookie; nastartuje se až při prvním čtení nebo zápisu. Přibyly hodnoty always a
never.
- pokud prohlížeč pošle session ID, kterému neodpovídá žádná session, Nette cookie smaže místo toho, aby zakládalo
novou session
- pro přístup k sekcím session preferujte metody
set(), get() a remove(); na rozdíl
od přístupu k proměnným správně rozlišují čtení od zápisu a zbytečně nestartují session
- výchozí hodnoty
cookiePath a cookieDomain lze nastavit v konfiguraci
Chování session podrobně popisuje článek Nette Http 3.1: mnohem chytřejší sessions.
Upgrade na verzi 3.0
- objekt
Nette\Http\UrlScript (který vrací třeba Nette\Http\Request::getUrl()) je nyní
immutable
- v zápisu
new Nette\Http\Url('abcd') představuje abcd cestu, nikoliv doménu; od verze 3.0 tedy
(new Nette\Http\Url('abcd'))->setScheme('http') korektně vygeneruje http:abcd místo
dřívějšího http://abcd