Nette Documentation Preview

syntax
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

Upgrade na verzi 3.4

Minimální požadovaná verze PHP je 8.3.

Celý příběh přechodu na hlavičky Sec-Fetch-* vypráví článek Čtvrt století s CSRF.

Upgrade na verzi 3.2

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

Chování session podrobně popisuje článek Nette Http 3.1: mnohem chytřejší sessions.

Upgrade na verzi 3.0