Content-Type问题总结
web服务器在向浏览器发送任何内容的时候,都会先发送相应的header头。无论是html文本,还是gif,jpg等文件。
header信息里面一般会包含:
Date,Server,Last-Modified,Etag,Content-Length,Content-Type等等信息。
深入了解header里面的信息很有必要,因为这是浏览器是否使用浏览器缓存文件,及能否正确解析文件的基础。
最近遇到页面的显示问题,都是和Content-Type相关的。
问题1:charset,页面要使用shift_jis编码。
因为web服务器默认的Charset不是shift_jis,这时候即使你的html里面的meta正确设置了:
以下是代码片段:
<meta http-equiv="content-type" content="application/xhtml+xml; charset=Shift_JIS" />
页面还是会显示乱码。原因是web服务器发送的header信息为:
以下是代码片段: Content-Type:text/html; charset=utf-8 |
解决办法1:
在apache中进行配置:AddDefaultCharset shift_jis
即设置文本的默认编码为shift_jis。
解决办法2:
以下是代码片段: 通过php设置:header(’Content-Type:text/html; charset=shift-jis’); |
问题2:页面规范为xhtml 1.0
首先,xhtml 1.0对应的content type为application/xhtml+xml。因此页面中meta设置如下:
以下是代码片段: <meta http-equiv="content-type" content="application/xhtml+xml; charset=Shift_JIS" /> |
但是即使如此,发现在手机模拟器中(这是个手机网站项目),页面的样式无法正确显示。
问题的原因还是出现在header信息中的Content-Type上。通过YSlow查看得到:
以下是代码片段: Content-Type:text/html; charset=shift-jis |
这边的 text/html 会导致手机浏览器无法按照XHTML1.0解析html页面。
解决方法1:
修改apache配置。
apache关于文件类型的content type定义都放在:mime.types文件中。 在mime.types中可以看到:
以下是引用片段: text/html html htm |
这边的意思是:对于.html和.htm格式的文件,发送的content type为text/html ,因此我们只要修改为:
以下是引用片段: application/xhtml+xml html htm |
即可解决在 .html 和 .htm文件中解析xhtml 1.0问题,但这会影响apache的全局配置。为了消除对其他项目的影响,因此在该项目的虚拟目录增加设置:
以下是引用片段: AddType application/xhtml+xml html |
这样子,对于 .html 格式的文件,服务器发送的content type就都是“application/xhtml+xml ”了,如果要支持其他格式的文件,设置的方法也类似。
解决方法2:
将使用XHTML1.0规范的静态文件都改为 .xhtml 或者 .xht 格式。因为事实上apache中的mime.types已经有如下定义:
以下是引用片段: application/xhtml+xml xhtml xht |
解决方法3:
通过php设置:
以下是代码片段: header(’Content-Type:application/xhtml+xml; charset=shift-jis’); |
总结:浏览器解析页面的时候,优先参照的是header头信息里面的设置,之后才是html页面中的meta设置。如果出现页面乱码或者文档无法正常解析,应该从header头信息里面去找找原因。
如何查看浏览器接收到的文件的header信息呢?推荐使用Yslow!
建议继续学习:
- Xvfb+YSlow+ShowSlow搭建前端性能测试框架 (阅读:54292)
- YSLOW法则中,为什么yahoo推荐用GET代替POST? (阅读:10020)
- http header中缺少Content-Type导致$_POST为空 (阅读:2587)
- 两个 Header 的作用 (阅读:2227)
- Yslow简介 (阅读:2188)
- ASM HEADER 备份与恢复 (阅读:1503)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:rethink 来源: 博客园-rethink log
- 标签: Content-Type header Yslow
- 发布时间:2009-11-09 13:32:12
- [68] Twitter/微博客的学习摘要
- [66] IOS安全–浅谈关于IOS加固的几种方法
- [65] android 开发入门
- [64] 如何拿下简短的域名
- [62] find命令的一点注意事项
- [61] Go Reflect 性能
- [60] 流程管理与用户研究
- [59] Oracle MTS模式下 进程地址与会话信
- [58] 图书馆的世界纪录
- [56] 读书笔记-壹百度:百度十年千倍的29条法则