在 http-equiv 元标记内将内容类型设置为 utf-8 时获取重复的 http 请求

Posted

技术标签:

【中文标题】在 http-equiv 元标记内将内容类型设置为 utf-8 时获取重复的 http 请求【英文标题】:Getting duplicate http requests when setting content-type to utf-8 inside http-equiv meta tag 【发布时间】:2012-01-02 22:45:12 【问题描述】:

我在我的网站上发现我收到了两次 http 请求。我正在使用 apache2 服务器。例如,我访问 index.php 并收到 2 个不同的 index.php 标头请求(图像和 CSS 文件只请求一次),因此页面被提供了两次,任何数据库操作都完成了两次。

我发现这是由元标记 http-equiv 引起的。当我将 content-type 属性设置为 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 编码问题,但不知道为什么会这样。

提前致谢!

【问题讨论】:

不知道是不是标题太长,请原谅我的英语 如果使用php设置header会发生什么?所以header('Content-Type: text/html; charset=utf-8');。您在其他浏览器中是否有相同的行为?另外,请将您的meta 代码添加到您的帖子中。可能是你有错误。 将元标记添加到帖子中。 /&gt; 之前应该有一个空格,但这不会引起您的问题。我问的另外两个问题呢? 我会试试你的建议,现在让你,但现在没有太多时间。我刚刚安装了chrome,进行测试。谢谢 【参考方案1】:

我没有找到为什么会发生这种情况,但是我通过将此指令添加到 apache 配置文件中解决了这个问题。

添加到配置文件 /etc/apache2/conf.d/charset 添加默认字符集 UTF-8

此选项会覆盖任何 http-equiv 字符集元标记,因此内容始终以 utf-8 格式发送。如果您的所有内容都应以该编码发送,这没有问题,但如果您使用多种类型的编码,则不是解决方案。

您可以将此配置指令移动到您的 .htaccess 中,这样它就不会影响整个服务器,只会影响您想要的文件夹/站点。

【讨论】:

以上是关于在 http-equiv 元标记内将内容类型设置为 utf-8 时获取重复的 http 请求的主要内容,如果未能解决你的问题,请参考以下文章

没有 http-equiv 元标记且字符集可能不是 UTF-8 的 HTML 文件

UTF-8 内容类型元标记会减慢页面加载速度,为啥?

网站元数据meta标签

http-equiv="refresh" 是不是保留推荐人信息和元数据?

我应该为移动网站使用啥字符编码元标记?

meta