Zestaw znaków nie został określony w błędzie nagłówków HTTP

15

Podczas testowania tej strony z szybkością strony pojawia się Specify a character setbłąd:

The following resources have no character set specified in their HTTP headers. Specifying a character set in HTTP headers can speed up browser rendering.

Content-TypeTag jest obecne, a strona została zapisana z kodowania UTF-8, tak więc gdzie jest błąd bierze?

Alex
źródło
gdzie w apache? który katalog?

Odpowiedzi:

19

Odnosi się do nagłówków odpowiedzi, a nie do treści dokumentu („znacznik Content-Type”).

Jeśli zaznaczysz nagłówki odpowiedzi na stronie za pomocą dowolnego debugera HTTP (na przykład panelu Net Firebug dla Firefoksa lub podobnej karty Narzędzi programisty w Google Chrome / Internet Explorer / Safari / Opera), zobaczysz następujący wiersz:

Content-Type: text/html

Jednocześnie, jeśli zaznaczysz to samo dla tej strony, zobaczysz:

Content-Type: text/html; charset=utf-8

Szybkość strony odnosi się do brakującej części. Mając prawidłowego zestawu znaków obecnych w nagłówkach rzeczywiście przyspieszy renderowania strony trochę . W przypadku podania nieprawidłowego zestawu znaków w nagłówku odpowiedzi (lub braku zestawu znaków) przeglądarka musi zeskanować / zinterpretować stronę, aż znajdzie prawidłową deklarację zestawu znaków ( <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />wiersz), a następnie ponownie uruchom proces renderowania, jeśli zestaw znaków różni się od zestawu przeglądarki ustawienia domyślne.

Kara za wydajność nie jest wcale duża - dla użytkownika jest niezauważalna, chyba że używany jest naprawdę stary / wolny sprzęt (chociaż różni się w zależności od przeglądarki i wersji przeglądarki). Może istnieją inne „kary”, które są bezpośrednio z tym związane, ale ja osobiście ich nie znam.

Naprawa: Jeśli sam wygenerujesz ten nagłówek (w skrypcie PHP), musisz go zmienić, aby zawierał także zestaw znaków. Jeśli skrypt nie wykonuje takich operacji na nagłówkach, oznacza to błąd w konfiguracji serwera.

LazyOne
źródło
Właśnie dodałem header('Content-type: text/html; charset=UTF-8');. Wielkie dzięki!
Alex,
6
Możesz także wyświetlić nagłówki odpowiedzi za pomocą curl --head $url. Domyślny zestaw znaków można określić w Apache, dodając AddDefaultCharset utf-8do pliku konfiguracyjnego, takiego jak .htaccess.
Lri
+1 za jasne wyjaśnienie, często się nad tym zastanawiał i był zdezorientowany. Rozwiązany z dodaniem htaccess AddDefaultCharset
Malachi
Nie powinno <meta charset="utf+8">wystarczyć?
Daniel Springer