协议:指规则的约定
HTTP:超文本传输协议
TCP/IP协议族:按层次分为四层--应用层、传输层、网络层、数据链路层
分层好处:独立、设计简单
应用层:决定向用户提供应用服务时通信的活动。预存各类通用的应用服务,FTP和DNS服务是其中两类。HTTP也属于该层。
传输层:对上层应用层,提供处于网络连接中的两台计算机之前的数据传输。 TCP和UDP协议
网络层:处理网络上流动的数据包。数据包是网络传输的最小数据单位。规定了通过怎样的路径到达对方计算机,并把数据包送给对方
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层相当于选择一条传输路线。IP协议。
链路层:用来处理连接网络的硬件部分。
IP:网络层
“IP”是一种协议,作用是把各种数据包传送给对方。为确保确实传送到对方那里,需满足各类条件。
其中两个重要的条件:IP地址(指明节点被分配到的地址)和MAC地址(网卡所属的固定地址)
ARP协议(中转作用):是一种用以解析地址的协议。根据通信方的IP地址可以反查出对应的MAC地址。
TCP:传输层
提供可靠的字节流服务。即分割以报文段为单位。
为确保无误,三次握手。
DNS服务:应用层
提供域名到IP地址之间的解析服务。提供通过域名查找IP地址,或逆向从IP地址反查域名的服务。
各种协议与HTTP协议之间的关系:
URI和URL:
URI(统一资源标识符)、URL(统一资源定位符)
URI用字符串标识某一互联网资源,URL表示资源的地点。URL是URI的子集。
HTTP协议用于客户端和服务端之间的通信
客户端:请求访问文本或图像等资源的一端
服务器端:提供资源响应的一端
HTTP是无状态协议,不保存通信状态。为了实现期望的保持状态功能,引入了Cookie技术。有了Cookie再用HTTP协议通信,就可以管理状态了。
HTTP方法:
GET:请求访问已被URI识别的资源
POST:传输实体的主体。POST与GET相似,但POST的主要目的不是获取响应的主体内容
PUT:用来传输文件,要求在请求报文的主体中包含文件内容
HEAD:获得报文首部。用于确认URI的有效性及资源更新的日期时间等
DELETE:删除文件,与PUT相反,按请求URI删除指定的资源
OPTIONS:访问支持的方法。查询针对请求URI指定的资源支持的方法
TRACE:追踪路径。让Web服务器端将之前的请求通信环回给客户端的方法,容易引起跨站追踪攻击,基本上不用
CONNECT:要求用隧道协议链接代理。即要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用 SSL和TLS 协议把通信内容加密后经网络隧道传输
持久连接:
访问一个含多张图片的HTML页面,会建立多个请求,每次请求都会造成无谓的TCP连接建立和断开,增加通信量的开销
解决办法:持久连接 HTTP keep-alive 。
特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态
优点:减少了TCP连接的重复建立和断开造成的额外开销,减轻了服务器端的负载。减少开销的时间,使请求和响应能够更早地结束。显示速度也就相应提高了。
持久连接使多数请求以管线化方式成为可能。从前是发送请求后需收到响应,才能发下一个请求。管线化技术出现后,就不用等待响应就可以发送下一个请求。
使用Cookie的状态管理:
HTTP无状态协议:
如果要求登录认证的web页面无法进行状态的管理(不记录已登录的状态),那么每次跳转新页面不是要再次登录,就是要在每次请求报文中附加参数来管理登录状态。
也有优点,由于不必保存状态,自然可减少服务器的CPU及内存资源的消耗。
Cookie技术:
通过在请求和响应报文中写入Cookie信息来控制客户端的状态
Cookie会根据从服务器发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器发现客户端发送过来的Cookie后,会去检查究竟是从哪一个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息
HTTP报文:交互的信息
大致分为报文首部和报文主体
首部内容组成:
请求行:包含用于请求的方法,请求URI和HTTP版本
状态行:包含表明响应结果的状态码,原因短语和HTTP版本
首部字段:包含表示请求和响应的各种条件和属性的各类首部
一般有4中首部:通用首部、请求首部、响应首部、实体首部
状态吗:告知从服务器端返回的请求结果
200 OK:客户端发来的请求在服务器被正常处理了
204 No Content:请求已成功处理,但返回的响应报文中不含实体的主体部分。一般在只需要从客户端往服务端发送信息,而对客户端不需要发送新信息内容的情况下使用
206 Partial Content:表示客户端进行了范围请求,服务器成功执行了这部分的GET请求。响应报文包含指定范围的实体内容。
301 Moved Permanently:永久性重定向。表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。
302 Found:临时性重定向。代表资源不是被永久移动,只是临时性质的。就是已移动的资源对应的URI将来还有可能发生改变。
303 See Other:表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
304 Not Modified:资源已找到,但未符合条件请求。
400 Bad Request:请求报文中存在语法错误。
401 Unauthorized:表示请求需要通过HTTP认证,若之前已进行过1次请求,表示用户认证失败。
403 Forbidden:表明对请求资源的访问被服务器拒绝了。
404 Not Found:无法找到请求的资源。
500 Internal Server Error:表明服务器端在执行请求时发生了错误
503 Service Unavailable:服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
代理:
一种有转发功能的应用程序,扮演了位于服务器和客户端“中间人”的角色,接受由客户端发送的请求并转发给服务器,同时也接收服务器返回的响应并转发给客户端。
使用理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。
使用方法按两种基准分类,一种是是否使用缓存,另一种是是否会修改报文
缓存代理:代理转发响应时,缓存代理会预先将资源的副本(缓存)保存在代理服务器上。再次请求时,直接使用缓存的资源作为响应,不再从源服务器获取。
透明代理:转发请求或响应时,不对报文做任何加工的代理类型,反之称为非透明代理
网关:转发其他服务器通信数据的服务器,接受从客户端发送来的请求时,就像自己拥有资源的源服务器一样对请求进行处理。
利用网关能提高通信的安全性,因可在客户端与网关之间的通信线路上加密以确保连接的安全。
隧道:在相隔甚远的客户端和服务端两者之间进行中转,并保持双方通信连接的应用程序。使用SSL加密手段,确保安全通信。
缓存:
指代理服务器或客户端本地磁盘内保存的资源副本。利用缓存可减少对源服务器的访问,节省了通信流量和通信时间。
缓存的有效期限
不仅存在于缓存服务器内,还存在客户端浏览器中(客户端缓存称为临时网络文件),缓存过期后,会向源服务器确认资源的有效性。
HTTP首部:
传递额外重要信息
首部字段由 首部字段名:字段值 构成
通用首部字段:请求报文和响应报文都会使用的首部
请求首部字段:发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
响应首部字段:返回响应报文时使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息
实体首部字段:针对请求和响应报文的实体部分使用的首部。补充了资源内容更新时间等于实体相关的信息
Cookie:
Set Cookie:
确保web安全的HTTPS:
HTTP不足:
* 通信使用明文(不加密),内容可能被窃听
通信加密:
SSL(安全套接层) TLS(安全层传输协议)
HTTP与SSL组合后形成HTTPS,SSL建立安全通信线路后,在这条线路上进行HTTP协议通信
内容加密:
报文主体被加密。前提是客户端和服务端同时具备加密和解密机制。
只要应用于web服务中。
由于该方式不同于SSL和TLS将整个通信线路加密,所以内容仍有被篡改的风险
* 不验证通信方的身份,有可能遭遇伪装
HTTP通信,不确认通信方,存在以下隐患:
目标web服务器是伪装的web服务器
目标客户端是伪装的客户端
无法确定正在通信的对方是否具备访问权限
无法判断请求来自何方、出自谁手
接收无意义的请求,无法阻止海量请求下的DOS攻击(拒绝服务攻击)
SSL不尽提供加密手段,还使用了一种被称为证书的手段,可以用于确定通信方。
* 无法证明报文的完整性,有可能已遭篡改
中间人攻击:请求或响应在传输途中,遭攻击者拦截并篡改内容的攻击
防止篡改:
MD5和SHA-1等散列值检验的方法,及用来确认文件的数字签名方法。无法百分百保证。因为PGP和MD5本身被改写的话,用户是没有办法意识到的。
HTTPS=HTTP+加密+认证+完整性保护
加密方法:
SSL采用一种叫做 公开密钥加密 的加密处理方式。使用秘钥加密解密。
加密解密用同一个密钥的方式成为 共享密钥加密(对称秘钥加密),有被窃听的风险。
使用两把密钥的 公开秘钥加密(非对称密钥),一把叫做私有秘钥,另一把叫做公开密钥。相对共享密钥处理较慢
* HTTPS混合加密机制
HTTP使用的认证方式:
BASIC(基本认证):用户id和密码组成,经过Base64编码形成最后的结果,写入首部Authorization,发送请求。不安全,不灵活,不常用。
DIGEST(摘要认证):质询响应机制,同样不灵活,达不到高度安全,适用范围受限。
SSL客户端认证:由HTTPS的客户端证书完成认证的方式。因费用问题尚未普及。
FormBase(基于表单认证):输入用户id和密码等登陆信息,发送web应用程序进行认证。
基于HTTP协议的追加协议:
SPDY:旨在解决HTTP的性能瓶颈,缩短web页面的加载时间
使用HTTP探知服务器是否有内容更新,必须频繁地从客户端到服务端进行确认。若无内容更新,会产生徒劳的通信。
瓶颈:
一条连接上只能发送一个请求
请求只能从客户端开始。客户端不接收除响应以外的指令
请求/响应首部未经压缩就发送。首部信息越多延迟越大
首部冗长
非强制压缩发送。可选任意压缩格式
Ajax解决:只更新一部分页面,传输数据少。
Comet解决:有内容更新再返回响应,延迟应答。为保留响应,一次连接的持续时间变长。
SPDY是在应用层与传输层之间通过新加会话层的形式运作。
多路复用流:单一的TCP连接,可以无限制处理多个HTTP请求。只能单个域名
赋予请求优先级:解决在发送多个请求时,因带宽低而导致响应变慢的问题
压缩HTTP首部
推送功能:支持服务端向客户端主动推送数据
服务器提示功能:服务端可主动提示客户端请求所需资源
全双工通信的WebSocket协议:
推送功能:支持服务端向客户端主动推送数据
减少通信量:每次连接的总开销减少,且WebSocket首部信息小,通信量也相应减少