??xml version="1.0" encoding="utf-8" standalone="yes"?> 清零取位要用与,某位|一可用?/p>
若要取反和交换,轻轻松松用异?/p>
UMq算 要点 1 它们都是双目q算W,两个q算分量都是整ŞQ结果也是整形?/p>
2 "<<" 左移Q右边空出的位上?Q左边的位将从字头挤掉,其值相当于??/p>
3 ">>"右移Q右边的位被挤掉。对于左边移出的IZQ如果是正数则空位补0Q若敎ͼ可能?或补1Q这取决于所用的计算机系l?/p>
4 ">>>"q算W,双的位被挤掉,对于左边Ud的空位一概补??/p>
位运符的应?(源操作数s 掩码mask) (1) 按位?- & 1 清零特定?(mask中特定位|?Q其它位?Qs=s&mask) 2 取某C指定?(mask中特定位|?Q其它位?Qs=s&mask) (2) 按位?- | 常用来将源操作数某些位置1Q其它位不变?(mask中特定位|?Q其它位? s=s|mask) (3) 位异?- ^ 1 使特定位的值取?(mask中特定位|?Q其它位? s=s^mask) 2 不引入第三变量,交换两个变量的?(?a=a1,b=b1) ??nbsp; ??nbsp; 操作后状?/p>
a=a1^b1 a=a^b a=a1^b1,b=b1 b=a1^b1^b1 b=a^b a=a1^b1,b=a1 a=b1^a1^a1 a=a^b a=b1,b=a1 二进制补码运公式: -x = ~x + 1 = ~(x-1) ~x = -x-1 -(~x) = x+1 ~(-x) = x-1 x+y = x - ~y - 1 = (x|y)+(x&y) x-y = x + ~y + 1 = (x|~y)-(~x&y) x^y = (x|y)-(x&y) x|y = (x&~y)+y x&y = (~x|y)-~x x==y: ~(x-y|y-x) x!=y: x-y|y-x x< y: (x-y)^((x^y)&((x-y)^x)) x<=y: (x|~y)&((x^y)|~(y-x)) x< y: (~x&y)|((~x|y)&(x-y))//无符号x,y比较 x<=y: (~x|y)&((x^y)|~(y-x))//无符号x,y比较 应用举例 (1) 判断int型变量a是奇数还是偶?nbsp; a&1 = 0 偶数 a&1 = 1 奇数 (2) 取int型变量a的第k?(k=0,1,2……sizeof(int))Q即a>>k&1 (3) int型变量a的第k位清0Q即a=a&~(1<<k) (4) int型变量a的第k位置1Q?即a=a|(1<<k) (5) int型变量@环左Ukơ,即a=a<<k|a>>16-k (设sizeof(int)=16) (6) int型变量a循环右移kơ,即a=a>>k|a<<16-k (设sizeof(int)=16) (7)整数的^均?/p>
对于两个整数x,yQ如果用 (x+y)/2 求^均|会生溢出,因ؓ x+y 可能会大于INT_MAXQ但是我们知道它们的q_值是肯定不会溢出的,我们用如下算法: int average(int x, int y) //q回X,Y 的^均?/p>
{ return (x&y)+((x^y)>>1); } (8)判断一个整数是不是2的幂,对于一个数 x >= 0Q判断他是不?的幂 boolean power2(int x) { return ((x&(x-1))==0)&&(x!=0)Q?/p>
} (9)不用temp交换两个整数 void swap(int x , int y) { x ^= y; y ^= x; x ^= y; } (10)计算l对?/p>
int abs( int x ) { int y ; y = x >> 31 ; return (x^y)-y ; //or: (x+y)^y } (11)取模q算转化成位q算 (在不产生溢出的情况下) a % (2^n) {h?a & (2^n - 1) (12)乘法q算转化成位q算 (在不产生溢出的情况下) a * (2^n) {h?a<< n (13)除法q算转化成位q算 (在不产生溢出的情况下) a / (2^n) {h?a>> n ? 12/8 == 12>>3 (14) a % 2 {h?a & 1 (15) if (x == a) x= b; else x= a; {h?x= a ^ b ^ x; (16) x ?相反?表示?(~x+1) HTTP是一个属于应用层的面向对象的协议Q由于其捗快速的方式Q适用于分布式媒体信息系l。它?990q提出,l过几年?br />
使用与发展,得到不断地完善和扩展。目前在WWW中用的是HTTP/1.0的第六版QHTTP/1.1的规范化工作正在q行之中Q而且HTTP- 一、HTTP协议详解之URL?br />
httpQ超文本传输协议Q是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方 HTTP URL (URL是一U特D类型的URIQ包含了用于查找某个资源的够的信息)的格式如下: 二、HTTP协议详解之请求篇 httph׃部分l成Q分别是Q请求行、消息报头、请求正?br />
1、请求行以一个方法符号开_以空格分开Q后面跟着h的URI和协议的版本Q格式如下:Method Request- hҎQ所有方法全为大写)有多U,各个Ҏ的解释如下: POSTҎ要求被请求服务器接受附在h后面的数据,常用于提交表单?br />
egQPOST /reg.jsp HTTP/ (CRLF) HEADҎ与GETҎ几乎是一LQ对于HEADh的回应部分来_它的HTTP头部中包含的信息与通过 三、HTTP协议详解之响应篇 在接收和解释h消息后,服务器返回一个HTTP响应消息?/font> HTTP响应也是׃个部分组成,分别是:状态行、消息报头、响应正?br />
1、状态行格式如下Q?br />
HTTP-Version Status-Code Reason-Phrase CRLF 2、响应报头后q?/font> 3、响应正文就是服务器q回的资源的内容 四、HTTP协议详解之消息报头篇 HTTP消息由客L到服务器的请求和服务器到客户端的响应l成。请求消息和响应消息都是由开始行Q对 HTTP消息报头包括普通报头、请求报头、响应报头、实体报头?br />
每一个报头域都是由名?“Q?#8221;+I格+?l成Q消息报头域的名字是大小写无关的?/font> 1、普通报?br />
在普通报头中Q有数报头域用于所有的h和响应消息,但ƈ不用于被传输的实体,只用于传输的消息?br />
egQ?br />
Cache-Control 用于指定~存指oQ缓存指令是单向的(响应中出现的~存指o在请求中未必会出玎ͼQ且?br />
独立的(一个消息的~存指o不会影响另一个消息处理的~存机制Q,HTTP1.0使用的类似的报头域ؓPragma?br />
h时的~存指o包括Qno-cacheQ用于指C求或响应消息不能~存Q、no-store、max-age、max-stale、min- Connection普通报头域允许发送指定连接的选项。例如指定连接是q箋Q或者指?#8220;close”选项Q通知服务 2、请求报?br />
h报头允许客户端向服务器端传递请求的附加信息以及客户端自w的信息?br />
常用的请求报?br />
Accept 3、响应报?br />
响应报头允许服务器传递不能放在状态行中的附加响应信息Q以及关于服务器的信息和对Request-URI所标识 五、利用telnet观察http协议的通讯q程 实验目的及原理: 实验步骤Q?/font> 1、打开telnet 1.2 打开telnet回显功能 2、连接服务器q发送请?br />
2.1 open www.guet.edu.cn 80 //注意端口号不能省?/font> HEAD /index.asp HTTP/1.0 2.2 open www.sina.com.cn 80 //在命令提C符号下直接输入telnet www.sina.com.cn 80 3 实验l果Q?/font> 3.1 h信息2.1得到的响应是: HTTP/1.1 200 OK //h成功 //资源内容省略 3.2 h信息2.2得到的响应是: HTTP/1.0 404 Not Found //hp| 按Q意键l箋... 六?/font>HTTP协议相关技术补?/strong> 1、基Q?br />
高层协议有:文g传输协议FTP、电子邮件传输协议SMTP、域名系l服务DNS、网l新M输协议NNTP?br />
HTTP协议{?br />
中介׃U:代理(Proxy)、网?Gateway)和通道(Tunnel)Q一个代理根据URI的绝Ҏ式来接受hQ重写全?br />
或部分消息,通过 URI的标识把已格式化q的h发送到服务器。网x一个接收代理,作ؓ一些其它服?br />
器的上层Qƈ且如果必ȝ话,可以把请求翻译给下层的服务器协议。一 个通道作ؓ不改变消息的两个q接
]]>
NG(Next Generation of HTTP)的徏议已l提出?br />
HTTP协议的主要特点可概括如下Q?br />
1.支持客户/服务器模式?br />
2.单快速:客户向服务器h服务Ӟ只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每U方法规定了客户与服
务器联系的类型不同。由于HTTP协议单,使得HTTP服务器的E序规模,因而通信速度很快?br />
3.灉|QHTTP允许传输Lcd的数据对象。正在传输的cd由Content-Type加以标记?br />
4.无连接:无连接的含义是限制每ơ连接只处理一个请求。服务器处理完客LhQƈ收到客户的应{后Q即断开q接。采用这U方
式可以节省传输时间?br />
5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺状态意味着如果后箋处理需要前面的信息Q则
它必重传,q样可能D每次q接传送的数据量增大。另一斚wQ在服务器不需要先前信息时它的应答p快?/font>
式,HTTP1.1版本中给ZU持l连接的机制Q绝大多数的Web开发,都是构徏在HTTP协议之上的Web应用?br />
http://host[":"port][abs_path]
http表示要通过HTTP协议来定位网l资源;host表示合法的InternetL域名或者IP地址Qport指定一个端口号Q?br />
为空则用缺省端?0Qabs_path指定h资源的URIQ如果URL中没有给出abs_pathQ那么当它作求URI
Ӟ必须?#8220;/”的Ş式给出,通常q个工作览器自动帮我们完成?br />
eg:
1、输入:www.guet.edu.cn
览器自动{换成Q?/font>http://www.guet.edu.cn/
2、http:192.168.0.116:8080/index.jsp
URI HTTP-Version CRLF
其中 Method表示hҎQRequest-URI是一个统一资源标识W;HTTP-Version表示h的HTTP协议版本Q?br />
CRLF表示回R和换行(除了作ؓl尾的CRLF外,不允许出现单独的CR或LF字符Q?br />
GET h获取Request-URI所标识的资?br />
POST 在Request-URI所标识的资源后附加新的数据
HEAD h获取由Request-URI所标识的资源的响应消息报头
PUT h服务器存储一个资源,q用Request-URI作ؓ其标?br />
DELETE h服务器删除Request-URI所标识的资?br />
TRACE h服务器回送收到的h信息Q主要用于测试或诊断
CONNECT 保留来使用
OPTIONS h查询服务器的性能Q或者查询与资源相关的选项和需?br />
应用举例Q?br />
GETҎQ在览器的地址栏中输入|址的方式访问网|Q浏览器采用GETҎ向服务器获取资源Q?br />
eg:GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbit,... (CRLF)
...
HOST:www.guet.edu.cn (CRLF)
Content-Length:22 (CRLF)
Connection:Keep-Alive (CRLF)
Cache-Control:no-cache (CRLF)
(CRLF) //该CRLF表示消息报头已经l束Q在此之前ؓ消息报头
user=jeffrey&pwd=1234 //此行以下为提交的数据
GETh所得到的信息是相同的。利用这个方法,不必传输整个资源内容Q就可以得到Request-URI所标识的资
源的信息。该Ҏ常用于测试超链接的有效性,是否可以讉KQ以及最q是否更新?br />
2、请求报头后q?br />
3、请求正??
其中QHTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase
表示状态代码的文本描述?br />
状态代码有三位数字l成Q第一个数字定义了响应的类别,且有五种可能取|
1xxQ指CZ?-表示h已接Ӟl箋处理
2xxQ成?-表示h已被成功接收、理解、接?br />
3xxQ重定向--要完成请求必进行更q一步的操作
4xxQ客L错误--h有语法错误或h无法实现
5xxQ服务器端错?-服务器未能实现合法的h
常见状态代码、状态描q、说明:
200 OK //客户端请求成?br />
400 Bad Request //客户端请求有语法错误Q不能被服务器所理解
401 Unauthorized //h未经授权Q这个状态代码必dWWW-Authenticate?nbsp; //头域一起?
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //h资源不存在,egQ输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客L的请求,一D|间后Q?nbsp; //可能恢复正常
egQHTTP/1.1 200 OK QCRLFQ?/font>
于请求消息,开始行是h行,对于响应消息Q开始行是状态行Q,消息报头Q可选)Q空行(只有
CRLF的行Q,消息正文Q可选)l成?/font>
fresh、only-if-cached;
响应时的~存指o包括Qpublic、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate?br />
max-age、s-maxage.
egQؓ了指CIE览器(客户端)不要~存面Q服务器端的JSPE序可以~写如下Qresponse.sehHeader
("Cache-Control","no-cache");
//response.setHeader("Pragma","no-cache");作用相当于上qC码,通常两?/合用
q句代码在发送的响应消息中设|普通报头域QCache-Control:no-cache
Date普通报头域表示消息产生的日期和旉
器,在响应完成后Q关闭连?br />
Accepth报头域用于指定客L接受哪些cd的信息。egQAcceptQimage/gifQ表明客L希望接受GIF图象
格式的资源;AcceptQtext/htmlQ表明客L希望接受html文本?br />
Accept-Charset
Accept-Charseth报头域用于指定客L接受的字W集。egQAccept-Charset:iso-8859-1,gb2312.如果在请求消
息中没有讄q个域,~省是Q何字W集都可以接受?br />
Accept-Encoding
Accept-Encodingh报头域类gAcceptQ但是它是用于指定可接受的内容编码。egQAccept-Encoding:gzip.deflate.如果h消息中没有设|这个域服务器假定客L对各U内容编码都可以接受?br />
Accept-Language
Accept-Languageh报头域类gAcceptQ但是它是用于指定一U自然语a。egQAccept-Language:zh-cn.如果?br />
求消息中没有讄q个报头域,服务器假定客L对各U语a都可以接受?br />
Authorization
Authorizationh报头域主要用于证明客L有权查看某个资源。当览器访问一个页面时Q如果收到服务器
的响应代码ؓ401Q未授权Q,可以发送一个包含Authorizationh报头域的hQ要求服务器对其q行验证?br />
HostQ发送请求时Q该报头域是必需的)
Hosth报头域主要用于指定被h资源的InternetL和端口号Q它通常从HTTP URL中提取出来的QegQ?br />
我们在浏览器中输入:http://www.guet.edu.cn/index.html
览器发送的h消息中,׃包含Hosth报头域,如下Q?br />
HostQ?/font>www.guet.edu.cn
此处使用~省端口?0Q若指定了端口号Q则变成QHostQ?/font>www.guet.edu.cn:指定端口?br />
User-Agent
我们上网登陆论坛的时候,往往会看C些欢q信息,其中列出了你的操作系l的名称和版本,你所使用?br />
览器的名称和版本,q往往让很多h感到很神奇,实际上,服务器应用程序就是从User-Agentq个h报头
域中获取到这些信息。User-Agenth报头域允许客L它的操作系l、浏览器和其它属性告诉服务器。不
q,q个报头域不是必需的,如果我们自己~写一个浏览器Q不使用User-Agenth报头域,那么服务器端?br />
无法得知我们的信息了?br />
h报头举例Q?br />
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-
powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)
的资源进行下一步访问的信息?br />
常用的响应报?br />
Location
Location响应报头域用于重定向接受者到一个新的位|。Location响应报头域常用在更换域名的时候?br />
Server
Server响应报头域包含了服务器用来处理请求的软g信息。与User-Agenth报头域是相对应的。下面是
Server响应报头域的一个例子:
ServerQApache-Coyote/1.1
WWW-Authenticate
WWW-Authenticate响应报头域必被包含?01Q未授权的)响应消息中,客户端收?01响应消息时候,q发
送Authorization报头域请求服务器对其q行验证Ӟ服务端响应报头就包含该报头域?br />
egQWWW-Authenticate:Basic realm="Basic Auth Test!" //可以看出服务器对h资源采用的是基本验证机制?/font>
4、实体报?br />
h和响应消息都可以传送一个实体。一个实体由实体报头域和实体正文l成Q但q不是说实体报头域和实体正文要在一起发送,可以只发送实体报头域。实体报头定义了关于实体正文QegQ有无实体正文)和请求所标识的资源的元信息?br />
常用的实体报?br />
Content-Encoding
Content-Encoding实体报头域被用作媒体cd的修饰符Q它的值指CZ已经被应用到实体正文的附加内容的~?br />
码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用相应的解码机制。Content-Encodingq样?br />
于记录文档的压羃ҎQegQContent-EncodingQgzip
Content-Language
Content-Language实体报头域描qC资源所用的自然语言。没有设|该域则认ؓ实体内容提供给所有的语言
阅读
者。egQContent-Language:da
Content-Length
Content-Length实体报头域用于指明实体正文的长度Q以字节方式存储的十q制数字来表C?br />
Content-Type
Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。egQ?br />
Content-Type:text/html;charset=ISO-8859-1
Content-Type:text/html;charset=GB2312
Last-Modified
Last-Modified实体报头域用于指C源的最后修Ҏ期和旉?br />
Expires
Expires实体报头域给出响应过期的日期和时间。ؓ了让代理服务器或览器在一D|间以后更新缓存中(再次
讉K曾访问过的页面时Q直接从~存中加载,~短响应旉和降低服务器负蝲)的页面,我们可以使用Expires
实体报头域指定页面过期的旉。egQExpiresQThuQ?5 Sep 2006 16:23:12 GMT
HTTP1.1的客L和缓存必d其他非法的日期格式(包括0Q看作已l过期。egQؓ了让览器不要缓存页
面,我们也可以利用Expires实体报头域,讄?Qjsp中程序如下:response.setDateHeader("Expires","0");
利用MS的telnet工具Q通过手动输入httph信息的方式,向服务器发出hQ服务器接收、解释和接受h
后,会返回一个响应,该响应会在telnetH口上显C出来,从而从感性上加深对http协议的通讯q程的认识?/font>
1.1 打开telnet
q行-->cmd-->telnet
set localecho
Host:www.guet.edu.cn
/*我们可以变换hҎ,h桂林电子主页内容,输入消息如下*/
open www.guet.edu.cn 80
GET /index.asp HTTP/1.0 //h资源的内?br />
Host:www.guet.edu.cn
HEAD /index.asp HTTP/1.0
Host:www.sina.com.cn
Server: Microsoft-IIS/5.0 //web服务?br />
Date: Thu,08 Mar 200707:17:51 GMT
Connection: Keep-Alive
Content-Length: 23330
Content-Type: text/html
Expries: Thu,08 Mar 2007 07:16:51 GMT
Set-Cookie: ASPSESSIONIDQAQBQQQB=BEJCDGKADEDJKLKKAJEOIMMH; path=/
Cache-control: private
Date: Thu, 08 Mar 2007 07:50:50 GMT
Server: Apache/2.0.54 <Unix>
Last-Modified: Thu, 30 Nov 2006 11:35:41 GMT
ETag: "6277a-415-e7c76980"
Accept-Ranges: bytes
X-Powered-By: mod_xlayout_jh/0.0.1vhs.markII.remix
Vary: Accept-Encoding
Content-Type: text/html
X-Cache: MISS from zjm152-78.sina.com.cn
Via: 1.0 zjm152-78.sina.com.cn:80<squid/2.6.STABLES-20061207>
X-Cache: MISS from th-143.sina.com.cn
Connection: close
失去了跟L的连?/font>
4 .注意事项Q?、出现输入错误,则请求不会成功?br />
2、报头域不分大小写?br />
3、更׃步了解HTTP协议Q可以查看RFC2616Q在http://www.letf.org/rfc上找到该文g?br />
4、开发后台程序必L握http协议
之间的中l点。当通讯需要通过一个中?例如Q防火墙{?或者是中介不能识别消息的内ҎQ通道l常被
用?br />
代理(Proxy)Q一个中间程序,它可以充当一个服务器Q也可以充当一个客hQؓ其它客户机徏立请求?br />
h是通过可能的翻译在内部或经q传递到其它?服务器中。一个代理在发送请求信息之前,必须解释q且
如果可能重写它。代理经怽为通过防火墙的客户机端的门P代理q可以作Z个帮助应用来通过协议?
理没有被用户代理完成的请求?br />
|关(Gateway)Q一个作为其它服务器中间媒介的服务器。与代理不同的是Q网x受请求就好象对被h?br />
资源来说它就是源服务器;发出h的客hq没有意识到它在同网x交道?br />
|关l常作ؓ通过防火墙的服务器端的门P|关q可以作Z个协议翻译器以便存取那些存储在非
HTTPpȝ中的资源?br />
通道(Tunnel)Q是作ؓ两个q接中的中介程序。一旦激z,通道便被认ؓ不属于HTTP通讯Q尽通道可能
是被一个HTTPh初始化的。当被中l?的连接两端关闭时Q通道便消失。当一个门?Portal)必须存在或中?br />
(Intermediary)不能解释中的通讯旉道被经怋用?br />
2、协议分析的优势—HTTP分析器检网l攻?br />
以模块化的方式对高层协议q行分析处理Q将是未来入侉|的方向?br />
HTTP及其代理的常用端?0?128?080在network部分用port标签q行了规?br />
3、HTTP协议Content Lenth限制漏洞D拒绝服务d
使用POSTҎӞ可以讄ContentLenth来定义需要传送的数据长度Q例如ContentLenth:999999999Q在传送完
成前Q内 存不会释放,d者可以利用这个缺Pq箋向WEB服务器发送垃圾数据直至WEB服务器内存?br />
。这U攻L法基本不会留下痕qV?br />
http://www.cnpaf.net/Class/HTTP/0532918532667330.html
4、利用HTTP协议的特性进行拒l服务攻ȝ一些构?br />
服务器端忙于处理d者伪造的TCPq接h而无暇理睬客L正常hQ毕竟客L的正常请求比率非怹
)Q此时从正常客户的角度看来,服务器失d应,q种情况我们UCQ服务器端受CSYNFlooddQSYNz水dQ?br />
而Smurf、TearDrop{是利用ICMP报文来Flood和IP片d的。本文用“正常q接”的方法来产生拒绝服务d?br />
19端口在早期已l有人用来做Chargend了,即Chargen_Denial_of_ServiceQ但是!他们用的Ҏ是在两台
Chargen 服务器之间生UDPq接Q让服务器处理过多信息而DOWN掉,那么Q干掉一台WEB服务器的条g?br />
必须?个:1.有Chargen服务2.有HTTP 服务
ҎQ攻击者伪造源IPlN台Chargen发送连接请求(ConnectQ,Chargen接收到连接后׃q回每秒72字节?br />
字符(实际上根据网l实际情况,q个速度更快Q给服务器?br />
5、Http指纹识别技?br />
Http指纹识别的原理大致上也是相同的:记录不同服务器对Http协议执行中的微小差别q行识别.Http指纹?br />
别比TCP/IP堆栈指纹识别复杂??理由是定制Http服务器的配置文g、增加插件或lg使得更改Http的响?br />
信息变的很容?q样使得识别变的困难Q然而定制TCP/IP堆栈的行?需要对核心层进行修?所以就Ҏ?br />
?
要让服务器返回不同的Banner信息的设|是很简单的,象Apacheq样的开放源代码的Http服务?用户可以?br />
源代码里修改Banner信息,?后重起Http服务q效了Q对于没有公开源代码的Http服务器比如微软的IIS或?br />
是Netscape,可以在存放Banner信息的Dll文g中修 ?相关的文章有讨论?q里不再赘述,当然q样的修改的效果
q是不错?另外一U模pBanner信息的方法是使用插g?br />
常用试hQ?br />
1QHEAD/Http/1.0发送基本的Httph
2QDELETE/Http/1.0发送那些不被允许的h,比如Deleteh
3QGET/Http/3.0发送一个非法版本的Http协议h
4QGET/JUNK/1.0发送一个不正确规格的Http协议h
Http指纹识别工具Httprint,它通过q用l计学原?l合模糊的逻辑学技?能很有效的确定Http服务器的cd.?br />
可以被用来收集和分析不同Http服务器生的{?br />
6、其他:Z提高用户使用览器时的性能Q现代浏览器q支持ƈ发的讉K方式Q浏览一个网|同时建立
多个q接Q以q速获得一个网上的多个图标,q样能更快速完成整个网늚传输?br />
HTTP1.1中提供了q种持箋q接的方式,而下一代HTTP协议QHTTP-NG更增加了有关会话控制、丰富的内容
协商{方式的支持Q来提供
更高效率的连接?/font>
]]>
q程本n是一个动态的实体Q所以它本n在运行期间也通过创徏q程pȝ调用Qƈ且可以创建多个新q程Q对于这句话我同样用图解的方式来做个简单说明:
1. 父进E(l箋执行Q和子进Eƈ行的执行Q?/span> 2. 父进E等待部分或者全部子q程l止执行Q?/span> 而新q程的地址I间也存在两U可能: 1. 子进E是父进E的一?/span>COPY了; 2. 载入一个程序来q行Q?/span> 到这里就有点感觉Erlang的进E思想端倪了Q开始我咋看感觉有点象,但是深入后p得确实就是到q个思想才Ş成了ErlangE序语言的意义本质,个h揣度啊,哈哈Q既然有那么Ҏ想的感觉,那我们就开始进入探讨阶D了。也正是下面卛_要讲到的问题才印证一句话Q技术的本质q存留在单事物之上(个hȝQ哈哈)?/span> q程间通信有两U本质的方式Q?/span> 1. ׃n~冲区提供通信Q?/span> 2. 消息传递; 大家有没有认真看C面的四个?#8220;消息传?#8221;Q对没错是消息传递!那这里我感觉是否就是这里和Erlang的语a所谈到的消息传递呢Q尽一个处于操作系l别,而另一处于语言U别Q但是初看给我的感觉是原理是否一致呢Q呵呵,那就让我们来看看OSU别的进E间通信本质起了?/span> 消息pȝ的功能是允许q程与其他进E之间通讯不必借助׃n数据Q他们各自独立。而这里要说到一个概念,什么是IPC? 如果我们先不看它定义Q而了解具体做法,看是一个什么效果?/span>
到这里ؓ止是不是感觉又和我们说的Erlang非常cM呢?真的没错。。。那ql往下看看它到底如何而做了。有以下几种Ҏ实现?/span>Send/Receive操作的方法: u 直接或者间接通信 u 对称或不对称通信 u 自动或手动缓?/span> u 发?/span>copy或者引?/span> u 定长消息或者变长消?/span> Z更好的说明上面各自的特征是如何引入和体现的,使用两个典型的进E?/span>p,q作ؓ两个q程之间的通讯来加以演C?/span> q里是两个非常赤裸的而且是非常利索的通信了:
u receive(Q,message) 从进E?/span>Q中接收一个消?/span> 特点Q?/span> 1. 每对需要通信的进E之间自动徏立一条链路,q程只需要知道彼此的q程标识W(PidQ; 2. 一个连接就只连接到q两个进E; 因此q种机制在寻址上是对称的;发送者与接收者进E都必须要指明通信一斏V不q这里要谈到它的一U特例:发送者需要知道接收者,但是接收者不需要知道发送者,其原语定义ؓQ?/span> SendQ?/span>P,MessageQ?/span> 发送一个消息给PQ?/span> ReceiveQ?/span>id,MessageQ从Lq程中接受一个消息; ׃通信是一U交互行为,所以一般情冉|说我们有发送自然希望存在一个回复的交互动作Q而像q种特例无法知道它的这U情形,因此q种情况也是我们不希望所见的?/span> 间接通信中消息发送和接收则是通过邮箱Q实际中更多的是端口方式Q这里ؓ了更好理解我们比作邮方式)q行的。若把邮q成一个对象,q程可以把消息邮寄Q放|)在其中,显而易见既然能够放入自然也可以从邮箱中取Z。而每一个邮都有一个唯一的地址Q标识符Q,q程可以通过不同的邮和其它q程通信了。两个进E只有共享一个邮才可以q程通信。因此基本构建和原语定义囄如下Q?/span> SendQ?/span>A,MQ:发送消息(MessageQ给邮箱AQ?/span> ReceiveQ?/span>A,MQ:从邮?/span>A接收到消息(MQ;
1. 只有在两个进E间有一个共享邮件箱下才能两者徏立一个连接; 2. 一条链路可以连接两个或者更多的q程Q?/span> 3. 每对通信q程之间可以同时存在多个不同的链路,而且每条链\对应一个邮; 那我们来看看直接通信和间接通信最大的区别是什么?没错Q其实间接通信存在中间一个共享的邮箱Q而正是这U方式才在以后的应用中得到广泛利用。这里就联想?/span>Erlang语法的:Pid!M是否感觉很相|注:M消息通知标示WؓPid的进E操作事Ӟ而且具体在接受中也存在得C?/span>receive来获取消化了Q,在我看来它就是典型用到了这个原理机制。这里来看一道例题:假如有两个进E?/span>P1,P2?/span>P3都存在共享邮?/span>AQ而且P2?/span>P3正是?/span>A中接收。那么谁 接收?/span>P1发送来的消息呢Q图C:
对照上面说讲到的间接通信特点Q我们知道一条链路最多连接两个进E,同时最多允怓Q意选择q程来接收消息(现在q个例子中只存在P2,P3Q,所以他们两者只允许单独接收消息而不是同时接收消息。至于消息会发送给谁,q就需要系l本w来定接收者了。因此,一个邮可能ؓ一个进E或者操作系l所有,不难看出q个例子存在以下情况Q?/span> u 创徏一个新邮箱Q?/span> u 通过q个邮箱发送和接收信息Q?/span> u 删除一个邮; 接下来就开始单独讨论所谓的q个“邮箱”的单独机制能够引发的一些线索了?/span> 通过消息传送来q程通信Q这个是它本质所在。但是消息传送可能有d或者无d——同步和异步。所以这里就存在对于发送者和接收者的d或无d现象的讨ZQ对于他们有一下特点: 1. 发送进E阻塞:发送进E被dQ直到接收进E接收消息; 2. 发送进E无dQ发送进E发送消息ƈ且立L复执行; 3. 接收q程dQ接收进E被dQ知道一个消息ؓ有效Q?/span> 4. 接收q程无阻塞:接收q程获取一个有效或I消息; 以上的方式还可以l合形成?/span> 既然有阻塞和无阻塞现象,那立d以联惛_我们的邮扩展成一U管道方式呢Q没错这里就需要讲解下面的定义形成?/span> q里只想对于三个定义了解Q?/span> u 雉度:无缓冲消息系l; u 限定长度Q?/span> 自动~冲 u 无限长度Q?/span> q里单独把限定长度和无限长度提取出来定义Q?/span> 限定长度Q消息队列中存在N个消息,发送者在发送未满的队列中无d。一旦队列满则阻塞直到出现空闲空间?/span> 无线长度Q?/span>消息队列有无限个消息Q也不会d发送者?/span> 下面我们p通过q些概念扩展到程序开发中l常会遇到的实例?/span> Q待l。。。。。。) 1. q程是运行中的程序。这里我们就可以E微延下以便帮助我们记忆理解了Q?/span> 在这里我们只要抓?#8220;q动”词汇Q就不然发现q程是个动态的实体Q与之对应的是我们常说的E序Q程序而是一个静态实体了?/span>(bwQ这里突然想C前对于认?/span>EJB2中也有一个对应的概念是EntityBean?/span>SessionBeanQ它们与之对应的是一个典型的名词和动词概念了Q哈哈啰嗦了Q{回正?/span>)。那我们会想是什么来体现我们说的q程Z个动态实体呢Q立M联系产生接下来的一个特点了?/span> 2. q程不仅仅是E序代码Q它包含了当前状态。而这U状态由两个斚w来表C: u E序计数器(program counterQ?/span> u cpu中的寄存器(registersQ?/span> 是׃q程中有E序计数?/span>?span style="font-family: 宋体">指明下一条要执行的指令而且拥有一l相关的资源。这里又要l反问:到底是一个什么资源呢Q那p看下面会讲到?/span>PCB的概念了?/span> 3. q程q包含进E栈Q?/span>process stackQ?/span> 例如Q方法参敎ͼmethod parametersQ?/span>;q回地址与本地变量等 4. 两个q程可能会关联到同样的程序,刚才我们说到了所谓程序是一个静态实体。顾名思义是两个q程允许使用同样的代码段Q只是在参数不同而已。但是仍然认两个q程是独立执行的序列。例如:几个用户可能会同事运行主E序的不同拷贝一栗?/span> 注:上面是一个完整的q程状态图了。这里没有必要多说什么了Q图表给了我们一个轮廓?/span> q里是我们要讲到的q程控制块了Q对于操作系l都是需要通过PCB来表CE的。有些资料上也称作ؓQQ务控制块。对?/span>PCB的整体描q我们还是以图表的方式来说明Q这也是本h最喜欢也觉得最直观的一U理解方式了Q: PointerQ指针) Process stateQ进E状态) Process numberQ进E序列号Q?/span> Program counterQ程序计数器Q?/span> RegisterQ寄存器Q?/span> Memory limitsQ主存中受限说明Q?/span> List of open files 。。。(q里其实q有很多Q就不再一一列D了) PCB描述?/span> 既然是操作系l都需要通过q程控制块来调用q程q程Q那我们在这里D例说明下如果有两个进E结?/span>PCB是如何在CPU之中切换使用q程的。ؓ了更加清C解它们的q程Q还是老规矩用一个图表来展示两个q程分别?/span>P1,P2怎么q行的?/span> Q这个图在自qW记本上已经用笔d来了Q可是找不C个好的工P暂时攄在这Q待l画图了Q?/span> ׃我们目前接触的其实多半都是以分时pȝZ的,其目标也是ؓ了在q程之间频繁转换cpu以便׃用户与运行的E序来交互?/span> 1. q程q入pȝ后,都被攑֜队列中了Q我们称q个队列为:作业队列Q也有些书上不是q么U呼的)Q所有的q程都在q个其中?/span> 2. 处于qAq程都被保留在一个列表中——就l列?/span> 3. 一旦进E获得了CPUq且执行Q就可能发生一下某个事件存在: u q程可能发出一?/span>I/OhQ然后被攄?/span>I/O队列中; u q程也可能创Z个新的子q程q且{待它终止; u 有时候发生一个中断,Dq程?/span>CPU里移除ƈq回qA队列Q?/span> q里需要了解两个主要的概念Q?/span> 1. 长程调度Q操作系l调度程序)Q从一个池中选择q程q其载入内存中?/span> 注:咋看不是很了解,可能q里需要了解虚拟存储过E对于这个概念就比较好理解。这里大致说明下。由于过L们所使用的内存(d储器Q空间非常有限,在抢占的q程志愿中如果都x入内存中昄是不够科学,而对于我们的后备动力辅助存储器——磁盘(q里我们说是盘Q当然也?/span>3.5英寸的小盘了,呵呵Q来_可以充分考虑C用它来做个过度动态的存储器。所以这样一来我们就不需要把一个进E中所有的信息都装载到内存中,而是在需要是再来考虑换入Q而与之相反的是不需要时换ZQ?/span>bwQ?strong>q里的换?/strong>/换出如果比较频繁也就证明我们的内耗比较严重,一般称作这个叫Q抖动现象。大家有时候感兴趣的可以观察我们主机的盘灯如果在频繁的闪动就表示资源在不断换入换ZQ呵呵)。而这也就是虚拟存储的一个本质过E,当然中间需要通过逻辑转换表来q度Q在q里我们׃再具体复qC。有兴趣的可以去看看相关OS斚w的书c?/span> 2. q程调度Q?/span>CPU调度E序Q:从这些进E中选择qAq程qؓ其某个分?/span>CPU 注:说白了这里就是我们的cpu直接通过~冲通道来调用就l的E序q入q行?/span> 前面我们也谈Cq程是在CPU中来回切换运行的Q既然是一U来回切换运行那势必需要让CPU知道我们切换C一个状态执行的地址或者说切入点在哪了。这个就是ؓ什么需要一个程序计数器的功效了。那我们把这U来回切换状态,同时需要保存当前运行进E状态信息给记录下来以便下一ơ能够定位到的方式称作是——上下文转换?/span> ׃面的q样一ơ{换表q在一定程度上需要耗的g资源非常大(q里又要我强调下Q更多的信息需要你q了解一些计机l成体系l构了。希望有旉自己也ȝ一关于一个简单程序在体系中运行过E)。因此上下文转换在很大程度上取决于g的支持了?/span> 接下来要讲到的应该是最核心的也是对以后我们无论是写E序好还是学习一门新语言好,都需要很好理解的部分了。在q里也尽可能表述清楚?br />
Q待l?.....Q?/span>
当一个进E创Z个新q程Ӟ会存在两U可能的方式执行Q?/span>
q程间通信
消息传递系l?/span>
直接通信Q?/span>
u send(P,message) P发送一个消息给q程QQ?/span>
间接通信
特点Q?/span>
q里我们需要具体讨论问题的实质了:
一旦拥有邮?/span>A?span style="font-family: 宋体">q程l止Ӟ邮箱也就同时要消失,随后向该邮箱发送消息的q程׃被告知邮׃存在。这里需要强调的是作为操作系l本w来说拥有一个邮是独立的不依赖于Q何进E。所以操作系l有必要提供一U机制允怸个进E来专门做这个工作了Q那是什么工作呢Q具体有以下特征Q?/span>q程同步
~冲
]]>q程概念
q程状?br />
q程控制块(PCBQ?/span>
q程调度
调度E序
上下文{?/span>
]]>
վ֩ģ壺
Ʒ۲ӰԺþ|
ѹҹ|
ƷɫƵ߹ۿԴ
|
վɫȫ|
þþƷ|
³ѲƵ㽶|
avһ|
Ʒר|
˾þô߽ڹ|
¶|
ŷ͵ҹɫ|
˾ƷƷ|
þƷ|
ëƬav߲һ
|
ҹƷ|
avƬ롿|
һ234 |
Ļվ|
Ů˽Ƶ|
Ļaѿ|
aѹۿþav|
ĻAëƬ|
Ļ2019|
һ߹ۿƵ|
Ʒר|
һѰ|
Ʒ˾Ʒ|
պ|
ۺɫAPP|
ѹ߾Ʒһ|
ëƬƬѹۿ|
ëƬվ߹ۿ|
þۺϾžһ|
ɫͼƬС˵|
Ӱ߹ۿ|
|
þƷAVӣ|
ĻһӰԺַ|
þƵ|
þƷһ|
AVƬWWW|