Получение дублирующих запросов http при установке типа содержимого в utf-8 внутри метатега http-эквивалент - PullRequest
1 голос
/ 21 ноября 2011

Я обнаружил на своем сайте, что я получаю http запросы дважды.Я использую сервер apache2.Например, я захожу на index.php и получаю 2 разных запроса заголовка для index.php (изображения и CSS-файлы запрашиваются только один раз), поэтому страница обслуживается дважды, а любая операция с базой данных выполняется дважды.

Я обнаружил, что это вызвано метатегом http-эквивалент.Когда я устанавливаю атрибут содержимого-типа в UTF-8, я получаю такое поведение, удаляя тег или устанавливая его для другого типа кодировки (например, ISO-8859-1), устраняет эту проблему.

Это HTMLкод для этого метатега:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

Вот отправленные и полученные заголовки, перехваченные плагином Http Headers Live, которые показывают повторяющийся запрос:

http://oposiziones.dev/



GET / HTTP/1.1

Host: oposiziones.dev

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: es-es,en-us;q=0.7,en;q=0.3

Accept-Encoding: gzip, deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Connection: keep-alive

Referer: http://oposiziones.dev/error-53_q0.html

Cookie: PHPSESSID=jeup12fp5lpoo5t9k052qt7tl7



HTTP/1.1 200 OK

Date: Mon, 21 Nov 2011 11:53:25 GMT

Server: Apache/2.2.20 (Ubuntu)

X-Powered-By: PHP/5.3.6-13ubuntu3.2

Expires: Thu, 19 Nov 1981 08:52:00 GMT

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

Pragma: no-cache

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Length: 6496

Keep-Alive: timeout=5, max=100

Connection: Keep-Alive

Content-Type: text/html




http://oposiziones.dev/



GET / HTTP/1.1

Host: oposiziones.dev

User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: es-es,en-us;q=0.7,en;q=0.3

Accept-Encoding: gzip, deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Connection: keep-alive

Referer: http://oposiziones.dev/error-53_q0.html

Cookie: PHPSESSID=jeup12fp5lpoo5t9k052qt7tl7



HTTP/1.1 200 OK

Date: Mon, 21 Nov 2011 11:53:26 GMT

Server: Apache/2.2.20 (Ubuntu)

X-Powered-By: PHP/5.3.6-13ubuntu3.2

Expires: Thu, 19 Nov 1981 08:52:00 GMT

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

Pragma: no-cache

Vary: Accept-Encoding

Content-Encoding: gzip

Content-Length: 6385

Keep-Alive: timeout=5, max=99

Connection: Keep-Alive

Content-Type: text/html

Любой, у кого есть идеякак это решить?Мне нужно сохранить кодировку UTF-8, потому что данные моей базы данных установлены в UTF-8, и все должно быть закодировано в UTF-8.

Я думаю, что это проблема кодирования apache, но понятия не имею, почемуэто происходит.

Заранее спасибо!

1 Ответ

0 голосов
/ 24 ноября 2011

Я не нашел, почему это происходит, но я решил проблему, добавив эту директиву в файл конфигурации apache.

Добавлен в конфигурационный файл /etc/apache2/conf.d/charset AddDefaultCharset UTF-8

Этот параметр переопределяет любой метатег charset http-эквивалент, поэтому содержимое всегда отправляется в utf-8. Это не проблема, если весь ваш контент должен быть отправлен в этой кодировке, но не будет решением, если вы используете несколько типов кодировки.

Вы можете переместить эту директиву конфигурации в ваш .htaccess, чтобы она не влияла на весь сервер, а только на нужную папку / сайт.

...