嗯,利用开学的时间囫囵吞枣的刷了这本书,收益良多,整理笔记加以记忆。头发掉的越多啦,好伤心!!
书的PFD文件在最后
1,Web浏览器从Web服务器获取文件资源等信息,从而显示Web页面,像通过发送请求获取服务器资源的Web浏览器,被称为客户端。
2,Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议 )的协议作为规范,完成从客户端等一系列流程,而协议是规则的约定,可以说Web是建立在HTTP协议上的通信。
3,现已提出3项WWW构建技术。
4,网络基础TCP/IP协议簇,
10,
发送端:每经过一层增加首部,搜索端:每通过一层删除首部。
11,负责传输的IP协议:IP(Internet Protocol)网际协议位于网络层,几乎所有的网络系统都会用到IP协议,TCP/IP协议族的IP即指网际协议,IP协议的作用是把数据包传送给对方。IP地址指明了结点被分配到的地址,MAC地址是网卡所属的固定地址(物理地址)。IP地址和MAC地址进行配对。IP地址可变换,MAC地址基本不会改变。在网络层中,IP协议利用IP地址通过ARP协议(地址解析协议)解析但未解析反复获得MAC地址,最终到达IP地址所在地。在到达通信目标前的中转过程中计算机和路由器只能获得粗略的传输路线。把这种像快递的机制称为路由选择。
12,确保可靠的TCP协议:TCP位于传输层,提供可靠(准确)的字节流服务(为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理)。且能够确认数据最终是否送达。TCP协议采用三次握手的方式,发送端会与客户端进行三次握手,首先发送端发送一个带SYN标志的数据包给接受端,接受端接受到后,回传一个带SYN/ACK标志的数据包,最后发送端再回传一个ACK标志的数据包,三次握手过程中的报文是不含数据的,只包含tcp协议首部。
14,负责域名解析的DNS服务:DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议,提供域名到IP地址之间的解析服务(通过域名查找IP地址,或逆向)。计算机既可以被赋予IP地址,也可以被赋予主机名和域名。
客户端中输入域名通过DNS转换为IP地址通过TCP/IP协议在各个层中传递,到达服务器。
15,URI(通一资源标识符,Uniform Resource Locator):URI就是由某个协议方案表示的资源的定位标识符。协议方案是指资源所使用的协议类型名称,如http,ftp,mailto,telnet,file等,
16,URI用字符串标识某一互联网资源,而URL表示资源的地点(互联网上所处的位置),即URL是URI的子集。
17,URI格式:
18.RFC(征求修正意见书):制订HTTP协议技术的标准的文档。
1,HTTP协议用于客户端(请求访问文本或图像等资源的一端)和服务器端(提供资源响应的一端)之间的通信。通过请求和响应的交换达成通信。
2,请求报文是由:请求方法(GET),请求URI(/index.htm),协议版本(HTTP/1.1),可选的请求首部字(Host:hackr.jp……)段和内容实体构成的.
3,响应报文是由:协议版本(HTTP/1.1),状态码(200),原因短语(OK ),可选响应首部字段和主体构成
4,HTTP是不保存状态的协议,即无状态协议,不对响应和请求的通信进行保存管理,但是,引入Cookie技术。
5,请求URI定位资源,当客户端请求访问资源而发送请求时,URI需要将做为请求报文中的请求URI包含在内,指定请求URI的方式有很多种,可以为完整的请求URI也可以在首部字段中写明网络域名或IP地址。可以使用*来代替URI,OPTIONS * HTTP/1.1 :查询HTTP服务器支持的HTTP方法中类。
6,使用方法下达命令:向请求URI指定的资源发送请求报文时,采用称为方法的命令。方法的作用在于,可以指定请求的资源按期望产生某种行为。
7,告知服务器意图HTTP方法
GET:GET方法用来请求访问以被URI识别的资源,指定的资源经过服务器解析后返回响应内容,如果请求的资源是文本,就保持原样返回,如果如CGI,则返回经过执行后的输出结果。
POST:传输实体主体,GET方法也可以传输实的主体,但一般不用GET方法进行传输,而用POST方法。
PUT:传输文件,就像FTP协议的文件上传一样。要求在请求报文的主体中包含文件内容,然后保存到请求URI指定位置。
HEAD:获取报文首部,和GET方法一样,只是不反回报文主体部分,用于确认URI的有效性及资源更新的日期时间。
DELETE:删除文件,与PUT方法相反,DELETE方法按请求URI删除指定的资源。
OPTIONS:方法用来查询针对请求URI的资源支持的方法。
TRACE:追踪路径,让Web服务器端将之前的请求通信环回给客户端的方法。发送请求时,在Max-Forwards首部字段中填入数值。每经过一个代理服务器端就将该数字减一,当数值刚好减到0时,就停止传输。
CONNECT: 要求用隧道协议连接代理,CONNECT实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer,安全套接字)和TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经过网络隧道传输。方法格式:CONNECT 代理服务器:端口号 HTTP版本。
8、**持久连接(HTTP Persistent Connections,HTTP keep-alive,HTTP connection reuse)**方法节省通信量,只要任意一端没有明确提出断开连接,则保持TCP连接状态。建立tcp连接三次握手断开连接四次挥手。
9,管线化:持久连接使得多数请求以管线化方式(能够做到同时并行发送多个请求)发送。
10,使用Cookie的状态管理:Cookie会根据服务器端发送的响应报文的一个叫做Set-Cookie
的首部字段信息,通知客户端保存Cookie,当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送。
1,HTTP报文:用于HTTP协议交互的信息被称为HTTP报文,请求端的称请求报文,响应端的被称为响应报文,HTTP报文本身是由多行数据构成的字符串文本。
2,HTTP报文大致可分为报文首部和报文主体两块。空行划分(CR+LF),主体可选。用来传输实体主体。
3,请求报文:报文首部(请求行,请求首部字段,通用首部字段,实体首部字段,其它)+空行+报文主体。
4,响应报文:报文首部(状态行,响应首部字段,通用首部字段,实体首部字段,其他)+空行+报文主体。
5,编码提升传输速率:HTTP在传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输速率。
6,报文主体和报文实体的差异:报文主体:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。实体:作为请求或响应的有效载荷数据(补存项)被传输,其内容由实体首部和实体主体组成。
7,压缩传输的内容编码 :内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接受并负责解码。常用的内容编码:gzip,compress,deflate,identity(不进行编码)。
8, 分割发送的分块传输编码 :在实际传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面。将实体主体分成多个部分,每一块用十六进制来标记块的大小。实体主体的最后一块会使用0来标记。由接受的客户端负责解码,恢复到编码前的实体主体。
9,发送多种数据的多部分对象集合:发送邮件时可以添加文字和其他附件,这是因为采用了MINE(多用途因特网邮件扩展)机制。
多部分对象集合包括的对象:
multipart/byteranges(状态码206,响应报文包含了多个范围的内容时使用).
10,**在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。**使用boundary字符串来划分多部分对象集合指明的各类实体。在boundary字符串指定的各个实体的起始行之前插入“–”标记,而在多部分对象集合对应的最后插入“–”标记作为结束。多部分对象集合的每个部分类型中,都可以包含首部字段,可以嵌套使用首部字段。
11,内容的范围请求:指定范围发送的请求叫做范围请求,会用到首部字段Range来指定资源的byte范围。
Range:bytes = -3000,5000-10000,1200-
//开始到3000字节,5000-10000字节,12000到最后的所有子节。
针对范围请求,响应会返回状态码为206 Partial Content的响应报文。
针对多重范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文。
如果无法响应范围请求,返回状态码200 OK和完整的实体内容。
12,内容协商返回最合适的内容:内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源,内容协商技术有三种类型:服务器驱动协商(Server-driven-Negotiation):由服务器端进行协商,客户端驱动协商(Agent-driven Negotition):由客户端进行协商,透明协商(Transparent Negotition)服务器协商和客户端协商的结合体。
1,状态码告知从服务器端返回的请求结果,状态码有3位数字和原因短语组成。
2,状态码类别
1XX:Informational(信息状态码):接受的请求真在处理
2XX:Suceess(成功状态码):请求正常处理完毕:
204 Partial Content:代表服务器请求成功处理,但在返回的响应报文不含实体的主体部分,不允许返回任何实体的主体。一般单项传输用
206 Partial Content:该状态码表示客户端进行范围请求,服务器成功执行GET请求,响应报文中包含Content-Range指定范围的实体内容。
3XX:Redirection(重定向状态码):需要进行附加操作以完成请求:
301 Moved Permanently:永久性重定向,表示请求的资源以**被分派新的URI,**以后要使用现在所指的URI,需要更新书签。
**302 Found:临时性重定向。**表示请求的资源以被分配了新的URI,希望用户使用新的URI。(临时性,不会更新书签)
304 Not Modified:表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。返回时,不包含任何响应的主体部分。
307 Temporary Redirect:临时重定向,与302相同,不会从POST变成GET
4XX:Client Error:客户端错误状态码:服务器请求无法处理;
401 Unauthorized:表示发送的请求需要通过HTTP认证(BASIC认证,DIGEST认证)的认证信息,若以进行一次,表示用户认证失败。返回401必须包含一个适用请求资源的WWW-Authenticate首部用以质询用户信息,初次接受会弹出认证对话窗口。
404 Not Found:表明服务器上无法找到请求的资源,或服务器端拒绝请求且不想说明理由时。
5XX:Server Error:服务器错误状态码:服务器请求出错;
500 Internal Server Error:表名服务器端执行请求时发生了错误,也有可能是Web应用存在bug或临时故障。
1,用单台虚拟主机实现多个域名:HTTP/1.1规范允许一台HTTP服务器搭建多个Web站点,利用虚拟主机(又称虚拟服务器,Virtual Host)的功能。
2,客户端使用HTTP协议访问服务器时 ,会经常采用类似www.hackr.jp这样的主机名和域名。域名通过DNS服务映射到IP地址之后访问目标网站。在相同的IP地址下,可以寄存多个不同的主机名和域名。因此在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。
3,通信数据转发程序:
1,HTTP报文首部: HTTP的协议的请求和响应报文中必定包含HTTP首部,首部内容为客户端和服务器分别处理请求和响应提供所需的信息。
2,HTTP首部字段:使用首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等。由手部字段:字段值构成。有,通用首部字段,请求首部字段,响应首部字段,实体首部字段。
通用首部字段 | 说明 |
---|---|
Cache-Control | 控制缓存的行为(操作缓存的工作机制),指令的参数是可选的,多个指令之间通过","分割 |
Connection | 逐跳首部,连接的管理,控制不在转发给代理的首部字段(j即Hop-by-hop首部),管理持久连接(当服务器想断开连接时,指定Connection首部字段的值为Close),旧版要维持持续连接使用Connection:keep-Alive。 |
Date | 创建HTTP报文的日期时间。 |
Pragma | 报文指令,Pragma:no-cache,在客户端发送请求时,客户端会要求所有的中间服务器不返回缓存的资源,一般会同时包含下面两个首部字段,cache-Control:no-cache Pragma:no-cache |
Trailer | 报文末端的首部一览,会事先说明在报文主体后记录了那些首部字段。用于分块传输编码时, |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议,用于检测HTTP协议及其他协议是否可使用更高的版本进行通信,参数值可以用来指定一个完全不同的通信协议。使用Upgrade时,还需要额外指定Connection:Upgeade。 |
Via | 代理服务器的相关信息,为了追踪客户端与服务器之间的请求和响应报文的传输路径,报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息。可以避免请求回环发生。经常与TRACE方法一起使用。 |
Warning | 错误通知,告知用户一些与缓存相关的问题的警告,格式:Warning:[警告码] [警告的主机:端口号] “[警告内容]”([日期时间])。 |
缓存请求与缓存响应指令(Cache-Control):
指令 | 参数 | 说明 | 指数 | 参数 | 说明 |
---|---|---|---|---|---|
no-cache | 无 | 强制向源服务器再次验证,即不用缓存的东西 | public | 无 | 可向任意方提供响应的缓存 |
no-store | 无 | 不缓存请求或响应的任何内容 | private | 可省略 | 仅向特定用户返回响应缓存 |
max-age=[秒] | 必须 | 响应的最大Age值(保存缓存的最常时间) | no-cache | 可省略 | 缓存前必须确认其有效性 |
max-stale(=[秒]) | 可省略 | 接收已过期的响应 | no-store | 无 | 不缓存请求或响应的任何内容 |
min-fresh=[秒] | 必须 | 期望在指定时间内任有效 | no-transform | 无 | 代理不可更改媒体类型 |
no-transform | 无 | 代理不可更改实体主体媒体类型 | must-revalidate | 无 | 可缓存但必须再向源服务器进行确认 |
only-if-cached | 无 | 从缓存中获取资源 | proxy-revalidate | 无 | 要求中间缓存服务器对缓存的响应有效性再进行确认 |
cache-extension | - | 新指令标记(token) | max-age=[秒] | 必须 | 响应的最大Age值 |
s-maxage=[秒] | 必须 | 公共缓存服务器响应的最大Age值 | |||
cache-ectension | - | 新指令标记(token) |
Warning首部字段:
警告码 | 警告内容 | 说明 |
---|---|---|
110 | Response is stale(响应已过期) | 代理返回已过期的资源 |
111 | Revalidation(再验证失败) | 代理再验证资源有效性时失败(服务器无法到达等原因) |
112 | Disconnection operation(断开连接操作) | 代理与互联网连接被故意切断 |
113 | Heuristic expiration(试探性过期) | 响应的使用期超过24小时(有效缓存的设定时间大于24小时) |
199 | Miscellaneouswarning(杂项警告) | 任意的警告内容 |
214 | Transformation applied(使用了转换) | 代理对内容编码或媒体类型等执行了某些处理时 |
299 | Miscellaneous persistent Warning | 任意的内容警告 |
请求首部字段 | 说明 |
---|---|
Accept | 用户代理可处理的媒体类型,及媒体类型的相对优先级,可以使用type/subtype形式一次指定多种媒体类型:text/html,text/css,text/plain,图片文件:image/jpeg,image/gif,image/png,视频文件:video/mpeg,video/quicktime,应用程序的二进制文件:application/octet-stream,application/zip,使用q=权重值,表示优先级范围0~1,默认1.0,优先返回高的 |
Accept-Charset | 优先的字符集,通知服务器用户代理支持的字符集及字符集的相对优先顺序,使用权重q值表示,属于服务器协商 |
Accept-Encoding | 优先的内容编码,告知服务器用户代理支持的内容编码以及优先级,gzip,compress,deflate,identity等 |
Accept-Language | 优先的语言(自然语言),用户代理能够处理的自然语言集按权重q表示相对优先集 |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为,会返回状态码417 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在的服务器的互联网主机名和端口号 |
if-Match | 比较实体标记(ETag,与特定资源关联的确定值,),只有if-Match的字段值与etag值匹配一致时,服务器才会接受请求反之返回412,使用*时忽略ETag值存在就请求处理 |
if-Modified-Since | 比较资源的更新时间,时间后资源更新接受请求,反之返回304 |
if-None-Match | 比较实体标记与if-Match相反,即ETag值不一致时,可处理该请求 |
if-Range | 资源未更新时即字段值若是和ETag或更新的日期时间匹配一致时,发送实体Byte的范围请求 |
if-Unmodified-Since | 比较资源的更新时间,与if-Modified-Since相反,告知服务器,指定的请求资源只有在字段值内指定的日期时间之后,未发生更新情况,才处理请求 |
Max-Forwards | 最大传输逐跳数,当Max-Forwards的值为0时,不在转发,直接返回响应。 |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 服务器资源的实体字节范围请求,成功返回206,反之200 |
Referer | 告知服务器请求的原始资源的URI |
TE | 告知服务器客户端能够处理的传输编码的优先级,用于分块传输编码:TE:trailers |
User-Agent | HTTP客户端程序信息 |
响应首部字段 | 说明 |
---|---|
Accept-Ranges | 是否接受字节范围请求,以指定获取服务器端某个部分的资源,bytes(T)/none(F) |
Age | 推算资源创建经过的时间 |
ETag | 资源的匹配信息,告知客户端的实体标识,一种可将资源以字符串形式做唯一性标识的方式,服务器会为每份资源分配对应的ETag值,资源被缓存时,就会被分配唯一的标识,强ETag值(细微变化就改变)和弱Tag值(用于提示资源是否相同,只有发生根本改变时改变并且附加W/) |
LOcation | 令客户端重新定向至指定的URI,即将响应接受方引导至某个与请求的URI位置不同的资源 |
Proxy-Authenticate | 会把由代理服务器所要求的认证信息发送给客户端信息 |
Retry-After | 对再次发起请求的时机要求,告知客户端应在多久之后再次发出请求,配合503 Service Unavailable响应,或3XX Pedirect响应一起使用,字段值可以为具体的日期或秒数 |
Server | 告知客户端当前服务器上安装的HTTP服务器应用程序的信息,包括服务器上软件的应用名称,版本号和安装的启动项 |
Vary | 代理服务器缓存的管理信息,可对缓存进行控制,源服务器会向代理服务器传达关于本地缓存使用的方法命令,当代理服务器接受到带Vary首部字段指定获取资源的请求时,如果使用的Accept-Language字段的值相同,那么就直接从缓存返回响应,反之,则需要先从源服务器段获取资源后才能作为响应返回,从代理服务器接受到的源服务器返回的包含Vary指定首部项的响应后,若缓存就仅对含有相同字段的请求返回缓存,即使对相同资源发起请求,但由于Vary指定的首部字段不相同,必须要从源服务器重新获取资源。Vary:Accepy-language |
WWW-Authenticate | 服务器对客户度端的认证信息,告知客户端适用于访问请求URI所指定资源的认证方案和带参数提示的质询,401 Unauthorized响应中肯定带有首部字段WWW-Authenticate。 |
实体首部字段包含请求和响应报文中的实体部分所使用的首部,用于补存内容的更新时间等于实体相关的信息
实体首部字段 | 说明 |
---|---|
Allow | 通知客户端Request——urI资源可支持的HTTP方法,接受不支持的方法时,返回状态码404,同时会把所有能支持的HTTp方法写入首部字段Allow后返回 |
Content—Encoding | 告知实体主体适用的内容编码方式,内容编码方式是指在不丢失实体信息的前提下所进行的压缩 |
Content-Language | 实体主体的自然语言 |
Content-Length | 实体主体部分的大小,单位字节,在内容编码传输时,不能使用Content_length首部字段 |
Content-Location | 替换对应资源的URI,给出与报文主体部分相对应的URI。和首部字段Location不同,表示的是报文主体返回资源对应的URI |
Content-MD5 | 实体主体的报文摘要,是一串MD5算法生成的值,目的在于检查报文主体在传输过程中是否保持完整,以及确认传输到达,对报文主体执行MD5算法获得的128位二进制数,再通过Base64编码将结果写入Content-MD5字段值,由于HTTP首部无法记录二进制值,所以要通过Bese64编码处理为确保有效性,作为接受端会对报文主体再执行一次相同的MD5算法,计算出的值与字段值做比较后,即可判断准确性,因为Content-MD5的值也可以改变所以无法检测 |
Content-Range | 实体主体的位置范围,针对范围请求,返回响应时使用的首部字段Content-Range,能告诉客户端作为响应返回实体的哪个部分符合范围请求,字节为单位,表示发送部分的即整个实体的大小,Content-Range:bytes 50001-10000(当前返回)/10000(总的) |
Context-Type | 实体主体的媒体类型,字段值用type/subtype赋值,content-Type:text/html;charset=UTF-8 |
Expires | 实体主体过期的日期时间,缓存服务器在接受到含有首部字段Expries的响应后,会以缓存来请求答应 |
Last-Modified | 资源的最后修改日期时间 |
3,非HTTP/1.1首部字段:
Cookie(请求首部字段,服务器接受的Cookie信息),
Set-Cookie(响应首部字段,开始状态管理所使用的Cookie信息)和
Content-Disposition等
Set-Cookie字段属性
属性 | 说明 |
---|---|
NAME=VALUE | 赋予Cookie的名称和其值(必须项) |
expires =DATE | 浏览器可发送Cookie的有效期(若不明确指出则默认为浏览器关闭前为止),一旦Cookie从服务器端发送至客户端,服务器就不存在可以显示删除Cookie的方法,可以覆盖已过期的Cookie,实现对客户端Cookie的实质性操作 |
path=PATH | 将服务器上的文件目录作为Cookie的适用对象(若不指定则默认为文档所在的文件目录)可以限制指定Cookie的发送范围的文件目录 |
domain=域名 | 作为Cookie适用对象的域名(若不指定则默认为创建Cookie的服务器域名),属性指定的域名可以做到与结尾匹配一致 |
Secure | 仅在HTTPS安全通行时会发送CooKie//Set-Cookie:name-value;secure |
HttpOnly | 加以限制,使Cookie不能被JavaScript脚本访问,防止跨站脚本的攻击(Cross-sitescripting,XSS)对Cookie的信息窃取 |
Cookie字段; Cookie:status=enable;首部字段Cookie会告知服务器,当客户端想获得HTTP状态管理支持时,就会在请求中包含从服务器接受到的Cookie,接受到多个Cookie时,同样可以以多个Cookie形式发送。
4,End-to-end(端到端首部)和Hop-by-hop(逐跳首部): HTTP首部字段将定义成缓存代理和非缓存代理的行为。
5,端到端首部:分在此类别中的首部会转发给请求/响应对应的最终接收目标,且必须在由缓存生成的响应中,必须被转发。除了逐跳首部,都为端到端首部。
6,逐跳首部:分在此类别中的首部只对单次转发有效,会因通过缓存或代理而不再转发 ,如果要使用Hop-by-hop首部,需要提供Connection首部字段;逐跳首部有Connection,Keep-Alive,Proxy-Authenticate,Proxy-Authorization,Trailer,TE,Transfer-Encoding,Upgrade,
7,其他首部字段:X-Frame-Options,X-XSS-Protection,DNT,P3P。
8,X-Frame-Options首部字段:X-Frame-Options:DENY,有DENY(拒绝)和SAMEORIGIN(仅同源名下的页面匹配时可许)的字段值,属于HTTP响应首部,用于控制网站内容在其他Web网站Frame标签内的显示问题,主要目的是为了防止点击劫持攻击(clikjacking)
9,X-XSS-Protection首部字段:属于HTTP响应首部,是针对跨站脚本攻击(XSS)的一种对策,用户控制浏览器XSS防护机制开关,字段值有0(将XSS过滤设置成无效状态),1(将XSS设置为有效状态)
10,DNT首部字段:属于HTTP请求首部,是Do NotTrack的简称,意为拒绝个人信息收集,表示拒绝被精准广告收集,值有0(同意被追踪),1(拒绝被追踪)。
11,P3P首部字段:是以HTTP响应首部,通过P3P技术,可以让Web网站的个人隐私变成一种仅供程序理解的形式,达到保护用户隐私的目的。步骤创建P3P隐私,创建PSP隐私对照文件后。保存命名/w3c/p3p.xml,从P3P隐私中新建Compact policies后,输出到HTTP响应中,
1,HTTP的缺点:通信使用明文(不加密),内容可能被窃听,不验证通信双方的身份,可能遭遇伪装。无法证明报文的完整性,可能以遭篡改。
2,TCP/IP是可能被窃听的网络:所谓互联网,是能够通道全世界的网络组成的,无论世界那个角落的服务器和客户端通信,通讯线路上的的某些网络设备光缆,计算机都不可能是个人的私有物,窃听相同段上的通信并非难事,只需要利用抓包(Packet Capture)和嗅探器(Sniffer)工具收集解析在互联网上流动的数据帧(包)就可以.
3 ,加密处理防止窃听:
4,HTTP隐患:无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器,响应返回到客户端的是否是按真实意图接受响应的那个客户端,正在通信的双方是否具备访问权限。无法判断请求来自何方,出自谁手,即使是无意义的请求也会照单全收,无法阻止Dos攻击(Denial of Service,拒绝服务器攻击)。
5,查明对手证书:客户端持有证书即可完成个人身份的确认,也可用于Web网站的认证环节。
6,无法证明报文完整性,可能以遭篡改,在请求或响应传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击(Man-in-the-Middle attack,MITM),
7,防止篡改:常用MD5和SHA-1等散列值校验的方法,以及用确认文件的数字签名方法。提供文件下载服务的Web网站也会提供相应的以PGP(Pretty Good Privacy,完美隐私)创建的数字签名及MD5算法生成的散列值,PGP是用来证明创建文件的数字签名,MD5是由单项函数生成的散列值。
8,HTTP+加密+认证+完整性保护=HTTPS:我们把添加了密码及认证机制的HTTP称为HTTPS(HTTP Secure )
9,HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL(Secure Socket layer)和 TLS(Transport Layer Security)协议代替,所谓HTTPS,就是身披SSL协议的HTTP协议。
10,相互交换密匙的公开密匙加密技术:SSL采用一种叫做公开密匙加密的加密处理算法,加密和解密同用一个密匙的方式称为共享密匙加密,也称对称密匙加密。传输有风险。
11,使用两把密匙的公开密匙加密:公开密匙加密使用一对非对称的密匙,一把叫做私有密匙,另一把叫做公有密匙,使用公开密匙的加密方式,发送密文的一方使用对方的公开密匙进行加密处理。对方收到了被加密的信息后,再使用自己的私有密匙进行解密,利用这种方式,不需要发送用来解密的私用密匙。
12,HTTPS采用混合加密机制:HTTPS采用共享密匙加密和公开密匙加密两者并用的混合加密机制,在交换密匙环节使用公开密匙加密方式(即使用公开密匙的方式安全的交换在稍后的共享密匙加密中要使用的密匙),之后的建立通信交换报文阶段则使用共享密匙加密方式。
13,证明公开密匙正确性的证书:使用由数字证书认证机构(CA,Certficate Authorty)和其相关机关颁发的公开密匙证书。数字证书认证机构处于客户端与服务器双发都可以信赖的第三方机构,数字证书认证机构对以申请的公开密匙做数字签名,分配已签名的公开密匙,并将公开密匙放入公匙证书后绑定在一起。
14,大概流程:服务器把自己的公开密匙登录至数字证书认证机构,数字认证机构用自己的私有密匙向服务器的公开密码署数字签名并颁发数字证书。()客户端拿到服务器的公匙证书后,使用数字证书认证机构的公开密匙(置入浏览器里的),像数字证书认证机构验证公匙证书上的数字签名,以确认服务器的公开密匙的真实性。使用服务器的公开密匙对报文加密后发送,服务器用私有密匙对报文解密。
15,可证明组织真实性的EV SSL证书:证书这证明服务器是否规范,由自认证机构颁发的证书称为自签名证书,中级认证机构可能会变成自认证证书。
16,HTTPS的安全通信机制:
(一)客户端发送Client Hello 报文开始SSL通信,报文中包含客户端支持的SSL的指定版本,加密组件(CipherSuite)列表(所使用的加密算法及密匙长度等),服务器进行SSL通信时,会以Server Hello报文作为应答,和客户端一样(包含SSL版本等),服务器的加密组件内容是从接受到的客户端加密组件内筛选来的。之后服务器发送Certficate报文(包含公开密匙证书),最后服务器发送Server Hello Done报文通知客户端,最初的SSL握手协商部分结束。
(二)第一次握手结束之后,客户端以Client Key Exchange 报文作为回应。报文中包含通信加密中使用的(Pre-master-secret)的随机密码串,继续发送Change Cipher Sper报文,该报文提示服务器,通信采用Pre-master-secret密匙加密。客户端发送Finished报文(含连接至今全部报文的整体校验值),服务器能够正确解密该报文,说明握手协商成功。
(三)服务器发送Change Cipher Spec 报文,服务器发送Finished报文,服务器和客户端的Finished报文交换完毕后,SSL连接建立完成。通信受到SSL保护,开始进行应用层协议的通信,即发送HTTP请求。最后又客户端断开连接,断开连接时,发送close_notify报文,在发送TCP FIN报文来关闭与TCP的通信。
在上述流程中,应用层会发送数据时会附加一种叫做MAC的报文摘要,MAC能够查知报文是否遭篡改,从而保护报文的完整性。
17,SSL与TLS:HTTPS使用SSL(Secure Socket Layer) 和TLS(Transport Layer Security)这两个协议。SSL速度慢分为通信慢和处理速度慢(大量消耗CPU及内存资源),HTTPS要比HTTP慢2到100倍,
1,认证:密码(只用本人才会知道的字符串信息),动态令牌(仅限本人持有的设备内显示的一次性密码),数字证书(仅限本人(终端)持有的信息),生物认证(指纹和虹膜等本人生理信息),IC卡(仅限本人持有的信息)
2,HTTP使用的认证方法:BASIC(基本认证) ,DIGEST(摘要认证) ,SSL(客户端认证), FormBase认证(基于表单认证);
3,BASIC认证:是Web服务器与通信客户端之间进行的认证方式。当请求的资源需要BASIC认证时,服务器会随状态码401Atuhorization Required,返回带WWW-Authenticate首部字段的响应,该字段包含认证的方式(BASIC)及Request—URL安全域字符串(realm)。接受到状态码401的客户端为了通过BASIC认证,需要将用户名ID及密码发送给服务器,以冒号连接,在经过Base64编码处理。接受到包含首部字段Authoriztion请求的服务器,会对认证信息的正确性进行验证,通过,返回一条包含Request—URL资源的响应。不常使用。(可被窃听)
4,DIGEST认证:为了弥补BAGEST认证存在的弱点,DIGEST认证同样使用质询/响应的方式(challenge/response)[一开始一方会先发送认证要求给另一方,接着使用从另一方那接受到的质询码计算生成响应码,最后将响应码返回给对方进行认证的方式],但不会像BASIC直接发送明文密码。
5,DIGEST认证的认证步骤:请求需要认证的资源时,服务器返回401和带WWW-Authenticate首部字段的响应。该字段包含质问响应的方式认证所需的临时质询码(随机数),接受到401状态码的客户端返回响应中包含DIGEST认证必须的首部字段Authorization (必须包含username,realm,none从,uri和response的字段信息,realm和nonce就是服务器接受到的响应字段)信息,接收到包含首部字段Authorization请求的服务器,会确认认证信息的正确性。认证通过后则返回包含Request-URI资源的响应(并且会在首部字段Authentication-fo写入一些认证成功的信息).
6,SSL客户端认证:是借由HTTPS的客户端证书完成认证的方式,接受到需要认证资源的请求时,服务器会发送CertficateRequest报文,要求客户端提供客户端证书。用户发送客户端证书后,客户端会把客户端证书信息以Client Certficate报文方式发送给服务器。服务器验证客户端证书验证通过领取客户端的公开密匙,开始HTTPS加密通信。
7,SSL客户端认证采用双因素认证:SSL客户端认证不会仅依靠证书完成认证,一般会和基于表单认证组合形成一种双因素认证(需要密码和申请认证者提供的其他持有信息,组合使用的认证信息)
8,基于表单的认证:输入登录的ID和密码等,发送给Web应用程序,基于认证结果来决定认证是否成功。
9,Session管理及Cookie应用:基于表单认证的标准规范尚未有定论,一般会使用Cookie来管理Session(会话),使用Cookie来管理Session,以弥补HTTP协议中不存在的状态管理功能。
10,Session管理及Cookie状态管理:客户端用户把登录信息放入报文的实体部分,通常是以POST方法把请求发送给服务器,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据发送,服务器会发放识别用户的Session ID,通过验证从客户端发送过来的登录信息进行身份认证,把用户认证状态与SessionID绑定后记录在服务器端。在响应时,会在首部字段(Set-Cookie)内写入Session ID,客户端接受到从服务器发来的Session ID后,会将其Cookie保存在本地,下次向服务器发送请求时,自动发送Cookie,所以Session ID也会发送到服务器,服务器通过Session ID识别用户和其认证状态。
11,通常,一种安全的方法是先给密码加盐(salt:由服务器生成随机字符串,和密码字符串相连接生成散列值,当两个用户使用同一密码时,因为Salt值不同,对应散列值不同,减少密码特征)的方式增加额外信息,再使用散列(hash)函数计算出散列值后保存。
1,消除HTTP瓶颈的SPDY协议(speedy,目标解决HTTP的性能瓶颈,缩短Web页面加载时间50%)。
HTTP瓶颈:一条连接上只可能发送一个请求。请求只能从客户端开始,客户端不可以接受除响应以外在指令。请求首部响应未经压缩就发送,首部信息越多延迟就越大,发送冗长的首部,每次互相发送相同的首部字段造成浪费较多,可任意悬着数据压缩格式,非强制压缩。
2,Aiax解决方法:Ajax(Asynchronous JavaScript and XML,异步JavaScript与XML技术)是一种有效利用JavaScript和DOM的操作,以局部Web页面更新的异步通信手段。Ajax的核心技术是名为XMLHttpRuest的API、通过JavaScript脚本语言的调用就能和服务器进行HTTP通信,从加载完毕的Web页面发去请求,更新局部页面。但是利用Ajax实时的从服务器获取内容,有可能会导致大量请求产生。
3,Coment的解决方法:一旦服务器有内容更新,comet 不会让请求等待,直接返回给客户端,通过延迟应答,模拟实现服务器端向客户端推送(Server Push)的功能。即Comet会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。
SPDY的设计与功能:SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层与运输层之间通过新加会话层的形式运作。SPDY规定通信中使用SSL。SPDY以会话层的形式加入,控制对数据的流动,但还采用HTTP建立通信,即HTTP的方法Cookire及HTTP 报文依旧可用。使用SPDY后,HTTP获得以下功能:
多路复用流:通过单一的TCp连接,可以无限制处理多个HTTP请求,所有请求的处理在一条TCP连接上完成,因此TCP的处理效率得到提高。
赋予请求优先级:SPDY不仅可以无限制的并发处理请求,还可以给请求逐个分配优先级顺序,解决因带宽低而导致响应变慢的问题。
压缩HTTP首部:压缩HTTP请求和响应的首部,通行产生的数据包数量发送字节减少。
推送功能:支持服务器主动向客户端推送数据的功能,这样服务器可以直接发送数据。
服务器提示功能:服务器可以主动提示客户端请求所需的资源。由于在客户端发送资源之前就可以获知资源的存在,因此在资源以缓存的情况下,可以避免发送不必要的请求。
4,使用浏览器进行全双工通信的WebSocket:利用Ajax和Connect技术进行通信可以提升Web的浏览速度,但仍是使用HTTP协议。WebSocket即Web浏览器与Web服务器之间的双全工通信标准。其中WebSocket协议由IFTF定为标准,WebSocketAPI有W3C定位标准,主要解决Ajax和Comet里的XMLHttpRequest附带的缺陷引起的问题。
5,WebSocket协议:一旦Web服务器与客户端之间建立起WebSocket协议的通信连接,之后的协议都依靠专用协议进行,通信过程中可以互发送JSON,XML,HTML或图片等任意格式的数据。由于是建立在HTTP基础的协议上,即发起方仍是客户端,一旦确立WebSocket通信连接,不论服务器还是客户端,任意一方都可以直接向对方发送报文。特点:
(1)推送功能:支持由服务器向客户端推送数据的推送功能。
(2)减少通讯量:只要建立起WebSocket连接,就希望一直保持连接状态
(3)握手请求:在实现webSocket通信前,需要完成一次握手动作,需要用到HTTP的Upgrade首部字段(Upgrade:websocket),告知服务器通讯协议发生改变,以达到握手目的。Sec-WebSocket字段内记录着握手过程中必不可少的键值,Sec-WebSocket—Protocol:字段内记录使用的子协议,子协议案webSocket协议标准在连接分开使用时,定义那些连接名称。
(4)握手响应:Sec-WebSocket-Accept的字段值是由握手请求中的Sec-WebSocket-Key的字段值生成的,成功握手确立WebSocket连接之后,通信时不在使用HTTP的数据帧,而采用WebSocket独立的数据帧。
握手请求:
GET/chat HTTP/1.1
Host:server.example.com
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-key:dGhlIHNhbxBsZSBub25jZQ==
Origin:http://example.com
Sec-WebSocke-Protocol:chat,superchat
Sec-WebSocket-Version:13
握手响应:
HTTP/1.1 101 Switching Protocols
Upgrade:websocket
Connection:Upgrade
Sec-WebSocket-Accept:上pPLMBiTXaQ9kyGZZ=
Sec-WebSocket-Protocol:chet
6,WebSocket API:JavaScript可调用“TheWebSocket API”内提供的WebSocket程序接口,以实现WebSocket协议下全双工通信。
7,IETF(Interne Engineering Task Force,互联网工程任务组):负责互联网的技术标准。
8,Web服务器管理文件的WenDAV(基于万维网的分布式创作和版本控制):WebDVA是一个可对Web服务器上的内容直接进行文件复制编辑等操作的分布式文件系统,它作为扩展HTTP/1.1的协议定义在RFC4918,除了创建,删除文件的功能还具备文件创建者管理,文件编辑过程中禁止其他用户内容覆盖的枷锁功能,以及对文件内容修改的版本控制功能。
9,扩展HTTP/1.1的WebDAV:针对服务器上的一些资源,WebDAV增加一些新概念:
集合(Collection):是一种统一管理多个资源的概念,以集合为单位可进行各种操作。也可实现类似集合的集合这样的叠加。
资源(Resource):把文件或集合和合称为资源。
属性(Property):定义属性的资源。定义以"名称=值"的格式执行。
锁(Lock):把文件设置成无法编辑的状态。多人同时编辑时,可防止在同一时间进行内容写入。
10,WebDAV内新增的方法及状态码:WebDVA为实现远程文件管理,向HTTP/1.1中追加以下方法:
方法:PROPFIND:获取资源;PROPPATCH:修改资源;mkcol:创建集合; COPY:赋值资源及属性;MOVE:移动资源;LOCK:资源枷锁;UNLOCK:资源解锁;
状态码:
102 Processing:可正常处理请求,但目前是处理中状态
207 Multi-Status:存在多种状态;
422 Unprcessible:格式正确,内容有误;
423 Locked:资源以被枷锁;
424 Failed Dependency:处理与某请求关联的请求失败,因此不再维持依赖关系。
507 Insufficient Storage:保存空间不足;
1,在客户端即可篡改请求:在HTTP报文中加载攻击代码,就能发起对Web应用的攻击,通过URL查询字段或表单,HTTP首部,Cookie等途径把攻击代码传入,若这时Web应用存在安全漏洞,那内部信息就会遭到窃取,或被攻击者拿到管理权限。
2,针对Web应用的攻击模式:主动攻击:是指攻击者通过直接访问Web应用,把攻击代码传入的攻击模式,具有代表性的有SQL注入攻击和OS命令注入攻击。被动攻击:是指利用圈套策略执行攻击代码的攻击模式,在被动攻击过程中,攻击者不直接对目标Web应用访问发起攻击。
3,因输出值转义不完全引发的安全漏洞等
链接:https://pan.baidu.com/s/1FxPs_vBlTOABx_3JI7hDTA&shfl=sharepset
提取码:velp