在 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
代码添加到您的帖子中。可能是你有错误。
将元标记添加到帖子中。
/>
之前应该有一个空格,但这不会引起您的问题。我问的另外两个问题呢?
我会试试你的建议,现在让你,但现在没有太多时间。我刚刚安装了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 文件