---
title: "Presmerovania — Safe Fetch for Laravel | Roundly"
description: "Presmerovania sú predvolene vypnuté; po zapnutí sa každý krok overí a pripne, s limitom krokov, bez prechodu na http a s údajmi pri origine."
url: https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel/presmerovania
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Safe Fetch for Laravel](https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel.md)

# Presmerovania

Predvolene vypnuté: presmerovanie sa vráti volajúcemu bez sledovania. Zapnete ich pre jedno volanie alebo v konfigurácii (redirects.enabled):

```php
use RoundlyConsulting\SafeFetch\DataTransferObjects\RedirectPolicy;

Http::safe(SafeFetch::policy()->followRedirects())->post($url, $payload);            // 307/308, ≤ 3 hops
Http::safe(SafeFetch::policy()->redirects(RedirectPolicy::methodPreserving(5)))->post($url, $payload);
Http::safe(SafeFetch::policy()->redirects(RedirectPolicy::methodPreserving(3, forwardHeaders: ['webhook-signature'])))
    ->post($url, $payload);
```

## RedirectPolicy

Nemenné — každá with-metóda vráti kópiu so zmeneným jedným nastavením a ostatné ponechá:

| Pole | Predvolené | Význam |
| --- | --- | --- |
| `enabled` | `false` | Či sa presmerovania vôbec sledujú. |
| `max` | `3` | Najviac sledovaných krokov, 0–10 → too\_many\_redirects. |
| `statuses` | `null` | null: 307 a 308; inak neprázdna podmnožina 301, 302, 303, 307, 308. |
| `allowDowngrade` | `false` | https → http (pravidlá musia povoliť aj http) → inak redirect\_downgrade. |
| `forwardHeaders` | `[]` | Názvy hlavičiek, prevedené na malé písmená a overené, ktoré idú aj na iný origin. |
| `statusesGiven` | — | Či boli stavy zadané alebo predvolené — fetch() a download() rozšíria predvolenú množinu na všetkých päť. |

| Metóda | Čo robí |
| --- | --- |
| `RedirectPolicy::none()` | Presmerovania sa vrátia volajúcemu, nikdy sa nesledujú. |
| `RedirectPolicy::methodPreserving(int $max = 3, array $forwardHeaders = [])` | Sleduje 307 a 308 (metóda a telo sa zachovajú), najviac $max krokov, a pomenované hlavičky pošle aj na iný origin. |
| `enabled(bool $enabled = true, ?int $max = null)` | Tie isté pravidlá, sledované alebo nie. |
| `withStatuses(array $statuses)` | Sledovať presne tieto stavy. |
| `forwardHeaders(array $headers)` | Nahradí zoznam preposielaných hlavičiek. Prihlasovacie údaje nejdú nikdy: uveďte len hlavičky, ktoré je bezpečné zopakovať. |
| `allowingDowngrade(bool $allow = true)` | Sledovať https → http alebo nie. |
| `max(int $max)` | Najviac $max krokov, 0–10. |
| `follows(int $status)` | Či sa odpoveď so stavom $status a hlavičkou Location sleduje. |

```php
$redirects = RedirectPolicy::methodPreserving(3)
    ->withStatuses([301, 302, 303, 307, 308])   // follow all five
    ->forwardHeaders(['webhook-signature'])     // replaces the list
    ->max(5);                                   // 0–10

RedirectPolicy::none();                          // returned unfollowed — the default
$redirects->follows(302);                        // true
```

## Keď sú presmerovania zapnuté

- Ktoré stavy: predvolene 307 a 308 (metóda a telo sa zachovajú). Pravidlá môžu určiť ľubovoľnú podmnožinu 301, 302, 303, 307 a 308; fetch() a download() (len GET) sledujú všetkých päť, ak pravidlá žiadne neurčia.
- 301 a 302 po POST a 303 po čomkoľvek okrem HEAD prepnú na GET a zahodia telo aj jeho hlavičky Content-\*. Každé iné sledované presmerovanie zachová metódu; ak telo posiela znovu, najprv ho pretočí na začiatok, a telo, ktoré sa pretočiť nedá, nechá presmerovanie vrátené bez sledovania.
- Každý krok sa overí a pripne znovu, presne ako prvý; odmietnutie reťaz zastaví.
- Najviac max krokov (0–10, predvolene 3) → too\_many\_redirects.
- https → http len pri zapnutom allowDowngrade (a ak pravidlá povoľujú http); inak redirect\_downgrade.
- Jeden časový rozpočet pokrýva všetky kroky.
- Location sa rieši podľa RFC 3986 §5.2 voči prestavanej URL (SafeFetch::urls()->resolveRedirect()); relatívna hodnota so spätnou lomkou alebo riadiacim znakom sa odmietne (invalid\_url).
- Sledované presmerovanie sa posudzuje len podľa stavu a Location — prenos skončí pred jeho telom.
- Hlavičky len na prvý origin. Krok na iný origin (schéma, hostiteľ alebo port) nesie len Accept, Accept-Encoding, Accept-Language, Content-Type, Content-Length, Content-Encoding, User-Agent a forwardHeaders z pravidiel. Voľba auth, HTTPAUTH / USERPWD z curl (digest, NTLM) a digest stav Guzzle sa zahodia tiež (CVE-2022-31090) a zostanú zahodené, aj keď sa neskorší krok vráti na prvý origin.
- Cookies pri každom kroku: každý krok pošle cookies z úložiska pre vlastnú URL a každá odpoveď uloží svoje Set-Cookie k požiadavke, ktorá ju dostala — stránka, na ktorú bola požiadavka presmerovaná, nemôže nastaviť cookies pre tú prvú. withOptions(\['cookies' => false\]) cookies vypne.
- Záznamník Laravelu zaznamená každý krok, takže Http::assertSentCount() počíta kroky.

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/safe-fetch-for-laravel.md)
