Назад | Перейти на главную страницу

Как настроить заголовок Content-Type UTF-8 в Apache?

На моем веб-сайте есть страницы и другой контент в кодировке UTF-8. Для HTML установка кодировки в метатеге не проблема. Однако у меня также есть необработанные текстовые файлы с кодировкой UTF-8, которые отображаются некорректно, например появляется как ×. Я подумал о добавлении отметки порядка байтов в начале таких файлов, но я бы предпочел не делать этого, поскольку они не всегда хорошо поддерживаются. Я выполнил инструкции в этот другой вопрос, но это не повлияло. Это заголовок HTTP-ответа:

HTTP/1.1 200 OK
Date: Sat, 12 Aug 2017 15:41:04 GMT
Server: Apache/2.4.10 (Debian)
Last-Modified: Wed, 09 Aug 2017 19:24:33 GMT
ETag: "c04c-5565707a34966"
Accept-Ranges: bytes
Content-Length: 49228
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive

Я надеялся увидеть Content-Type: text/plain; charset=utf-8. Как я могу получить надежную кодировку UTF-8 для этих URI?

Content-Type не отправляется для 304 измененных ответов, потому что для такого ответа нет тела содержимого.

Посмотрите на тип ответа 200, и вы должны это увидеть. Используйте Ctrl + F5 для принудительного обновления и ответа 200 вместо повторной проверки кэшированного ответа с ответом 304.

Затем вы обновили свой вопрос, включив в него ответ 200, но я ожидаю, что всегда будет Content-Type: text/plain заголовок или эквивалент (даже если набор символов не включен), но этого нет в вашем примере, поэтому не уверены, что у вас есть все подробности в этом?

В любом случае, правильный способ установить это - добавить в конфигурацию apache следующее:

#Set the correct Char set so don't need to set it per page.
AddDefaultCharset utf-8
#for css, js, etc.
AddCharset utf-8 .htm .html .js .css

Первый (AddDefaultCharset) установит кодировку для text/plain и text/html Ресурсы.

Второй (AddCharset) требует mod_mime и устанавливает кодировку для других типов в зависимости от расширения файла. Файлы Javascript отправляются с типом содержимого application/javascript и файлы CSS отправляются с типом содержимого text/css поэтому не подбираются параметром AddDefaultCharset. Файлы .htm и .html на самом деле не обязательно должны быть в нем, поскольку они будут выбраны по умолчанию, но явного вреда не будет.

Я исправил эту проблему, добавив следующие строки в apache2.conf:

AddType text/plain .yml
AddDefaultCharset utf-8

Это было некоторое время назад, когда я писал этот ответ. В последних установках Apache по умолчанию может быть уже установлен utf-8.