1、页面重定向
   当浏览器接受到头信息中的 Location: http://xxxx 后,就会自动跳转到 http://xxxx 指向的URL地址,这点有点类似用 js 写跳转。但是这个跳转只有浏览器知道,不管体内容里有没有东西,用户都看不到。
   例:
   header('HTTP/1.1 301 Moved Permanently');  //声明指定当前请求的网页已永久移动到新位置(301重定向)
   header("Location: http://www.baidu.com/");  //跳转
   exit;

当然也可以通过使用js和meta重定向
   echo "<script>window.location ='{$PHP_SELF}';</script>";
   echo "<meta http-equiv='refresh' content='0; url=index.php'>";
   exit;

2、人为指定返回客户端浏览器此次HTTP请求的(任意)状态
   当有些页面不想让用户再次访问时,可以人为制造一个无法访问的状态,并抛出异常
   例:
   header('HTTP/1.1 404 Not Found');
   header('status: 404 Not Found');
   exit;

3、指定网页的内容类型
   同样一个XML文件,如果头信息中指定:Content-type: application/xml 的话,浏览器会将其按照XML文件格式解析。但是,如果头信息中是:Content-type: text/xml 的话,浏览器就会将其看作纯文本解析。(浏览器不是按照扩展名解析文件的)
   例:
   header('Content-Type:text/html;charset=UTF-8');   //指明当前访问页面是html网页,utf8编码

4、附件下载
   不知道大家有没有注意,有些时候在一些网站下载东西,点下载连接以后,结果浏览器将这个附件当成网页打开了,里面显示的都是乱码,这个问题也和头信息有关。有时候浏览器根据Content-type 来判断是打开还是保存,这样有时就会判断错误(主要是网站设计者忘记写Content-type)。其实,还有一个可以来指定该内容为附件、需要保存,这个就是:Content-Disposition: attachment; filename="xxxxx"
   例:
   header('Content-type: application/x-msexcel');                              //指明当前访问页面文档类型
   header("Content-Disposition: attachment; filename='样本数据.xls'"); //指明当前浏览文件是附件

5、强制用户每次访问这个页面时获取最新资料(不是使用存在客户端的缓存)
    例:
    //告诉浏览器此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可
    header('Expires:Mon,26 Jul 1970 05:00:00 GMT');

//告诉浏览器此页面的最后更新日期(用格林威治时间表示)也就是当天,目的就是强迫浏览器获取最新资料
    header('Last-Modified:'.gmdate('D,d M Y H:i:s').'GMT');

//告诉客户端浏览器不使用缓存
    header('Cache-Control: no-cache, must-revalidate');

获取HTTP请求的状态码函数

<?php
$url = 'http://www.baidu.com';
echo $getHTTP_CODE=getHttpCode($url); /**
* 获取HTTP请求的状态码
* @author: martinzhang
* @param: $url 目标URL地址
* @return: int 返回此URL对应状态码值
*/
function getHttpCode($url){
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,$url); //设置需要获取的URL地址,也可以在curl_init()函数中设置
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); //设置将curl_exec()获取的信息以文件流的形式返回(return),而不是直接输出。1表示return;0表示直接输出
curl_setopt($curl,CURLOPT_TIMEOUT,3); //设置最大超时时间,单位:秒
curl_setopt($curl,CURLOPT_HEADER,1); //获取Header
curl_setopt($curl,CURLOPT_NOBODY,1); //不需要Body内容
curl_exec($curl);
$getCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);
curl_close($curl);
return $getCode;
}
?>

附:HTTP一般常见的状态码

一、【1xx 保留】

100 Continue
初始的请求已经接受,客户应当继续发送请求的其余部分

101 Switching Protocols
服务器将遵从客户的请求转换到另外一种协议

二、【2xx 成功处理了请求的状态码】

200 OK
服务器已成功处理了请求并提供了请求的网页

201 Created
服务器已经创建了文档,Location头给出了它的URL。

202 Accepted
已经接受请求,但处理尚未完成。

203 Non-Authoritative Information
文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝

204 No Content
服务器成功处理了请求,但没有返回任何内容。

205 Reset Content
没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容

206 Partial Content
客户发送了一个带有Range头的GET请求,服务器完成了它

三、【3xx 重定向 每次请求中使用重定向不要超过 5 次】

300 Multiple Choices
客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在Location应答头指明。

301 Moved Permanently
请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。

302 Found
类似于301,请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。

303 See Other
类似于301/302,不同之处在于,如果原来的请求是POST,Location头指定的重定向目标文档应该通过GET提取

304 Not Modified
如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。

305 Use Proxy
客户请求的文档应该通过Location头所指明的代理服务器提取

307 Temporary Redirect
和302(Found)相同。许多浏览器会错误地响应302应答进行重定向,即使原来的请求是 POST,即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因,HTTP 1.1新增了307,以便更加清除地区分几个状态代码: 当出现303应答时,浏览器可以跟随重定向的GET和POST请求;如果是307应答,则浏览器只能跟随对GET请求的重定向。

四、【4xx 客户端错误 表示请求可能出错,妨碍了服务器的处理】

400 Bad Request
服务器不理解请求的语法。

401 Unauthorized
客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头,浏览器据此显示用户名字/密码对话框,然后在填写合适的Authorization头后再次发出请求。

403 Forbidden
服务器拒绝请求。

404 Not Found
服务器找不到请求的网页(服务器上不存在的网页经常会返回此代码)。

405 Method Not Allowed
请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)对指定的资源不适用。

406 Not Acceptable
指定的资源已经找到,但它的MIME类型和客户在Accpet头中所指定的不兼容

407 Proxy Authentication Required
类似于401,表示客户必须先经过代理服务器的授权。

408 Request Timeout
在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。

409 Conflict
通常和PUT请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。

410 Gone
请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 代码。如果资源已永久删除,应当使用 301 指定资源的新位置。

411 Length Required
服务器不能处理请求,除非客户发送一个Content-Length头。

412 Precondition Failed
请求头中指定的一些前提条件失败

413 Request Entity Too Large
目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个Retry-After头

414 Request URI Too Long
URI太长

416 Requested Range Not Satisfiable
服务器不能满足客户在请求中指定的Range头

417 Expectation Failed
预期失败

五、【5xx 服务器错误 表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错】

500 Internal Server Error
服务器内部遇到错误,无法完成请求。

501 Not Implemented
服务器不支持实现请求所需要的功能。例如,客户发出了一个服务器不支持的PUT请求

502 Bad Gateway
服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答

503 Service Unavailable
服务器目前无法使用(由于超载或停机维护)。通常,这只是暂时状态。

504 Gateway Timeout
由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答

505 HTTP Version Not Supported
服务器不支持请求中所指明的HTTP版本

HTTP请求之:PHP函数header常用功能的更多相关文章

  1. Fiddler抓取https请求 & Fiddler抓包工具常用功能详解

    Fiddler抓取https请求 & Fiddler抓包工具常用功能详解   先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...

  2. C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法

    C#构造方法(函数)   一.概括 1.通常创建一个对象的方法如图: 通过  Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...

  3. matlab进阶:常用功能的实现,常用函数的说明

    常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...

  4. Python常用功能函数

    Python常用功能函数汇总 1.按行写字符串到文件中 import sys, os, time, json def saveContext(filename,*name): format = '^' ...

  5. Python常用功能函数总结系列

    Python常用功能函数系列总结(一) 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 Python常用功能函数系列总结(二) 常用函数 ...

  6. 前端常用功能记录(二)—datatables表格(转)

    前端常用功能记录(二)—datatables表格 并不是所有的后台开发都有美工和前端工程师来配合做页面,为了显示数据并有一定的美感,jQuery的DataTables插件对于像我这样的前端菜鸟来说真是 ...

  7. 从零开始学习jQuery (十) jQueryUI常用功能实战

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是实战篇. 使用jQueryUI完成制作网站 ...

  8. UCOS 请求任务删除函数 及其应用

    有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失.在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己.用户 ...

  9. fiddler抓包常用功能详解

    一.基础部分: 1.设置代理ip及端口,tools --> telerik fiddler options --> connections -->勾选 “ Allow romote ...

随机推荐

  1. HTML5实现屏幕手势解锁

    HTML5实现屏幕手势解锁(转载) https://github.com/lvming6816077/H5lockHow to use? <script type="text/java ...

  2. HDU 1372 Knight Moves (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1372 Knight Moves Time Limit: 2000/1000 MS (Java/Othe ...

  3. php部分---注册审核

    用户界面: 1.登录界面,用户填写相关信息 <form action="dengluchuli.php" method="post"> <di ...

  4. mysql添加外键

    语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名); 例: alter ta ...

  5. LeetCode 【21. Merge Two Sorted Lists】

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t ...

  6. I do not want to inherit the child opacity from the parent in CSS(不想让子元素继承父元素的透明度)

    Instead of using opacity, set a background-color with rgba, where 'a' is the level of transparency. ...

  7. Android Gradle 多Module单独编译一个Module

    假如项目中有两个Module,app1和app2.假如我只想对app1 module进行build,则可以: gradle :App1:build build命令可以换成任意gradle命令.

  8. DevExpress中GridView上的右键菜单

    1. 先拖一个PopupMenu和BarManage控件,设置PopupMenu的Manager属性为BarManager. 2. 先选中GridView,不是GridControl,在属性窗口中,选 ...

  9. git branch几个简单操作

    1.git branch  该命令会列出当先项目中的所有分支信息,其中以*开头的表示当前所在的分支.参数-r列出远程仓库中的分支,而-a则远程与本地仓库的全部分支. 2.git branch deve ...

  10. 怎么取消 Windows Server 2012 r2 RDP 限制每个用户只能进行一个会话(转)

    在 Windows Server 2008 / 2008 R2 上,如果希望多个远程用户使用同一个账号同时访问服务器的 Remote Desktop(RDP),只需通过管理工具-远程桌面下的“远程桌面 ...