php中为什么要用heade定义头,有什么应用场景

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LJFPHP/article/details/84032948

一、背景

      平时我们在写代码的时候经常用定义header()相关的东西,以前博主也只是知其然不知其所以然,这里总结一下,希望以后再碰到需要定义header的需求,能快速知道自己该这么做。

二、什么是header

      提起来header,首先想起来的就是请求头,然后想起http协议相关。身为一个程序员,这辈子怕是和http结缘了。咱们这边先不管http相关的东西,先说header。

概述 :一个网络请求路由到目标机器后,目标机器总要知道它要请求什么,以什么编码方式传输,数据长度等信息,这是表头要表达的内容

文档:http://www.w3school.com.cn/php/func_http_header.asp

二、用到header的实例

1、为什么要用header

      对后端人员来说,用header可以控制前端页面的输出。比如输出json还是image。还能拒绝一些域名的访问,比如laravel的中间件部分。可以限制前端页面缓存或者直接跳转页面等。或者是我们需要在方法里面通过curl请求的时候,根据需求会自定义header部分等

2、具体的实例

(1)招聘网站的缓存

      比如我们在招聘网站搜索职位的时候,我们的需求应该是页面不能有缓存,用户搜索什么,页面必须立即显示。那么这部分我们可以在接口中定义header来实现该需求:

header("Cache-Control: no-store, no-cache, must-revalidate");    
        	header("Cache-Control: post-check=0, pre-check=0", false);    
       	 header("Pragma: no-cache");  //这个是为了适应IE浏览器的缓存机制

具体参考链接:https://blog.csdn.net/fatong3/article/details/67638848

(2)验证token 的中间件的跳转 :

      我们在验证身份的时候,验证信息的方法无非是(1、URL的get参数,2、协议的头Header中,3、协议的请求正文内),包括博主这边用到的laravel验证身份的中间件,原理上也是通过把token放到header中实现的。

$request->headers->set('Authorization', 'Bearer ' . $token);

参考链接:
https://blog.csdn.net/qq_16234613/article/details/78843010
https://blog.csdn.net/huangwenting1990/article/details/52261592

(3)控制页面返回内容

      这部分常用的就是php绘图,然后直接返回图片给页面。或者生成pdf,直接返回给页面等,这个时候就要定义header来实现。

(4)header还可以用在curl请求中

参考链接:https://www.cnblogs.com/handongyu/p/6955692.html

(5)限制特定的域名访问资源

      这部分是可以通过header限制特定的域名访问咱们的资源,也是为了保证正式环境的安全,拒绝一些不必要的跨域请求,只允许我们已知的安全的域名来访问我们的资源。

代码:

  	$allow_origin = array(  
            'http://aaa.com',
            'http://bbb.com',      
        );
         $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
          if (in_array($origin, $allow_origin)) {
            header("Access-Control-Allow-Origin:" . $origin);
          }

限定域名访问也和咱们经常碰到的跨域问题有关,大家有兴趣可以搜一下:Access-Control-Allow-Origin

更多实例参考:https://www.cnblogs.com/chengshan/p/6526567.html

三、注意事项

(1)一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些函数需要在输出流中增加消息头部信息。

(2)如果在header()执行之前有echo等语句,当后面遇到header()时,就会报出 “Warning: Cannot modify header information – headers already sent by ….”错误。

(3)就是说在这些函数的前面不能有任何文字、空行、回车等,而且最好在header()函数后加上exit()函数。

      以上就是博主对header做的一次小总结了,看了很多文章,也结合自己碰到的情况总结的。感觉header还是挺常用的,关键还是理解http协议吧,内容很多,加油。

end

猜你喜欢

转载自blog.csdn.net/LJFPHP/article/details/84032948