Komunikat „Potwierdź ponowne przesłanie formularza” zazwyczaj nie jest awarią przeglądarki. Pojawia się, gdy próbujesz przeładować stronę, do której dotarłeś, przesyłając dane za pomocą żądania HTTP POST. Powtórzenie tego żądania również może powtórzyć działanie, więc przeglądarka pyta o nie przed ponownym wysłaniem formularza. Ma to znaczenie w przypadku formularzy kontaktowych, komentarzy, zakupów, płatności, zmian na koncie i wszelkich innych działań, które nie powinny się przypadkowo uruchamiać dwukrotnie.

Jeśli jesteś gościem, najbezpieczniejszym rozwiązaniem jest zazwyczaj pominięcie odświeżania strony wyników, sprawdzenie, czy przesłanie zostało już pomyślnie wykonane, i powrót do pierwotnego formularza za pośrednictwem witryny, zamiast wymuszania przeładowania. Jeśli jesteś właścicielem witryny, trwałym rozwiązaniem jest przekierowanie pomyślnych żądań POST na zwykłą stronę GET.
Co powoduje konieczność ponownego przesłania formularza potwierdzenia?
Tradycyjny formularz HTML może wysyłać dane za pomocą żądania GET lub POST. Żądanie POST umieszcza przesłane dane w treści żądania i jest powszechnie używane, gdy żądanie tworzy lub zmienia coś. Jeśli serwer odpowiada bezpośrednio na żądanie POST wyświetlaną stroną, odświeżenie strony oznacza powtórzenie tego samego żądania POST. Przeglądarka ostrzega zatem przed ponownym wysłaniem żądania.
To nie jest zwykły błąd połączenia. Ostrzeżenie może pojawić się nawet wtedy, gdy pierwsze zgłoszenie przebiegło bez zarzutu. Przed ponownym wysłaniem zamówienia, płatności, rezerwacji, komentarza lub prośby o pomoc techniczną sprawdź, czy jest strona z potwierdzeniem, potwierdzenie e-mailem, historia konta lub inny znak, że pierwsze zgłoszenie zostało już zrealizowane.
Jak to naprawić jako odwiedzający witrynę
1. Anuluj doładowanie i otwórz formularz ponownie
Jeśli ostrzeżenie pojawiło się natychmiast po kliknięciu przycisku Odśwież, wybierz opcję Anuluj zamiast automatycznego kontynuowania. Otwórz witrynę z menu, strony głównej, zakładki lub nowej karty i wróć do formularza. Pozwoli to uniknąć celowego ponownego wywołania poprzedniego żądania POST.
W przypadku długiej wiadomości lub aplikacji skopiuj cały tekst, który jeszcze masz, zanim opuścisz aplikację. Strona może nie przywrócić wpisanego tekstu po zmianie sesji.

2. Sprawdź, czy pierwotne przesłanie zostało już pomyślnie zrealizowane
Zrób to przed ponownym wprowadzeniem tych samych informacji. Drugie POST może spowodować duplikację komentarzy, biletów, rezerwacji lub opłat, jeśli strona nie chroni przed duplikatami. Jeśli nie możesz stwierdzić, czy transakcja o dużej wartości powiodła się, skorzystaj z historii zamówień na stronie lub skontaktuj się z jej zespołem wsparcia, zamiast wielokrotnie klikać przycisk „Prześlij”.
3. Wyczyść dane witryny tylko wtedy, gdy formularz jest rzeczywiście zablokowany
Zepsute lub nieaktualne pliki cookie i pliki w pamięci podręcznej mogą powodować zapętlanie się niektórych witryn, utratę sesji lub ładowanie starej strony. Wyczyszczenie danych może pomóc w takich przypadkach, ale nie jest wymagane tylko dlatego, że odświeżono wynik POST.
W Chrome na komputerze otwórz menu z trzema kropkami i wybierz Usuń dane przeglądania . Google dokumentuje aktualne opcje, w tym pliki cookie/dane witryn oraz obrazy/pliki z pamięci podręcznej, w swoim przewodniku po danych przeglądania w Chrome . Czyszczenie plików cookie może spowodować wylogowanie z witryn, dlatego należy wybrać najwęższy zakres, który rozwiązuje problem.

W przeglądarce Firefox możesz wyczyścić dane bieżącej witryny za pomocą ikony po lewej stronie paska adresu, a następnie wybrać opcję Wyczyść pliki cookie i dane witryn . Instrukcje dotyczące danych witryn w przeglądarce Firefox firmy Mozilla wyjaśniają również, jak usunąć dane z konkretnej witryny lub wszystkich witryn.
4. Tymczasowo wyłącz rozszerzenia, jeśli problem wystąpi nieoczekiwanie
Jeśli formularz wielokrotnie przestaje działać bez odświeżania, przetestuj rozszerzenia, które modyfikują strony lub ruch sieciowy, takie jak blokady treści, narzędzia ochrony prywatności, menedżery skryptów, rozszerzenia VPN/proxy lub pomocnicy formularzy. W Chrome przejdź do Więcej > Rozszerzenia > Zarządzaj rozszerzeniami i tymczasowo wyłącz podejrzane rozszerzenia; przewodnik Google dotyczący zarządzania rozszerzeniami opisuje aktualne ustawienia.

W Firefoksie otwórz Menu > Dodatki i motywy > Rozszerzenia i wyłączaj rozszerzenia pojedynczo. Mozilla udostępnia również oficjalne instrukcje wyłączania dodatków Firefoksa . Włącz ponownie wszystkie dodatki, które nie są związane z problemem.
Jeśli ostrzeżenie pojawia się tylko na jednej stronie internetowej
Jeśli inne witryny działają prawidłowo, a to ostrzeżenie stale powraca po przesłaniu jednego konkretnego formularza, głównym problemem jest prawdopodobnie przepływ formularza w witrynie. Zmiana przeglądarki może w niektórych przypadkach ukryć symptom, ale nie naprawi to historii POST. Unikaj wielokrotnego przesyłania danych i w razie potrzeby zgłoś problem właścicielowi witryny.
Właściciele witryn: użyjcie POST/Redirect/GET
Standardowym sposobem zapobiegania wyświetlaniu strony POST po pomyślnym przesłaniu formularza jest wzorzec POST/Redirect/GET . Przetwarza on żądanie POST na serwerze, a następnie zwraca przekierowanie do osobnego adresu URL potwierdzenia. Odpowiedź 303 „See Other” wyraźnie nakazuje przeglądarce pobranie przekierowanego zasobu za pomocą GET. MDN zauważa, że ten wzorzec pozwala klientowi wyświetlić potwierdzenie po wysłaniu żądania POST bez konieczności odświeżania i powtarzania pierwotnej operacji.
POST /contact
HTTP/1.1 303 See Other
Location: /contact/thanks
GET /contact/thanks
Zapoznaj się z dokumentem MDN 303 „Zobacz inne” oraz jego przewodnikiem po przekierowaniach HTTP, aby dowiedzieć się więcej o zachowaniu zmiany metody. Nie używaj przekierowania 307 w tym celu, jeśli chcesz, aby żądanie następcze stało się żądaniem GET, ponieważ przekierowanie 307 zachowuje oryginalną metodę i treść.
Nie należy przełączać każdego formularza POST na GET tylko po to, aby wyłączyć ostrzeżenie. GET służy do pobierania danych i umieszcza wartości formularza w adresie URL, gdy jest używany przez formularz HTML; nie nadaje się do haseł ani działań zmieniających stan serwera. Dokumentacja MDN dotycząca przesyłania formularzy wyjaśnia praktyczne różnice między GET i POST.
JavaScript fetch()może przesłać formularz bez nawigacji na całej stronie, ale serwer nadal powinien chronić ważne operacje przed przypadkowym duplikowaniem żądań. W przypadku konwencjonalnych formularzy wielostronicowych, POST/Redirect/GET pozostaje najpewniejszym rozwiązaniem problemu z ostrzeżeniem o odświeżaniu.