您的位置:首页 > 运维架构 > 网站架构

header在网站开发中的运用

2014-01-21 09:31 113 查看
我们先来了解下PHP header()函数,以及MIME类型.

header()函数向客户端发送原始的HTTP报头。即必须在任何实际的输出被发送之前调用header()函数,不过在PHP4以及更高的版本中,您可以使用输出缓存来解决此问题);

提示: 

很多phper用header()来跳转页面的时候会很容易的忽略了header()函数调用之后还会继续运行下面的程序代码,这会导致不必要的麻烦.所以调用header()之后要用die();或者exit;等来终止下一步操作.

MIME类型 缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type),MIME使用一个简单的字符串组成,最初是为了标识邮件Email附件的类型,

在html文件中可以使用content-type属性表示,描述了文件类型的互联网标准.MIME类型能包含视频、图像、文本、音频、应用程序等数据.

简单地说MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。 


header在网站开发中的运用


header("P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR");

header("Set-Cookie: test=axis; expires=Sun, 23-Dec-2018 08:13:02 GMT; domain=.xxx.com; path=/"); 

对于IE来说(默认安全级别下),iframe、img、link等标签都是只发送session,cookie(又叫第一方cookie),拦截本地cookie发送(又叫第三方cookie)。当这些标签跨域引用一个页面,实际上是发起了一次GET请求。

如果这个跨域的请求,HTTP返回头中带有Set-Cookie , 那么这个cookie对浏览器来说,实际上是无效的。

如果 set-cookie 成功,再次请求该页面,浏览器应该会 sent 刚才 recieve 到的cookie。可是由于前面说的跨域限制,在IE里的iframe标签是 set-cookie不成功的,所以无法sent刚才收到的cookie。 这里无论是 session cookie 还是本地cookie都是一样。

但是这种情况在加入了P3P header 后会改变。

P3P header允许跨域访问隐私数据,从而可以跨域set-cookie成功.


php header编码:

header("Content-type: text/html; charset=utf-8"); 代替HTML中来定义浏览器解析页面的编码方式


定义文档语言:

header('Content-language: en');


301 路径URL重定向: 

301代表永久性跳转(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移,建议使用301来做重定向。

header('HTTP/1.1 301 Moved Permanently');

header('Location: http://blog.sina.com.cn/chinesephper/');
die(); 


302 路径URL重定向: 

302代表暂时性跳转(Temporarily Moved),不少SEO曾广泛应用这项技术作弊,各大主要搜索引擎均加强了打击.即使网站客观上不是spam(专门针对那些欺骗搜索引擎的信息),也很容易被搜寻引擎容易误判为spam而遭到惩罚.

header('Location: http://blog.sina.com.cn/chinesephper/');
die();

提示:


301,302的主要区别:

301永久跳转,表示本网页永久性转移到另一个地址;302临时跳转,表示暂时转向到另外一个网址;302容易被搜索引擎视为spam,301则不会.


404 错误页面提示:  

404页面通常为用户访问了网站上不存在或已删除的页面,服务器返回的404错误的一个网站必备页面,有利于用户体验与SEO优化.如果站长没有设置404页面,会出现死链接.蜘蛛爬行这类网址时,不利于搜索引擎收录.

header('HTTP/1.1 404 Not Found'); 


503 服务不可用: 

header('HTTP/1.1 503 Service Temporarily Unavailable');

header('Status: 503 Service Temporarily Unavailable');

header('Retry-After: 60');

Retry-After 响应头标域,由服务器和状态编码503(无法提供服务)配合发送,以标明再次请求之前应该等待多长时间.

PDF PHP输出PDF文件: 

如果想提示用户保存所发送的数据,例如一个生成的PDF文件,可以通过发送Content-Disposition标头提供推荐的文件名来强制浏览器弹出一个保存文件对话框.

header('Content-Type: application/pdf');

header('Content-Disposition: attachment; filename="续梦PHP.pdf"');// 这样做就会提示下载PDF文件续梦PHP.pdf

提示:

readfile('续梦PHP.pdf');// 函数读入续梦PHP.pdf并写入到输出缓冲

file_get_contents('续梦PHP.pdf'); //把整个文件读入一个字符串中


Cache 解析浏览器的输出缓存: 

header('Expires: Mon, 13 Jan 2014 00:00:00 GMT');

header('Cache-Control: no-store, no-cache, must-revalidate');

header('Cache-Control: pre-check=0, post-check=0, max-age=0');

header('Pragma: no-cache');  


CSS: 

header('Content-Type: text/css');

 


JSON:

header('Content-type: application/json');


Javascript header: 

header('Content-Type: application/javascript');

 


Images:

For JPEG(jpg): 

header('Content-Type: image/jpeg');


For PNG: 

header('Content-Type: image/png');

提示:IE6,IE8浏览器中png的图片的ContentType体现的是image/x-png,使用以x-开头的方法标识这个类别,例如:x-gzip,x-tar等.

 


For BMP:  

header('Content-Type: image/bmp');

谢谢关注websites博客!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息