Bezpłatne nagłówki informacji. Jak znaleźć i przezwyciężyć BOM to paskudny błąd w WordPressie. Kiedy to się dzieje?

Zrozumienie nagłówków HTTP i pól nagłówka HTTP

Nagłówki HTTP podać istotne informacje wymagane do realizacji transakcji HTTP wysłanej za pośrednictwem protokół http.

Ogólny format nagłówka HTTP zawiera rozdzielone dwukropkami pary nazwa - wartość w polu nagłówka. Każda z par nazwa-wartość kończy się znakiem powrotu karetki (CR) i sekwencją znaków nowego wiersza (LF). Puste pola na końcu każdego nagłówka oznaczają koniec nagłówka.

Typowy format nagłówka, po którym następują aplikacje, wygląda następująco:

Rodzaje nagłówków HTTP

Istnieją cztery typy nagłówków wiadomości HTTP. Oni są:

  • Nagłówek ogólny
  • Nagłówek żądania
  • nagłówek odpowiedzi
  • Nagłówek jednostki

Nagłówek ogólny

Ogólne pola nagłówka mają wspólne zastosowanie w komunikatach żądań i odpowiedzi. Pola nagłówka dotyczą tylko przesyłanej wiadomości i nie dotyczą przesyłanego podmiotu.

Struktura nagłówka ogólnego wygląda następująco:

Kontrola pamięci podręcznej pole określa dyrektywy, które muszą być przestrzegane przez każdy mechanizm buforowania w systemie żądań i odpowiedzi.

połączenie pole pozwala nadawcy określić opcje wymagane do połączenia. Nagłówek połączenia ma następujący format:

Data pole reprezentuje datę i czas podczas inicjacji wiadomości. Format daty określony w HTTP wygląda następująco:

pragma Pole pomaga uwzględnić implementację konkretnej dyrektywy mającej zastosowanie do każdego odbiorcy w systemie żądania i odpowiedzi.

Zwiastun filmu wartość pola określa, czy zestaw pól nagłówka w nagłówku wiadomości jest zakodowany za pomocą kodowania transferu porcji.

Kodowanie transferu pole wskazuje, czy do treści wiadomości zastosowano dowolny typ transformacji.

Aktualizować pole umożliwia klientom określenie dodatkowych obsługiwanych protokołów komunikacyjnych. Umożliwia również serwerowi przełączanie protokołów z dodatkowymi protokołami.

Przez pola to obowiązkowe pola używane przez serwery proxy i bramy, które wskazują protokoły pośrednie. Wskazuje również odbiorcę żądania między klientem użytkownika a serwerem oraz odpowiedź między serwerem a klientem.

Ostrzeżenie pole zawiera dodatkowe informacje o statusie wiadomości i przekształceniach wiadomości, które nie są odzwierciedlone w wiadomości.

Nagłówki ostrzegawcze są zwykle wysyłane wraz z odpowiedziami.

Pole nagłówka żądania umożliwia klientom dodatkowe przekazywanie informacji o żądaniu i informacji o kliencie do serwera.

Struktura nagłówka żądania wygląda następująco:

zaakceptować pole określa typy mediów, które są akceptowane do odpowiedzi.

„*” służy do grupowania typów mediów w zakresie

„*/*” wskazuje wszystkie typy mediów

„typ/*” wskazuje wszystkie podtypy typu

Zaakceptuj zestaw znaków pole wskazuje dopuszczalne zestawy znaków odpowiedzi. Dzięki temu klienci są w stanie zrozumieć zestawy znaków specjalnego przeznaczenia, aby zasygnalizować serwerowi, że dokument jest reprezentowany w tych zestawach znaków.

Zaakceptuj kodowanie pole jest podobne do Accept, ogranicza dopuszczalne kodowanie treści odpowiedzi.

Akceptuj-język pole jest podobne do Accept, ogranicza preferowany zestaw języków naturalnych.

Upoważnienie pole jest przeznaczone dla agentów użytkownika, którzy chcą uwierzytelnić się na serwerze.

Oczekiwać pole wskazuje zachowania serwerowe wymagane przez klienta.

Od pole zawiera adres e-mail użytkownika, który kontroluje żądającego klienta użytkownika.

Gospodarz pole określa hosta internetowego i żądany numer portu zasobu z identyfikatora URI użytkownika.

Jeśli mecz pole służy do tworzenia metod warunkowych.

Jeśli-zmodyfikowano-od pole służy do tworzenia metody warunkowej. Jeśli żądany wariant nie zostanie zmodyfikowany w określonym czasie, encja nie zostanie zwrócona z serwera.

Jeśli-brak-pasuje pole umożliwia wydajną aktualizację informacji o pamięci podręcznej przy minimalnym nakładzie transakcji.

Jeśli zakres pole pozwala klientom otrzymać część brakującego podmiotu lub w inny sposób, klienci mogą poprosić o przesłanie całej nowej encji.

Jeśli-niezmodyfikowany-od pole umożliwia serwerowi wykonanie żądanej operacji, jeśli nie została ona zmodyfikowana od czasu określonego w tym polu.

Maks. do przodu field zapewnia mechanizmy z metodami TRACE i OPTIONS, aby ograniczyć serwery proxy lub bramy do przekazywania żądań.

Autoryzacja pełnomocnika pole umożliwia klientowi identyfikację z bezpiecznym serwerem proxy.

Zakres pole określa encje HTTP w wiadomościach HTTP reprezentowane jako ciąg bajtów. Żądanie pobierania HTTP żąda co najmniej jednego podzakresu encji przy użyciu metod GET.

Polecający pole umożliwia klientom określenie adresu URI zasobu, z którego został znaleziony URI żądania.

TE pole wskazuje kodowanie transferu rozszerzenia, które może zaakceptować w odpowiedzi. Dodatkowo wskazuje, czy zaakceptuje pola przyczepy w kodowaniu transferu porcji.

Agent użytkownika pole zawiera informacje o żądającym kliencie użytkownika.

Nagłówek odpowiedzi HTTP

Pole nagłówka odpowiedzi umożliwia serwerowi przekazywanie dodatkowych informacji za pośrednictwem odpowiedzi innych niż prosta odpowiedź w wierszu statusu.

Struktura nagłówka odpowiedzi wygląda następująco:

Zaakceptuj zakresy pole umożliwia serwerom wskazywanie akceptacji żądań zakresu zasobów.

Wiek pole wskazuje nadawcę przybliżony czas od odpowiedzi serwera.

ETag pole zawiera aktualną wartość tagu encji dla żądania.

Lokalizacja pole przekierowuje odbiorców do lokalizacji innych niż Request-URI w celu pełnej identyfikacji nowego zasobu.

Uwierzytelnianie proxy pole jest obowiązkowe dla odpowiedzi uwierzytelniania proxy.

Spróbuj ponownie po pole jest używane jako odpowiedź, gdy usługa jest niedostępna, aby wskazać długość okresu, przez który usługa będzie niedostępna dla klienta.

serwer pole zawiera informacje o oprogramowaniu używanym przez serwer do obsługi zgłoszeń.

Różnią się pole wskazuje pole żądania, które określa, czy pamięć podręczna kwalifikuje się do użycia odpowiedzi na żądanie bez ponownej weryfikacji odpowiedzi.

Uwierzytelnianie WWW pola są używane, gdy komunikat odpowiedzi jest nieautoryzowany.

Pola nagłówka jednostki definiują metainformacje o ciele jednostki lub żądanym zasobie. Format nagłówka encji wygląda następująco:

dopuszczać lista pól zestaw metod obsługiwanych przez zasoby zidentyfikowane przez identyfikator żądania URI.

kodowanie treści pole jest używane jako modyfikator typu nośnika.

Treść-Język pole opisuje język naturalny dla klientów podmiotu.

długość treści pole wskazuje rozmiar jednostki reprezentowanej w liczbach dziesiętnych.

lokalizacja treści pole zapewnia lokalizację zasobu dla jednostki, gdy jest ona dostępna z lokalizacji innej niż żądany identyfikator URI.

Treść-MD5 pole zapewnia kontrolę integralności wiadomości (MIC) za pomocą skrótu MD5 w treści jednostki.

zakres treści pole określa, gdzie należy zastosować częściową treść pełnego ciała encji.

Typ zawartości pole wskazuje, czy typ nośnika treści encji jest wysyłany do odbiorcy, czy do wysyłania żądań używana jest metoda GET.

Wygasa pole zawiera datę/godzinę, po której odpowiedź staje się nieaktualna.

Ostatnio zmodyfikowany pole wskazuje datę i godzinę ostatniej modyfikacji wariantu.

Kolejność, w jakiej nazwa pola pojawia się w nagłówku po otrzymaniu, jest nieistotna. Konwencjonalnie nagłówki ogólne są umieszczane jako pierwsze, a następnie nagłówek żądania lub odpowiedzi z nagłówkiem jednostki na końcu.

Informacja o prawach autorskich: Proszę nie kopiować ani nie tłumaczyć tego artykułu bez uprzedniej pisemnej zgody strony

HTTP Debugger to analizator HTTP bez proxy dla programistów, który umożliwia przechwytywanie i analizowanie nagłówków HTTP, plików cookie, parametrów POST, treści HTTP i nagłówków CORS z dowolnej przeglądarki lub aplikacji komputerowej. Niesamowity interfejs użytkownika i bardzo łatwy w użyciu. Nie proxy, żadnych problemów z siecią!

Dzisiaj postanowiliśmy porozmawiać o tym, co oznacza przesłanie „Ostrzeżenie: nie można modyfikować informacji nagłówka — nagłówki już wysłane przez (wyjście rozpoczęte w /home/...", który pojawił się na stronie serwisu zamiast w jego głównej treści.
Jak się okazało, sieć napisała wystarczająco dużo na ten temat, ale nie ma uogólnionej instrukcji, co to wszystko znaczy i jak się go pozbyć.
Postanowiliśmy dodać kilka kropel do ogromnego morza informacji na ten temat, bo osobiście zmierzyliśmy się z tym problemem.

Jakiś czas temu przeprowadziliśmy przeniesienie kilku stron klienckich z jednego hostingu na drugi.
Wszystko poszło dobrze, strony były dostępne, ale przy próbie przejścia do administratora. panelu, po wpisaniu loginu i hasła zamiast panelu kontrolnego pojawiła się biała strona.
Sprawdzone na innych stronach - to samo.
Aby się dowiedzieć możliwe przyczyny, włączyliśmy wyświetlanie błędów.
Aby to zrobić, musisz edytować plik .htaccess znajdujący się w katalogu głównym witryny przez FTP, dodając do niego linię:

php_flag display_errors włączone

Następnie, po wejściu do panelu administracyjnego, pojawiło się kilka komunikatów typu „Ostrzeżenie: Nie można modyfikować informacji nagłówka - nagłówki już wysłane przez (wyjście rozpoczęte w /home/.../functions.php:1552) w /home/.../ public_html /wp-login.php w wierszu 362" itp.

W wyniku wyszukiwania znaleziono informację, że komunikat ten informuje, że informacji nagłówka nie można zmienić, ponieważ nagłówki (informacje o nich) zostały już wcześniej wysłane, a dalej w nawiasach wskazano, które wiersze w jakich plikach to było gotowy.


Tytuły (nagłówki) to informacja serwisowa serwera, na którym znajduje się witryna. Zanim przeglądarka wyświetli zawartość witryny, otrzymuje z serwera nagłówki, które wskazują różne dane: czy włączone jest buforowanie strony, jej kodowanie, typ zawartości strony i inne. W systemach zarządzania treścią witryny nagłówki są tworzone przez funkcje znajdujące się w różnych plikach systemowych.
Warunek obowiązkowy Nagłówki muszą być przesłane przed główną treścią (treścią) strony.


Jeżeli treść strony jest przekazywana przed nagłówkami, to powstaje sytuacja, o której ostrzega nas komunikat „Ostrzeżenie: Nie można modyfikować informacji nagłówka – nagłówki już wysłane przez…”

W jakich sytuacjach może to nastąpić? Jak już wspomniano, we współczesnym CMS nagłówki są wynikiem jednej lub kilku funkcji. Sama funkcja jest fragmentem kodu zawartym między inicjałem i ostateczna ?> Tagi.

Wszystko poza tymi tagami jest uważane za zawartość strony.
Jeśli więc na początku strony znajdują się funkcje, które powodują wysyłanie nagłówków, a otrzymamy komunikat „Ostrzeżenie: Nie można modyfikować informacji nagłówka…”, to okazuje się, że niektóre informacje związane z zawartością strony są wysyłane z serwera przed nagłówkami.

Czym są te informacje i jak je znaleźć. Najczęściej są to spacje i puste linie.

Spacja lub pusty ciąg są interpretowane jako znaki dla głównej treści strony, więc część głównej treści pojawia się przed nagłówkami i jest najpierw wysyłana do przeglądarki.

Musisz pobrać pliki wskazane w komunikatach „Ostrzeżenie: Nie można modyfikować informacji nagłówka...” w dniu lokalny komputer, otwórz go w edytorze kodu (ja używam NotePad++) i dokładnie sprawdź, czy nie ma pustych linii i spacji:

W tym samym czasie jest jeden ważna cecha, co może znacznie wydłużyć czas poszukiwania rozwiązania.
Plik nie może zawierać pustych linii i spacji, ale jeśli został zapisany w kodowaniu UTF-8, to zbędny znak na samym początku dokumentu może zostać wstawiony przez edytor, w którym plik został utworzony. Ten znak to identyfikator UTF-8 równy spacji o zerowej szerokości, który może w ogóle nie być wyświetlany w edytorze, ale na serwerze będzie postrzegany jako główna treść i wyświetlany przed nagłówkami.

Aby pozbyć się tego identyfikatora, musisz ponownie zapisać pobrane pliki w formacie UTF-8 bez BOM(UTF-8 bez BOM).

NotePad++ dobrze sobie z tym radzi.

Po tych czynnościach i zaktualizowaniu plików na serwerze komunikat powinien zniknąć, a witryna będzie działać normalnie.

To niesamowite, jak mały błąd może całkowicie spowodować awarię witryny WordPress. Mowa oczywiście o dobrze znanym ostrzeżeniu o błędach WordPressa. Ostrzeżenie: nie można modyfikować informacji nagłówka - nagłówki już wysłane przez pluggable.php. Jeśli jesteś jednym z tych, którzy zmierzyli się z tym błędem, to trafiłeś we właściwe miejsce. W tym omówimy przede wszystkim przyczynę pojawienia się tego błędu i przyjrzymy się rozwiązaniom, które ostatecznie rozwiążą problem.

Co będzie wymagane

Przed rozpoczęciem upewnij się, że masz następujące elementy:

  • Dostęp do panelu sterowania hostingu lub dostęp do FTP

Jak nie można modyfikować informacji nagłówka - pojawiają się nagłówki już wysłane przez błąd

Spójrzmy na przykład tego błędu, aby lepiej zrozumieć przyczyny. Błąd zwykle pojawia się w tej formie:

Ostrzeżenie: Nie można modyfikować informacji nagłówka - nagłówki już wysłane przez (wyjście rozpoczęte w /public_html/wp-content/plugins/my-plugin/my-function.php:#) w /public_html/wp-includes/pluggable.php w wierszu #

Jak widać, błąd wymienia dwa pliki. Pierwszy plik (w naszym przypadku: moja-funkcja.php mieści się w /public_html//wp-content/plugins/moja-wtyczka/) na czele podejrzanych. To jest nasz niestandardowy kod, który ma na celu zmianę podstawowej funkcjonalności dostarczanej przez WordPress. Funkcjonalność jądra znajduje się w pliku pluggable.php(Plik główny WordPress, niezmieniony dla każdego) Instalacje WordPress). Innymi słowy, problem tkwi w pierwszym pliku, co uniemożliwia prawidłowe wykonanie drugiego pliku.

Główną przyczyną błędu jest dodatkowy spacje w pierwszym pliku. Są to spacje na górze lub na dole pliku, niepotrzebne spacje w dowolnym miejscu pliku, a nawet spacje w znacznikach PHP. . Nawiasem mówiąc, ze względu na to, że programiści mogą (i zwykle robią) błędnie wstawiać dodatkowe spacje do swojego kodu, ten błąd występuje częściej niż można by się spodziewać. Linia # wymieniona w komunikacie o błędzie odnosi się do lokalizacji problemu - pomoże to rozwiązać problem szybciej i bez zamieszania.

Poprawka nie może modyfikować informacji nagłówka - nagłówki już wysłane przez

Teraz, gdy wiesz, co powoduje błąd, możesz przejść do jego naprawy. Pokażemy Ci dwie opcje rozwiązania problemu, które możesz wypróbować indywidualnie lub po kolei, jeśli indywidualnie nie pomogło.

Opcja 1 - Edycja wadliwego pliku

Pierwsze rozwiązanie błędu Ostrzeżenie: nie można modyfikować informacji nagłówka– ręczna korekta pliku z błędem. Masz już informacje potrzebne do znalezienia problemu w samym komunikacie o błędzie (pamiętaj, że jest to pierwszy plik w komunikacie). Wystarczy otworzyć ten plik przez FTP za pomocą klienta takiego jak FileZilla lub menedżera plików.

Zasadniczo wszystko, o co musisz zadbać, to usunięcie dodatkowych spacji/pustych linii w pliku. Dobrym miejscem do rozpoczęcia jest linia # wymieniona w komunikacie o błędzie. Od tego momentu możesz kontynuować analizowanie reszty pliku, szukając innych niepotrzebnych spacji lub pustych wierszy, aż do samego końca dokumentu.

Upewnij się, że poprawnie piszesz znaczniki początku i końca PHP. Nie może być spacji przed ani po tagu , tak samo jak tag ?> . Ponadto ostatni wiersz kodu nie może kończyć się spacją ani dodatkowym znakiem nowej linii.

Na poniższym zrzucie ekranu możesz zobaczyć plik wp-config.php, który ma spacje przed pierwszym znacznikiem PHP.


PODPOWIEDŹ: W wielu edytory tekstu możesz automatycznie usunąć niepotrzebne spacje. Na przykład, aby usunąć dodatkowe spacje w edytorze Atom, zaznacz cały kod i przejdź do P pakiety -> Whitespace -> Usuń końcowe białe znaki.

Opcja 2 - Wymień uszkodzony plik

Oczywiście edycja wielu plików z błędami może być trudna. Pliki mogą być powiązane z wtyczką lub motywem, które właśnie zainstalowałeś w swojej witrynie, a nawet mogą być podstawowymi plikami WordPress.

Jeśli błąd jest rzeczywiście spowodowany przez wtyczkę lub motyw, wystarczy ją ponownie zainstalować. To działanie pomaga w większości przypadków. Z drugiej strony, jeśli przyczyną błędu jest główny plik WordPressa, najlepszym rozwiązaniem jest pobranie czystej kopii WordPressa i zastąpienie pliku z błędem w Twojej instalacji tym samym w działającej wersji. Zapewni to naprawę wadliwego pliku w stan początkowy, podczas gdy reszta instalacji witryny WordPress pozostanie bezpieczna i zdrowa. Teraz po prostu załaduj ponownie stronę i upewnij się, że błąd został naprawiony.

Podsumowując

Niezależnie od tego, czy wkleiłeś fragment kodu do pliku, dodałeś nową wtyczkę/motyw, czy napisałeś kod ręcznie, istnieje ryzyko dodatkowych spacji w pliku. Te pozornie niewinne przestrzenie mogą być błędem WordPress Ostrzeżenie: nie można modyfikować informacji nagłówka - nagłówki już wysłane przez.

W tym przewodniku omówiliśmy, jak naprawić takie błędy, a teraz Twoja witryna znów działa zgodnie z oczekiwaniami. Więcej przewodników po WordPressie można znaleźć tutaj.

autor

Elena posiada profesjonalne wykształcenie techniczne w tej dziedzinie Technologie informacyjne i doświadczenie w programowaniu inne języki dla różnych platform i systemów. Sferze webowej poświęciła ponad 10 lat, pracując z różnymi systemami CMS, takimi jak Drupal, Joomla, Magento i oczywiście najpopularniejszym obecnie systemem zarządzania treścią - WordPress. Jej artykuły są zawsze techniczne i dokładne, niezależnie od tego, czy jest to recenzja WordPressa, czy też jak skonfigurować serwer VPS.

W tym artykule przyjrzymy się, do czego służą nagłówki, bez wchodzenia w szczegóły, który z nich odpowiada za co. Opis ról najczęściej występujących nagłówków zostanie podany w kolejnych artykułach.

Wszystkie artykuły z serii:

  • Co to są nagłówki HTTP. Ogólna teoria.

http to skrót od HyperText Transfer Protocol (Hypertext Transfer Protocol). Protokół to zbiór zasad, według których różne urządzenia wymiana danych. Powstał w latach 90. XX wieku. Teraz jest używany w Internecie prawie wszędzie. Wszystko, co widzisz w oknie przeglądarki, zostało odebrane przez ten protokół. Nagłówki http są prawdopodobnie najważniejszą rzeczą w komunikacji między urządzeniami. Przekazują podstawowe informacje o nawiązywanym połączeniu i o jego przebiegu przesyłane informacje przez to połączenie.
Rzućmy okiem na schemat komunikacji obu urządzeń. Niech te urządzenia będą Twoim komputerem i jakimś serwerem w Internecie:

Jak widać, przeglądarka wysłała żądanie http. Może to wyglądać mniej więcej tak:

POBIERZ /other-19 HTTP/1.1
Host: www.scriptsite.ru
Klient użytkownika: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Zaakceptuj: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Akceptuj-Język: ru,en-us;q=0,7,en;q=0,3
Akceptuj-kodowanie: gzip, deflate
Akceptuj-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Utrzymaj przy życiu: 300
Połączenie: utrzymuj przy życiu

W tym przypadku pierwszy wiersz jest ciągiem zapytania, wszystkie pozostałe wiersze to nagłówki http, które zawierają dodatkowe informacje o żądaniu, o kliencie, który żąda tych informacji, oraz o wielu innych rzeczach.
W odpowiedzi na nasze żądanie serwer może przesłać następujące nagłówki:

Serwer: Apache/2.0.61 (Unix) mod_ssl/2.0.61 OpenSSL/0.9.8k mod_dp20/0.99.2 PHP/5.2.5 mod_python/3.3.1 Python/2.5.1 mod_ruby/1.2.6 Ruby/1.8.6 (2007-09-24)

X-Powered-przez: PHP/5.2.5

Plik cookie zestawu: PHPSESSID=ft47gokfee6amv3eda3k1p93s3; ścieżka=/

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0

Pragma: bez pamięci podręcznej

Keep Alive: limit czasu=10, max=1024

Połączenie: utrzymuj przy życiu

Kodowanie transferu: chunked

Typ treści: text/html

Pierwsza linia to linia stanu. Pozostałe wiersze to nagłówki. Na schemacie pokazano, że ładowana jest również zawartość strony. Ale ta treść zwykle nie jest wyświetlana we wtyczkach, które wyświetlają nagłówki. A treść strony jest po prostu szczególny przypadek. Zgodnie z protokołem strona nie musi być przesyłana. Zamiast tego można przesłać zdjęcie, plik dźwiękowy i wideo. I wszystkie mają bardzo różne tytuły.

Jak zobaczyć nagłówki http?

Aby zobaczyć nagłówki http, polecam następujące wtyczki do przeglądarki Firefox:

Jeśli używasz Przeglądarka Chrome, możesz wyświetlić wszystkie informacje, klikając przycisk ustawień - narzędzia - narzędzia programistyczne. zakładka sieci.
Użytkownicy przeglądarka operowa Nie mogę nic doradzić, bo nie jestem przyjacielem tej przeglądarki. Po zainstalowaniu wtyczek i ich uruchomieniu spróbuj odświeżyć stronę. Od razu zobaczysz ogromne listy próśb i odpowiedzi, przez które Twoja przeglądarka komunikowała się z serwerem.

Nagłówki HTTP i dostęp do nich w php

Jeśli jesteś programistą php, możesz uzyskać dostęp do nagłówków żądań za pomocą funkcji getallheaders(). Aby zrozumieć, jak to działa, uruchommy następujący kod:

I otrzymujemy wydruk tablicy nagłówków.

Częściej jednak dostęp do nich uzyskuje się poprzez zmienną globalną $_SERVER. Prawie każdy nagłówek http ma w tej zmiennej podobną nazwę elementu, utworzoną przez zasadę nazwa_nagłówka_HTTP. Tak więc dla tego samego 'User_Agent' istnieje zmienna $_SERVER['HTTP_USER_AGENT'];

Aby uzyskać nagłówki, które serwer wyśle ​​do użytkownika, użyj funkcji headers_list(). Z reguły serwer komponuje brakujące obowiązkowe nagłówki już pod koniec pracy wszystkich skryptów. Dlatego ta tablica będzie zawierała nagłówki, albo te, które serwer utworzył przed rozpoczęciem wykonywania skryptu (i nie będą zmieniane), albo te, które ustawimy ręcznie. Możesz je ustawić ręcznie za pomocą funkcji header("header text");
Wykonajmy następujący kod:

Zobaczymy wydruk nagłówków gotowych do wysłania w momencie wywołania funkcji:

Pierwszy nagłówek został ustawiony automatycznie i zawiera nazwę serwera, na którym działa skrypt. Drugi jest ręcznie przez nas instalowany. Gdyby przeglądarka potrzebowała nagłówka „Fruit”, pobierałaby go z odpowiedzi http serwera i używała go. Ale ponieważ nasza przeglądarka go nie potrzebuje, po prostu ignoruje wiersz, którego nie rozumie.

Struktura żądania http

Nasza prośba wygląda tak:

Pierwsza linia, jak wspomniano wcześniej, to ciąg zapytania. Składa się z trzech części:

  • metoda(metoda) - wskazuje, jakiego rodzaju żądanie. Najczęstsze metody to: GET, POST, HEAD. Zostaną one omówione w następnym akapicie.
  • ścieżka(ścieżka) — zwykle jest to część adresu URL, która znajduje się po domenie. Na przykład, jeśli wpiszesz w pasek adresu http://www.scriptsite.ru/about/, wartość ścieżki to /about/.
  • protokół(protokół) — używany protokół. Zwykle składa się z „HTTP” i wersji protokołu. Zwykle w nowoczesne przeglądarki używana jest wersja 1.1

Dalej są nagłówki w postaci ciągów w formacie „Nazwa: wartość”.
Nawiasem mówiąc, dane o plikach cookie są również przesyłane w tym żądaniu jako jeden z nagłówków. Większość z tych wierszy jest opcjonalna. Zapytanie można zredukować do dwóch wierszy:

POBIERZ /article/show/4/ HTTP/1.1

Host: scriptsite.ru

Poproś o metody

DOSTWAĆ

Żądanie get jest zwykle używane do żądania dokumentu, przekazując niektóre parametry.
Jest to główna metoda używana do pobierania stron html, obrazów, plików CSS i JavaScript itp.
Ze względu na to, że parametry mogą być dowolne, a serwer nie ma ograniczeń co do sposobu ich przetwarzania, często do przesyłania informacji wykorzystywana jest metoda żądań danych. Na przykład będziemy mieli taką formę

W takim przypadku parametry te będą widoczne w pasku adresu przeglądarki.

POCZTA

Post to metoda używana do wysyłania danych na serwer. Chociaż możesz wysyłać dane do serwera za pomocą metody GET za pośrednictwem paska adresu przeglądarki, w większości przypadków preferowana jest metoda POST. Wysyłanie dużych ilości danych przez GET jest niepraktyczne. Dodatkowo GET ma pewne ograniczenia, które nie pozwalają na przykład na opublikowanie tego artykułu na mojej stronie za pomocą jednej linii przeglądarki. Żądania POST są najczęściej używane do przesyłania formularzy internetowych. Zmodyfikujmy formularz z poprzedniego przykładu, nadając mu metodę POST.

Z tym błędem stale kontaktują się ze mną i pytają: " Gdzie jest błąd?". Podobne listy przez cały czas otrzymywałem gdzieś kawałki 500 , nie mniej. Już czas skończyć z błędem „”. W tym artykule omówię przyczyny tego błędu, a także sposoby jego rozwiązania.

Jeśli przetłumaczysz ten błąd na rosyjski, otrzymasz coś takiego: „ Nie można zmienić nagłówka, ponieważ zostały już wysłane".co to jest." nagłówki"? Rozwiążmy to.

Gdy serwer zwraca klientowi odpowiedź, oprócz treści (na przykład Kod HTML stron), są też nagłówki. Zawierają kod odpowiedzi serwera, ciastko, kodowanie i wiele innych parametrów usługi. Mogą Skrypt PHP wysłać nagłówek? Oczywiście, że tak. Jest do tego funkcja nagłówek().

Ta funkcja jest na przykład stale używana, gdy . Również podana funkcja regularnie używane w .

Ponadto nagłówki są modyfikowane podczas wysyłania. ciastko oraz na początku sesji (funkcja sesja_start()).

A teraz dlaczego błąd nadal występuje? Serwer zawsze najpierw przekazuje serwerowi nagłówki, a następnie treść. Jeśli serwer już zwrócił nagłówki, ciało idzie, a następnie napotyka niektóre sesja_start(). Okazuje się, że nieszczęsny programista zapomniał wysłać nagłówki przed startem ciała, a teraz chce dogonić odjeżdżający już pociąg.

Oto kod z błędem „”:



?>

Oczywiście takie bzdury PHP nie wybacza. A musiałem tak napisać:

start_sesji(); // I zacznijmy sesję
?>

Skrypt ten nie będzie już powodował żadnych błędów, ponieważ najpierw wysyłane są wszystkie nagłówki, a dopiero potem generowana jest treść odpowiedzi serwera.

Kolejny przykład kodu z błędem:

echo "Cześć!"; // Wypisz coś
start_sesji(); // I zacznijmy sesję
?>

To samo, z jakiegoś powodu najpierw wyświetla się ciało (lub jego fragment), a potem pamiętają, że nagłówki również muszą zostać zmodyfikowane.

Jak będzie poprawne przepisanie tego kodu, zastanów się sam.

Inny przykład:




Wyjście;
?>

Kiedy autor takiego kodu zawodzi, jest zaskoczony tym błędem i mówi: „Bardzo dziwny zbieg okoliczności, gdy operacja się powiedzie, wszystko jest w porządku, a gdy pojawi się jakiś błąd, powiedziano mi, że nie można modyfikować informacji nagłówka - nagłówki już wysłane". Nie dosłownie, ale o to chodzi.

Problem jest ten sam, a poprawny sposób zapisania go to:

$błąd = prawda; // Czy były jakieś błędy?
if ($error) echo "Wystąpił błąd";
else header("Lokalizacja: ".$_SERVER["HTTP_REFERER"]); // Przekieruj wstecz
Wyjście;
?>

Są też drobne błędy:

header("Lokalizacja: ".$_SERVER["HTTP_REFERER"]); // Przekieruj wstecz
Wyjście;
?>

Błąd w tym kodzie występuje z powodu spacji, który jest obecny wcześniej . Spacja jest zwykłym znakiem i jest częścią treści odpowiedzi. A gdy serwer to widzi, stwierdza, że ​​nie będzie już nagłówków i czas wyświetlić treść.

Istnieją również następujące błędy, które mają ten sam charakter. Powiedzmy, że istnieje plik a.html:

require_once "a.html";
header("Lokalizacja: ".$_SERVER["HTTP_REFERER"]); // Przekieruj wstecz
Wyjście;
?>

A osoba jest szczerze zdziwiona, skąd bierze się błąd, jeśli nic nie wyświetlał? Więc nie musisz specjalnie szukać. 1 plik i wszystkie pliki, które są w nim zawarte. A w tych, które są podłączone do podłączonych, musisz również wyglądać, aby nie było wyjścia.

I ostatnia chwila, ale trudniejsza. Okazuje się, że czasami ten błąd występuje z odpowiednim kodem. Wtedy wszystko kwestia kodowania. Upewnij się, że kodowanie pliku to „ UTF-8 bez BOM"a dokładnie" bez BOM", nie tylko " UTF-8". O ile BOM to bajty, które idą na samym początku pliku i są wynikiem.

Naprawdę mam nadzieję, że ten artykuł pomoże rozwiązać absolutnie wszystkie problemy związane z błędem „”, ponieważ starałem się omówić wszystkie pojawiające się problemy. A potem musisz odwrócić głowę i pomyśleć, co jest nie tak w twoim kodzie?