一.header函数 按照官方文档的说法,header函数用来输出http头部信息,你能够有下面的这些用法:javascript
一、使用header函数进行跳转页面;
header(‘Location:’.$url);
其中$url就是将要跳转的url了。
这种用法的注意事项有如下几点:
Location 和”:”之间不能有空格,不然会出现错误(注释:我刚测试了,在我本地环境下,没有跳转页面,可是也没有报错,不清楚什么缘由); 在用header前不能有任何的输出(注释:这点你们都知道的,若是header以前有任何的输出,包括空白,就会出现header already sent by xxx的错误); header 后面的东西还会执行的;css
二、使用header声明content-type
header(‘content-type:text/HTML;charset=utf-8′);
这个没有什么好说的;
三、使用header返回response 状态码
header(sprintf(‘%s %d %s’, $http_version, $status_code, $description));
样式就是这样的;
例如:header(‘HTTP/1.1 404 Not Found’);
四、使用header在某个时间后执行跳转
header(“Refresh: {$delay}; url={$url}”);
其中$delay就是推迟跳转的时间,$url为须要跳转的url
例如:header(‘Refresh: 10; url=http://www.example.org/’); 意思为10s后跳转到http://www.eexample.org这个网站
五、使用header控制浏览器缓存
header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
header(“Last-Modified: ” . gmdate(“D, d M Y H:i:s”) . “GMT”);
header(“Cache-Control: no-cache, must-revalidate”);
header(“Pragma: no-cache”);
六、执行http验证
header(‘HTTP/1.1 401 Unauthorized’);
header(‘WWW-Authenticate: Basic realm=”Top Secret”‘);
七、使用header进行下载操做
header(‘Content-Type: application/octet-stream’);//设置内容类型
header(‘Content-Disposition: attachment; filename=”example.zip”‘); //设置MIME用户做为附件下载 若是将attachment换成inline意思为在线打开
header(‘Content-Transfer-Encoding: binary’);//设置传输方式
header(‘Content-Length: ‘.filesize(‘example.zip’));//设置内容长度
// load the file to send:
readfile(‘example.zip’);//读取须要下载的文件html
问题来了,究竟什么是http头部信息呢?java
二.http 头信息详解c++
HTTP(HyperTextTransferProtocol)是超文本传输协议 的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请 求,请求头包含请求的方法、URI、协议版本、以及包含请求修饰符、客户信息和内容的相似于MIME的消息结构。服务器以一个状态行做为响应,相应的内容 包括消息协议的版本,成功或者错误编码加上包含服务器信息、实体元信息以及可能的实体内容。git
一般HTTP消息包括客户机向服务器的请求 消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可选的消息体组成。HTTP的头域包括通用 头,请求头,响应头和实体头四个部分。每一个头域由一个域名,冒号(:)和域值三部分组成。域名是大小写无关的,域值前能够添加任何数量的空格符,头域能够 被扩展为多行,在每行开始处,使用至少一个空格或制表符。web
通用头域shell
通用头域包含请求和响应消息都支持的头域,通用头 域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。对通用头域的扩展要求通信双方都支持此扩 展,若是存在不支持的通用头域,通常将会做为实体头域处理。下面简单介绍几个在UPnP消息中使用的通用头域。数据库
Cache-Control头域api
Cache- Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会修改另外一个消息处理过程当中的缓存处理过程。请求时的缓存指令包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。各个消息中的指令含义如 下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这容许服务器仅仅描述当用户的部分响应消息,此响应消息对于其余用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无心的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机能够接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机能够接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机能够接收超出超时期间的响应消息。若是指定max-stale消息的值,那么客户机能够接收超出超时期指定值以内的响应消息。
Date头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,须要知道用户所在的时区。
Pragma头域
Pragma头域用来包含实现特定的指令,最经常使用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache- Control:no-cache相同。
请求消息
请求消息的第一行为下面的格式:
MethodSPRequest-URISPHTTP-VersionCRLFMethod 表示对于Request-URI完成的方法,这个字段是大小写敏感的,包括OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD应该被全部的通用WEB服务器支持,其余全部方法的实现是可选的。GET方法取回由Request-URI标识的信息。 HEAD方法也是取回由Request-URI标识的信息,只是能够在响应时,不返回消息体。POST方法能够请求服务器接收包含在请求中的实体信息,可 以用于提交表单,向新闻组、BBS、邮件群组和数据库发送消息。
SP表示空格。Request-URI遵循URI格式,在此字段为星号 (*)时,说明请求并不用于某个特定的资源地址,而是用于服务器自己。HTTP- Version表示支持的HTTP版本,例如为HTTP/1.1。CRLF表示换行回车符。请求头域容许客户端向服务器传递关于请求或者关于客户机的附加 信息。请求头域可能包含下列字段Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。对请求头域的扩展要求通信双方都支持,若是存在不支持的请 求头域,通常将会做为实体头域处理。
典型的请求消息:
GET http://download.microtool.de:80/somedata.exe
Host: download.microtool.de
Accept:*/*
Pragma: no-cache
Cache-Control: no-cache
Referer: http://download.microtool.de/
User-Agent:Mozilla/4.04[en](Win95;I;Nav)
Range:bytes=554554-
上例第一行表示HTTP客户端(多是浏览器、下载程序)经过GET方法得到指定URL下的文件。棕色的部分表示请求头域的信息,绿色的部分表示通用头部分。
Host头域
Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,不然系统会以400状态码返回。
Referer头域
Referer 头域容许客户端指定请求uri的源资源地址,这能够容许服务器生成回退链表,可用来登录、优化cache等。他也容许废除的或错误的链接因为维护的目的被 追踪。若是请求的uri没有本身的uri地址,Referer不能被发送。若是指定的是部分uri地址,则此地址应该是一个相对地址。
Range头域
Range头域能够请求实体的一个或者多个子范围。例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节之后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
可是服务器能够忽略此请求头,若是无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。
User-Agent头域
User-Agent头域的内容包含发出请求的用户信息。
响应消息
响应消息的第一行为下面的格式:
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
HTTP- Version表示支持的HTTP版本,例如为HTTP/1.1。Status- Code是一个三个数字的结果代码。Reason-Phrase给Status-Code提供一个简单的文本描述。Status-Code主要用于机器自 动识别,Reason-Phrase主要用于帮助用户理解。Status-Code的第一个数字定义响应的类别,后两个数字没有分类的做用。第一个数字可 能取5个不一样的值:
1xx:信息响应类,表示接收到请求而且继续处理
2xx:处理成功响应类,表示动做被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动做,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求
响 应头域容许服务器传递不能放在状态行的附加信息,这些域主要描述服务器的信息和 Request-URI进一步的信息。响应头域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。对响应头域的扩展要求通信双方都支持,若是存在不支持的响应头 域,通常将会做为实体头域处理。
典型的响应消息:
HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:”a030f020ac7c01:1e9f”
Content-length:39725426
Content-range:bytes554554-40279979/40279980
上例第一行表示HTTP服务端响应一个GET方法。棕色的部分表示响应头域的信息,绿色的部分表示通用头部分,红色的部分表示实体头域的信息。
Location响应头
Location响应头用于重定向接收者到一个新URI地址。
Server响应头
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识通常按照重要性排序。
实体
请 求消息和响应消息均可以包含实体信息,实体信息通常由实体头域和实体组成。实体头域包含关于实体的原信息,实体头包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD五、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header容许客户端定义新的实体 头,可是这些域可能没法未接受方识别。实体能够是一个通过编码的字节流,它的编码方式由Content-Encoding或Content-Type定 义,它的长度由Content-Length或Content-Range定义。
Content-Type实体头
Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型 Content-Range实体头
Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。通常格式:
Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
例 如,传送头500个字节次字段的形式:Content-Range:bytes0- 499/1234若是一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围, Content-Length表示实际传送的字节数。
Last-modified实体头
Last-modified实体头指定服务器上保存内容的最后修订时间。
应答头 | 说明 |
Allow | 服务器支持哪些请求方法(如GET、POST等)。 |
Content-Encoding | 文档的编码(Encode)方法。只有在解码以后才能够获得Content-Type头指定的内容类型。利用gzip压 缩文档可以显著地减小HTML文档的下载时间。Java的GZIPOutputStream能够很方便地进行gzip压缩,但只有Unix上的 Netscape和Windows上的IE 四、IE 5才支持它。所以,Servlet应该经过查看Accept-Encoding头(即request.getHeader(“Accept- Encoding”))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其余浏览器返回普通页面。 |
Content-Length | 表示内容长度。只有当浏览器使用持久HTTP链接时才须要这个数据。若是你想要利用持久链接的优点,能够把输出文档写入 ByteArrayOutputStram,完成后查看其大小,而后把该值放入Content-Length头,最后经过 byteArrayStream.writeTo(response.getOutputStream()发送内容。 |
Content-Type | 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但一般须要显式地指定为text/html。因为常常要设置Content-Type,所以HttpServletResponse提供了一个专用的方法setContentTyep。 |
Date | 当前的GMT时间。你能够用setDateHeader来设置这个头以免转换时间格式的麻烦。 |
Expires | 应该在何时认为文档已通过期,从而再也不缓存它? |
Last-Modified | 文档的最后改动时间。客户能够经过If-Modified-Since请求头提供一个日期,该请求将被视为一个条件 GET,只有改动时间迟于指定时间的文档才会返回,不然返回一个304(Not Modified)状态。Last-Modified也可用setDateHeader方法来设置。 |
Location | 表示客户应当到哪里去提取文档。Location一般不是直接设置的,而是经过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。 |
Refresh | 表示浏览器应该在多少时间以后刷新文档,以秒计。除了刷新当前文档以外,你还能够经过setHeader(“Refresh”, “5; URL=http://host/path”)让浏览器读取指定的页面。 注 意这种功能一般是经过设置HTML页面HEAD区的<META HTTP-EQUIV=”Refresh” CONTENT=”5;URL=http://host/path”>实现,这是由于,自动刷新或重定向对于那些不能使用CGI或Servlet的 HTML编写者十分重要。可是,对于Servlet来讲,直接设置Refresh头更加方便。注意Refresh的意义是“N秒以后刷 新本页面或访问指定页面”,而不是“每隔N秒刷新本页面或访问指定页面”。所以,连续刷新要求每次都发送一个Refresh头,而发送204状态代码则可 以阻止浏览器继续刷新,不论是使用Refresh头仍是<META HTTP-EQUIV=”Refresh” …>。注意Refresh头不属于HTTP 1.1正式规范的一部分,而是一个扩展,但Netscape和IE都支持它。 |
Server | 服务器名字。Servlet通常不设置这个值,而是由Web服务器本身设置。 |
Set-Cookie | 设置和页面关联的Cookie。Servlet不该使用response.setHeader(“Set-Cookie”, …),而是应使用HttpServletResponse提供的专用方法addCookie。参见下文有关Cookie设置的讨论。 |
WWW-Authenticate | 客户应该在Authorization头中提供什么类型的受权信息?在包含401(Unauthorized)状态行的 应答中这个头是必需的。例如,response.setHeader(“WWW-Authenticate”, “BASIC realm=\”executives\”")。 注意Servlet通常不进行这方面的处理,而是让Web服务器的专门机制来控制受密码保护页面的访问(例如.htaccess)。 |
1.帮助主页被各大搜索引擎登陆;
2.定义页面的使用语言;
3.自动刷新并指向新的页面;
4.实现网页转换时的动画效果;
5.网页定级评价;
6.控制页面缓冲;
7.控制网页显示的窗口。
meta 的属性有两种:name和http-equiv。
name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎全部的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和keyWords(分类关键词),因此应该给每页加一个meta值。
name 属性
1.<meta name=”Generator” contect=”editplus”>用以说明生成工具(如Microsoft FrontPage 4.0)等;
2.<meta name=”KEYWords” contect=”webjx,cnrose”>向搜索引擎说明你的网页的关键词;
3.<meta name=”Description” contect=”webjx’s blog”>告诉搜索引擎你的站点的主要内容;
4.<meta name=”Author” contect=”webjx”>告诉搜索引擎你的站点的制做的做者;
5.<meta name=”Robots” contect=”all|none|index|noindex|follow|nofollow”>
name属性:
设定为all:文件将被检索,且页面上的连接能够被查询;
设定为none:文件将不被检索,且页面上的连接不能够被查询;
设定为index:文件将被检索;
设定为follow:页面上的连接能够被查询;
设定为noindex:文件将不被检索,但页面上的连接能够被查询;
设定为nofollow:文件将不被检索,页面上的连接能够被查询。
meta标签的http-equiv属性语法格式是:<meta http-equiv=”参数” content=”参数变量值”> ;其中http-equiv属性主要有如下几种参数:
一、Expires(期限)
说明:能够用于设定网页的到期时间。一旦网页过时,必须到服务器上从新传输。
用法:<meta http-equiv=”expires” content=”Wed, 20 Jun 2007 22:33:00 GMT”>
注意:必须使用GMT的时间格式。
二、Pragma(cache模式)
说明:禁止浏览器从本地计算机的缓存中访问页面内容
用法:<meta http-equiv=”Pragma” content=”no-cache”>
注意:这样设定,访问者将没法脱机浏览。
三、Refresh(刷新)
说明:自动刷新并指向新页面。
用法:<meta http-equiv=”Refresh” content=”2;URL=http://www.net.cn/”>
注意:其中的2是指停留2秒钟后自动刷新到URL网址。
四、Set-Cookie(cookie设定)
说明:若是网页过时,那么存盘的cookie将被删除。
用法:<meta http-equiv=”Set-Cookie” content=”cookievalue=xxx; expires=Wednesday, 20-Jun-2007 22:33:00 GMT; path=/”>
注意:必须使用GMT的时间格式。
五、Window-target(显示窗口的设定)
说明:强制页面在当前窗口以独立页面显示。
用法:<meta http-equiv=”Window-target” content=”_top”>
注意:用来防止别人在框架里调用本身的页面。
六、content-Type(显示字符集的设定)
说明:设定页面使用的字符集。
用法:<meta http-equiv=”content-Type” content=”text/html; charset=gb2312″>
七、Pics-label(网页等级评定)
用法:<meta http-equiv=”Pics-label” contect=”">网页等级评定
说明:在IE的internet选项中有一项内容设置,能够防止浏览一些受限制的网站,而网站的限制级别就是经过meta属性来设置的。
还有Page_Enter、Page_Exit……
补充:
设定进入页面时的特殊效果<meta http-equiv=”Page-Enter” contect=”revealTrans(duration=1.0,transtion= 12)”>
设定离开页面时的特殊效果<meta http-equiv=”Page-Exit” contect=”revealTrans(duration=1.0,transtion= 12)”>
Duration的值为网页动态过渡的时间,单位为秒。
Transition是过渡方式,它的值为0到23,分别对应24种过渡方式。以下表:
0 盒状收缩 1 盒状放射
2 圆形收缩 3 圆形放射
4 由下往上 5 由上往下
6 从左至右 7 从右至左
8 垂直百叶窗 9 水平百叶窗
10 水平格状百叶窗 11垂直格状百叶窗
12 随意溶解 13从左右两端向中间展开
14从中间向左右两端展开 15从上下两端向中间展开
16从中间向上下两端展开 17 从右上角向左下角展开
18 从右下角向左上角展开 19 从左上角向右下角展开
20 从左下角向右上角展开 21 水平线状展开
22 垂直线状展开 23 随机产生一种过渡方式
上面的http-equiv这些值咱们均可以在header函数中使用,其中有一个属性content-type咱们常常看到,那么content-type究竟有那些值呢?
四.Content-Type一览