HTTP请求之:PHP函数header常用功能
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常用功能的更多相关文章
- Fiddler抓取https请求 & Fiddler抓包工具常用功能详解
Fiddler抓取https请求 & Fiddler抓包工具常用功能详解 先来看一个小故事: 小T在测试APP时,打开某个页面展示异常,于是就跑到客户端开发小A那里说:“你这个页面做的有问 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
- matlab进阶:常用功能的实现,常用函数的说明
常用功能的实现 获取当前脚本所在目录 current_script_dir = fileparts(mfilename('fullpath')); % 结尾不带'/' 常用函数的说明 bsxfun m ...
- Python常用功能函数
Python常用功能函数汇总 1.按行写字符串到文件中 import sys, os, time, json def saveContext(filename,*name): format = '^' ...
- Python常用功能函数总结系列
Python常用功能函数系列总结(一) 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 Python常用功能函数系列总结(二) 常用函数 ...
- 前端常用功能记录(二)—datatables表格(转)
前端常用功能记录(二)—datatables表格 并不是所有的后台开发都有美工和前端工程师来配合做页面,为了显示数据并有一定的美感,jQuery的DataTables插件对于像我这样的前端菜鸟来说真是 ...
- 从零开始学习jQuery (十) jQueryUI常用功能实战
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本文是实战篇. 使用jQueryUI完成制作网站 ...
- UCOS 请求任务删除函数 及其应用
有时候,如果任务A拥有内存缓冲区或信号量之类的资源,而任务B想删除该任务,这些资源就可能由于没被释放而丢失.在这种情况下,用户可以想法子让拥有这些资源的任务在使用完资源后,先释放资源,再删除自己.用户 ...
- fiddler抓包常用功能详解
一.基础部分: 1.设置代理ip及端口,tools --> telerik fiddler options --> connections -->勾选 “ Allow romote ...
随机推荐
- Hadoop ecosystem notes Outline - TODO
Motivation Sometimes I fell like giving up, then I remember I have a lot of motherfuckers to prove w ...
- 2015GitWebRTC编译实录13
2015.07.21 libboringssl.a 编译通过主要是生成路径,去除test文件比较啰嗦,后继测试需要重点跟进下 CC obj/third_party/boringssl/boringss ...
- cocoapod的下载安装解释
本文不提供cocoapod的下载安装的流程,因为那些只要百度一下就有的东西,而是对里面的代码进行解释,希望对iOS小白安装cocoapod有帮助: 一.cocoapod是什么? 开发过程中,我们会用到 ...
- uva 10622
http://vjudge.net/contest/140673#problem/H 求某个数字(最大到10^9,可为负值)写成完全p次方数的指数p是多少 分析: 先进行唯一分解,之后p整除各个素因子 ...
- 组合模式(Composite Pattern)
组合模式主要用来处理一类具有“容器特征”的对象——即它们在充当对象的同时,又可以作为容器包含其他多个对象. 组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口.这就是组合模式能够将组 ...
- cdr创建样式与样式集的方法
样式是一组定义对象属性的格式化属性,如轮廓或填充.例如,要定义轮廓样式,您可以指定轮廓宽度.颜色和线条类型等属性.要定义字符样式,您可以指定字体类型.字体样式和大小.文本颜色和背景色.字符位置.大写等 ...
- Intel DPDK的一些参资料
dpdk.org What it is Intel® DPDK is a set of libraries and drivers for fast packet processing on x86 ...
- 【mysql】压缩myisam数据表
myisam引擎介绍 存储结构: MyISAM每张表被存放在三个文件: frm:表格定义: MYD(MYData):数据文件: MYI(MYIndex):索引文件: 存储空间: MyISAM可被压 ...
- Difference between applicationContext.xml and spring-servlet.xml in Spring Framework
Question: Are applicationContext.xml and spring-servlet.xml related anyhow in Spring Framework? Will ...
- Hibernate5.2关联关系之单向一对多(一)
Hibernate5.2之单向一对多 一. 简介 Hibernate中最复杂的应该就是各种关联(单向一对多.单向多对一.双向一对多.一对一.多对多)关系的映射,于是笔者就想着去写一些关于Hibe ...