html中的Keep-alive

<?php
//http认证
if(!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate:Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');

    echo 'Text to send if user hits Cancel button';

    exit;
}else{
    echo "<p>Hello{$_SERVER['PHP_AUTH_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your passwrod.</p>";
}


/*
一些https和http的知识
https
超文本传输安全协议(缩写:HTTPS,阴雨Hypertext Transfer Protocol|Secure)是超文本传输协议和SSL/TLS的组合,用以提供加密通讯及对网络服务器身份的鉴定.
HTTPS经常被用于万维网上的交易支付和企业信息系统中敏感信息的传输.

HTTPS的主要信息是不安全的网络上面创建-安全协议,并可使用适当的加密套件和服务器整数可被验证且被信任的时,对窃听和中间人攻击提供合理的保护.

HTTPS连接可被信任:
1.用户相信他们的浏览器正确实现了HTTPS且安装好了正确的整数办法
2.用户相信证书颁发结构仅信任合法的网站
3.被访问的网站提供了一个有效的证书,意思就是,他是一个被信任的证书颁发机构签发的.
4.该证书正确的验证了被访问的网站
5.或者互联网上相关的节点是值得信任的,或者用户相信本协议的加密层(TLS或SSL)不能被窃听.

http和https的区别:
Http起始默认使用的端口是80.HTTPS的URL由"https://"起始默认的端口为443

HTTPS不能防止网络蜘蛛的抓取.
在某些情形下,被加密资源的URL可以通过截取获取请求和响应的大小推到.

下面是一个HTTP客户端与服务器之间会话的例子,运行www.google.com:80

GET / HTTP/1.1
Host:www.google.com

服务器应答:

HTTP /1.1 200 OK
Content-Length: 3059
Server:GWS/2.0
Date: Sat ,11 Jan 2003
Content-Type:text/html
Cache-control:private
Set-Cookie:PREF=ID=73d4adkdkd
Connection:keep-alive

+---------------------------------------------------------------------------------------+
什么是Keep-alive模式?

我们知道http采用"请求-应答"模式,当使用普通模式,即keepalive模式时,每个请求/应答客户和服务器都要建立一个连接.完成以后立即断开(http协议为无连接的协议).当使用keep-alive模式(又叫做持久连接,连接重用)时,keep-alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求后,keep-alive功能避免了建立或者重新连接.

其中http1.0中默认是关闭的,需要在Http头中加入"Conection:Keep-alive"才能启用Keep-alive;http1.1中默认是启用Keep-alive,如果加入了"Connection:close:",才关闭.目前大部分的浏览器使用的是http1.1协议,也就是说默认都会发起Keep-alive的连接请求了,所有是否能够完成一个完整的Keep-alive连接就要看服务器的设置情况了.

从上面看到,启用Keep-alive模式肯定更高效,性能更高,因为避免了建立/释放连接的开销.

单客户端与任何服务器或代理之间的连接数不应该超过2个.一个代理与其他服务器或代码中不应该超过2*N的活跃并发连接.这是为了提高HTTP响应时间,避免使用拥塞.(冗余的连接并不能代码执行性能的提升)


keep-alive模式下,客户端如何判断请求所得到的响应数据已经接收完成(或者说已经知道了服务发生完成)?我们已经知道了,keep-alive模式发送完数据http不自动断开连接.所有不能再使用返回EOF来判断.


使用消息首部字段Content-Length
故名思意,Content-Type表示实体内容长度,客户端(服务器)可以提供这个值来判断数据是否接收完成.但是如果消息中没有Content-Length,那该如何判断呢?又在什么情况下会没有Connect-Length


使用消息内容部首字段?
当客户端向服务器请求一个静态页面或者一张图片时,服务器可以很清楚的知道内容的大小,然后通过Content-Length消息首部字段告诉客户端需要接受多少数据.但是如果是动态页面等时,服务器是不可能预先知道内容大小,这时候就可以使用Transfer-Encoding:chunk模式来传递数据了.即如果要一边产生数据,一边发送给客户端,服务器就要使用"Transfer-Encoding:chunked"这样的方式来代替Content-Length.


HTTP头部字段总结:
1.Accept:告诉web服务器都接受什么介质类型?
 */ * 表示任何类型
 type/*表示给类型下的所有子类型,type/sub-type
 2.Acccept-CHarsrt:浏览器申明自己接受的字符集合,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate)
 Accept-Language:浏览器申明自己接收的语言
 语言跟字符集的区别:中文是语言,中文有多种字符集,比如big5,gb2312,gbk等等.

 3.Accept-Ranges:WEB服务器表明自己是否可以接受获取某某个实体的一部分(比如文件的一部分请求).bytes:表示接受,none:表示不接受

 4.Age:当代理服务器用自己缓存的实体去响应请求的时候,用该头部表明该实体从产生到现在经过多长时间.

 5.Authorization:当客户端接收到来自WEB服务器的WWW-Authenticate响应的时,用该头部来回应自己的身份验证信息给WEB服务器.

 6.Cache-Control:请求:no-cache(不要缓存的实体,要求现在从WEB服务器去取)
 max-age:只接受Age值小于max-age值,并且没有过期现象
 max-stale:可以接受过去的对象,但是过期时间必须要小于max-stale值
 min-fresh:接受其新鲜生命周期大于其当前Age跟min-fresh值之和的缓存对象.
 响应:public(可以用Cached内容回应任何用户)
 private (只能用缓存内容回应先前该内容的那个用户)
 no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端
 max-age:本响应包含的对象的过期时间
 ALL:no-store:不允许缓存

 7.Connection:请求:close(告诉web服务器或者代理服务器,在完成本次请求的响应后,断开连接,不要等待本此连接的后续请求了)
 keepalive告诉WEB服务器或者代理WEB服务器,在完成本次请求的响应后,保持连接,等待本次的后续请求.
 响应;close(连接已经关闭)
 keepalive:连接保持着,在等待本次连接后的后续请求
 keep-alive:如果浏览器请求保持连接,则该头部表明希望WEB服务器保持连接多长时间(秒).例如:keep-alive:300

 Content-ncoding:WEB服务器表明了自己用压缩方法来压缩响应中的对象.例如:Content-Encoding:gzip

 Content-Language:WEB服务器告诉浏览器自己响应的对象的语言

 Content-Lenth:WEB服务器告诉浏览器自己响应的对象的长度.例如Content-Length:26012
 Content-Range:WEB服务器表明该响应包含的部分对象作为整个对象的哪个部分.例如:Content-Range:

 Content-Type:WEB服务器告诉浏览器自己响应的对象的类型.例如Content-Type:application/xml

 ETag:就是一个对象比如URL的标志值.就一个对象而言,比如一个html文件.如果修改了,其Etag也会别修改.所以Etag的作用跟Last-Modified的作用差不多.主要提供WEB服务器判断一个i额对象是否改变了.

 Expired:WEB服务器表明该实体将在什么时候过期,对于过期了的对象,只有跟WEB服务器验证了其有效性后才能响应客户请求.是HTTP/1.0的头部.例如:Expires:Sat,23 May 2009 10:02:12 GMT

 Host:客户端指定自己想访问的WEB服务器的域名IP地址和端口号,例如Host:rss.sina.com.cn

 if-Match:如果对爱过你的Etag没有改变,其实就意味着对象没有改变,才执行请求动作.
 
 if-None-Match:如果对象的ETag改变了,其实就意味着对象也改变了,才执行请求的动作

 if-Modified-Since:如果请求的对象在该头部修改时间之后修改了,才执行请求的动作(比如返回对象),否则返回代码304,告诉浏览器该对象没有修改.例如:if-Modified-Since:Thu.10Apr 2008 09:14 GMT
 

if-Unmodified-Since:如果请求的对象在该头部指定的时间之后没修改过,才执行请求的动作(比如返回对象)

if-Range:浏览器告诉WEB服务器,如果我请求的对象没有改变,就把我缺少的部分给我,如果对象改变了,就把整个对象给我.浏览器通过发送请求对象的ETag或者自己所知道的最后修改时间给WEB服务器,让其判断对象是否是改变了,总是跟Range头部一起使用.
 

22、 Location:WEB 服务器告诉浏览器,试图访问的对象已经被移到别的位置了,到该头部指定的位置去取。例如:Location:http://i0.sinaimg.cn/dy/deco/2008/0528/sinahome_0803_ws_005_text_0.gif
 23、 Pramga:主要使用 Pramga: no-cache,相当于 Cache-Control: no-cache。例如:Pragma:no-cache
    * 24、 Proxy-Authenticate: 代理服务器响应浏览器,要求其提供代理身份验证信息。Proxy-Authorization:浏览器响应代理服务器的身份验证请求,提供自己的身份信息。
    * 25、 Range:浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。例如:Range: bytes=1173546-
    * 26、 Referer:浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL。例如:Referer:http://www.sina.com/
    * 27、 Server: WEB 服务器表明自己是什么软件及版本等信息。例如:Server:Apache/2.0.61 (Unix)
    * 28、 User-Agent: 浏览器表明自己的身份(是哪种浏览器)。例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.14) Gecko/20080404 Firefox/2、0、0、14
    * 29、 Transfer-Encoding: WEB 服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎样的编码,比如是否分块(chunked)。例如:Transfer-Encoding: chunked
    * 30、 Vary: WEB服务器用该头部的内容告诉 Cache 服务器,在什么条件下才能用本响应所返回的对象响应后续的请求。假如源WEB服务器在接到第一个请求消息时,其响应消息的头部为:Content- Encoding: gzip; Vary: Content-Encoding那么 Cache 服务器会分析后续请求消息的头部,检查其 Accept-Encoding,是否跟先前响应的 Vary 头部值一致,即是否使用相同的内容编码方法,这样就可以防止 Cache 服务器用自己 Cache 里面压缩后的实体响应给不具备解压能力的浏览器。例如:Vary:Accept-Encoding
    * 31、 Via: 列出从客户端到 OCS 或者相反方向的响应经过了哪些代理服务器,他们用什么协议(和版本)发送的请求。当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添 加 Via 头部,并填上自己的相关信息,当下一个代理服务器收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via 头部,并把自己的相关信息加到后面,以此类推,当 OCS 收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。例如:Via:1.0 236.D0707195.sina.com.cn:80 (squid/2.6.STABLE13)

===============================================================================
HTTP 请求消息头部实例:
Host:rss.sina.com.cn
User-Agent:Mozilla/5、0 (Windows; U; Windows NT 5、1; zh-CN; rv:1、8、1、14) Gecko/20080404 Firefox/2、0、0、14
Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0、9,text/plain;q=0、8,image/png,*/*;q=0、5
Accept-Language:zh-cn,zh;q=0、5
Accept-Encoding:gzip,deflate
Accept-Charset:gb2312,utf-8;q=0、7,*;q=0、7
Keep-Alive:300
Connection:keep-alive
Cookie:userId=C5bYpXrimdmsiQmsBPnE1Vn8ZQmdWSm3WRlEB3vRwTnRtW &lt;– Cookie
If-Modified-Since:Sun, 01 Jun 2008 12:05:30 GMT
Cache-Control:max-age=0


posted @ 2012-09-25 13:39  sgsheg  阅读(1184)  评论(0编辑  收藏  举报