php header前输出,有关header()前不能有实际输出的一点分析

在看了一些博文以后,发现大多数博文并不能解决我的问题,他们的重点都是放在对输出缓冲器的一些操作上面,而并没有真正提到“为什么header前不能有输出?”或者讲的都很模糊,下面我们来看看究竟是为什么。

那我们也得先来聊聊缓冲吧。

buffer是啥?全名叫缓冲寄存器,存储速度较快。主要分为输入缓冲器和输出缓冲器两种。

输入缓冲器:将外设送来的数据暂时存放,以便处理器将它取走。我们都知道,处理器的速度很快,外设较慢,如果没有缓冲器的话,cpu将有大部分时间在等待外设数据,简直很浪费时间嘛!这里暂且不说cpu利用这段时间去干点别的什么。

输出缓冲器:暂存处理器送往外设的数据。如果没有它,cpu处理完数据就交付,cpu的快速和外设的慢速,cpu不可能等着外设在那慢慢消化,这样容易造成数据覆盖,以致丢失。

总的一点:缓冲器的提出,主要是为了应对高速cpu与外设协调工作,实现数据同步与安全。

好了,不吹水了,赶紧步入正题。

分析如下:

但在这之前,我先来点废话,在当今的网络通信中,不管是B/S还是C/S,HTTP 1.1说明,一次通信,建立一次tcp持久连接,在该连接中可以发送多次资源请求,每次请求对应一次请求头消息的发送,服务端对应一次响应头消息和资源主体(如果存在)的返回。(服务端正直到既不多给也不少给)。

ok了,不扯淡了。

大伙都知道,客户端之所以会收到资源,是因为它是主动请求的,服务端被动发送给它。

我们来假设一下:假如header前面可以有实际的输出,output_buffer=off,我们看看会发生什么。

好了,客户端发送一次资源请求,请求如下一页面。

asdf

header(

?>

服务端返回一个响应头部(浏览器接收)说云云,浏览器开始解析(当然php并不由浏览器解析,但这并不影响我们的理解)该页面,首先显示asdf,不错吧,好,再往下走,碰到header,它会说泥煤啊,这header的信息应该和响应头部一起送过来啊,我都已经接收到一个响应头部了,并且连信息都输出了(asdf),现在又需要再接收一个头部才行啊,是啊,但是我只请求了一次啊,也就是我只发送了一个请求头部啊,怎么能接收两个呢,不行,不能花心,只能接收一个,这个不能接收。其实到这里我们已经发现,浏览器就跟做人一样,专一才是王道。它发送一次请求就只能接收一个响应头信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值