了解Web及网络基础
- 使用HTTP协议访问Web
浏览器(客户端)在地址栏里输入要访问的页面(URL),客户端从服务器获取文件资源,这一过程是在HTTP协议上进行通信的。 - 网络基础TCP/IP
通常使用的网络都是在TCP/IP协议族的基础上运作的,HTTP属于其中的一个子集。 - TCP/IP协议族的明显特性是分层
分为4层:应用层,传输层,网络层,数据链路层。 - 分层的好处
当部分设计需要修改时,只需更改所在的分层即可,无需修改整个协议,也就是说降低了耦合度。还有就是分层后,各个分层的分工明显,便于去实现,只需把该层次的接口功能实现即可,无需顾及整体。 - 各分层作用
- 应用层:决定了向用户提供应用服务时的通信活动。FTP,HTTP,DNS
- 传输层:提供数据传输。TCP,UDP
- 网络层:处理网络中流动的数据包。数据包是网络传输中最小的数据单位。该层规定了怎样的传输路线。
- 链路层:处理网络连接的硬件部分。
- 发送端在层与层之间传输数据时,每经过一层时必定会被打上上一层所属的首部信息。反之,接收端则每经过一层都去掉对应的首部信息。
- 与HTTP关系密切的协议:IP,TCP和DNSIP协议的作用是把各种数据包传送给对方,需要IP地址和MAC地址。TCP协议提供可靠的字节流服务。字节流服务指为了方便传输,将大块数据分割成报文段。可靠是指,能够把数据准确可靠地传给对方,这是三次握手的功劳。三次握手:首先发送端发送一个带SYN标志的数据包给对方,接收端回传一个带SYN/ACK标志的数据包表示收到信息,最后发送端再回传带ACK标志的数据包,握手结束。
DNS:提供域名到IP地址之间的解析服务。
- 各协议与HTTP协议的关系
- 1.通过DNS解析域名的IP地址
- 2.通过HTTP协议向服务器发送请求
- 3.TCP协议保证数据的传输
- 4.IP协议选择传输路径
- 5.TCP协议重组报文段
- 6.HTTP协议处理请求这只是客户端向服务器发送一个HTTP请求的单方面过程,还未涉及服务器响应请求。
- URI,URL和URN
URI=URL+URN
URL为一个人的居住地址,URN则是一个人的姓名。
URI的格式:登录信息(可选)+ 服务器地址 + 端口号(可选)+ 文件路径 + 查询字符串(可选)+ 片段标识符。例:
http://user:pass@www.google.com:80/dir/index.html?uid=1#c1
简单的HTTP协议
- 应用HTTP协议时,必定是一端担任客户端角色,另一端担任服务器角色。
- 请求报文
请求方法 + 请求URI+协议版本 + 可选的请求首部字段 + 内容实体。
响应报文协议版本 + 状态码 + 解释状态码的原因短语 + 可选的响应首部字段 + 主体。
- HTTP是一种无状态协议,所以后来才有Cookie技术。
- 持久连接节省通信量
持久连接:只有任意一端没有明确提出断开连接则一直保持TCP连接状态。
持久连接使得多数请求以管线化(pipelining)方式发送成为可能,即:不用等待上次请求的响应后才能发送下一个请求。 - Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态
HTTP报文内的HTTP信息
- HTTP报文:用于HTTP协议交互的信息
- 请求行:方法 URI HTTP版本
- 状态行:状态码 原因短语 HTTP版本
- 首部字段:请求或响应的条件和属性的各类首部
- 一般有:通用首部,请求首部,响应首部,实体首部
- 其他:可能包含未定义的首部(Cookie等)
- 编码提升传输速率
- gzip(GNU.zip)
- compress(UNIX)
- deflate(zlib)
- identity
- 分割发送的分块传输编码:传输大块数据时,分割数据以达到逐步显示页面的效果。
- MIME机制允许邮件处理文本,图片,视频等多个不同类型的数据。
- 首部字段Range来指定资源的byte范围,从而实现下载中断恢复功能。
- Accept首部字段达到服务器返回内容的最优。
返回结果的HTTP状态码
与HTTP协作的Web服务器
- 单台虚拟主机实现多个域名
HTTP/1.1允许一台服务器搭建多个Web站点。
在相同的IP地址下,虚拟主机可以寄存多个主机名和域名的Web网站,因此HTTP请求时,Host首部必须完整指定主机名或域名的URI - 通信数据转发程序:代理,网关,隧道
- 代理是一种由转发功能的应用程序,是位于服务器和客户端间的中间人,负责转发请求或转发响应。客户端=>>服务器;服务器=>>客户端;
- 代理服务器:接收客户端的请求再转发给其他服务器,接收源服务器的响应再转发给客户端。每次通过代理服务器时,会追加写入Via首部信息。
- 缓存代理:会预先将资源的缓存保存在代理服务器上。
- 透明代理:转发请求或响应时,不对报文做任何加工的代理类型。
- 网关和代理十分相似,不同的是能提供非HTTP协议服务。
- 隧道的目的是确保客户端与服务器进行安全的通信。
- 保存资源的缓存
- 缓存是指代理服务器或客户端本地磁盘内保持的资源副本,减少对源服务器的访问,节省了通信流量和时间。
HTTP首部
- HTTP请求报文
- HTTP响应报文
HTTP首部字段
首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等内容HTTP首部字段 =>> 首部字段名:字段值 =>> Content-Type:text/html另外单个字段可以有多个值,如:Keep-Alive: timeout=15, max=100四种HTTP首部字段类型
确保Web安全的HTTPS
-
HTTP的缺点
- 通信使用明文,内容可能会被窃听
- 不验证通信方的身份,会遭遇伪装
- 无法验证报文完整性,可能被篡改
-
加密处理防止被窃听
- 通信的加密:用SSL或TLS建立安全通信线路后,就可以在该线路上进行HTTP通信了。与SSL组合使用的HTTP被称为HTTPS或HTTP over SSL
- 内容的加密:实现的前提是客户端和服务器同时具有加密和解密机制,仍有被篡改的风险
- 不验证通信方身份的隐患
- 遇到一个假的客户端
- 遇到一个假的服务器
- 遇到一个假的大会员
- HTTP + 加密 + 认证 + 完整性保护 = HTTPS
- 共享密钥加密的困境
加密和解密同用一个密钥的方式称为共享密钥加密,对称密钥加密。密钥被攻击者获取了,那就GG了。
- 使用两把密钥的公开密钥加密
公开密钥加密使用的是一对非对称的密钥,一个公开,一个私有。
- HTTPS采用混合加密机制
公开密钥加密与共享密钥加密相比,处理速度慢,所以组合使用。
- SLL速度慢吗
通信慢
处理速度慢
使用专用的服务器,达到加快处理速度,对于速度慢,没有根本性的解决方案。
确认访问用户身份的认证
- BASIC认证
没有加密处理,明文解码后就是用户id和密码,被盗可能性极高。另外,进行一次认证后,一般浏览器无法实现认证注销操作。 - DIGEST认证
质询/响应的方式,一方发送认证请求,收到质询码,根据质询码生成响应码,把响应码发给对方进行认证。密码泄露的可能性就降低了。 - SSL客户端认证客户
端证书 + 表单认证组合成双因素认证。 - FormBase认证(多半认证基于此)
客户端发送id和password进行匹配,认证成功后的用户信息会写入Cookie里。
基于HTTP的功能追加协议
- 消除HTTP瓶颈的SPDY
- 一条连接只能发送一个请求
- 请求只能从客户端开始,客户端不接收除响应外的指令
- 请求/响应首部未经压缩就发送
- 发送冗长的首部,每次互发相同重复的首部
- 非强制压缩发送,可选任意压缩格式
- Ajax的解决方法
Ajax的核心技术是XMLHttpRequest的API,通过JS的调用就能和服务器进行HTTP通信。从而实现更新局部页面。但人未解决HTTP协议本身存在的问题。 - Comet的解决方法
这是通过延迟应答,模拟实现服务器向客户端推送的功能。Comet会将响应挂起,当服务器的内容更新时,再返回该响应。但仍有不足。
- 多路复用流
- 赋予请求优先级
- 压缩HTTP首部
- 推送功能
- 服务器提示功能
- 使用浏览器进行全双工通信的WebSocket
- Web服务器管理文件的WebDAV