图解HTTP 读书笔记 下 Web相关 图解HTTP这本书,分两篇来讲,上篇涉及到书中的了解Web及网络基础、简单的HTTP协议、HTTP报文内的HTTP信息,HTTP状态码,HTTP首部这五章内容,主要讲Web网页和HTTP的一些基本概念以及HTTP报文的有关信息。 本篇则涉及Web服务器、**HTTPS、用户身份认证和构建Web内容技术;也就是有关Web服务器、Web网页和Web安全的内容。 一 Web服务器 本节简单介绍一下Web服务器相关的知识,首先需要说明的是,Web服务器和Web站点并非总是一一对应的关系。一台Web服务器可以搭建多个独立域名的Web网站;另一方面,一个大型网站往往需要多个Web服务器来提供服务。 另外,在之前的HTTP通信模型中,只有客户端和服务端两个对象,实际上,客户端和服务器之间还存在着代理服务器、网关等中介设备用以帮忙数据转发。 1.1 虚拟主机 HTTP/1.1规范允许一台HTTP服务器通过虚拟主机的功能,搭建多个独立域名各自运行的Web站点。通过虚拟主机功能,在物理层面只有一台服务器的情况下可以假想有多台主机。 此时,这些Web站点的IP地址是一样的,因此,要实现精准访问,必须在请求报文头部的Host首部内完整指明欲访问站点的URI。 1.2 通信数据转发 HTTP通信时,除客户端和服务器之外,还有一些用以通信数据转发的应用程序;代理、网关和隧道,他们配合服务器工作。 1.2.1 代理 代理:代理是一种有转发功能的应用程序,扮演位于服务器和客户端之间中间人的角色。 分类:按照是否使用缓存,可分为缓存代理和非缓存代理;按照是否修改报文,可分为透明代理和非透明代理 用途:1. 使用缓存技术减少网络带宽流量;2. 组织内部针对特定网站的访问控制;3. 获取访问日志 1.2.2 网关 网关:网关是转发其他服务器通信数据的服务器,接收客户端发来的请求时,就像源服务器一样对请求进行处理。 作用:能使通信线路上的服务器提供非HTTP协议服务,提高通信的安全性。 1.2.3 隧道 隧道:是在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序 作用:确保客户端和服务器之间能够进行安全通信。隧道本身透明,客服端和服务器都无需在意其存在。 1.3 保存资源的缓存 缓存:代理服务器或客户端本地磁盘内保留的资源副本 作用:减少对源服务器的访问,节省通信流量和通信时间 缓存的有效期限:缓存存在一个问题,被缓存资源有其自身时效性,当资源发生变化时,缓存也应该跟着变化。所以,要注意缓存的有效期限。 客户端缓存:客户端缓存就是Web浏览器的临时网络文件。有限期内,可以直接访问其缓存;判定缓存过期后,浏览器则再次请求新资源。 二 HTTPS HTTPS本身备份是应用层的新协议,只是HTTP**通信接口部分用**SSL/TLS协议进行替代。也就是,HTTPS是披上SSL/TLS(下面用SSL指代)安全保护的HTTP。SSL位于HTTP和TCP之间。 SSL:Secure Sockets Layer,安全套接层。它是在上世纪90年代中期,由网景公司设计的。SSL 因为应用广泛,已经成为互联网上的事实标准。IETF 就在1999年把 SSL 标准化。标准化之后的名称改为 TLS(是“Transport Layer Security”的缩写),中文叫做“传输层安全协议”。 2.1 HTTP安全性问题 2.1.1 通信使用明文(不加密): 问题:HTTP本身不具备加密功能,所以HTTP报文以明文方式传输,很容易被抓包和嗅探器工具窃听。 解决方式:使用加密技术防止被窃听。 加密方式分为两种:通信的加密和内容的加密: 1.通信的加密:使用SSL或TLS对HTTP通信进行加密。 2.内容的加密:对报文主体进行加密。需要注意客户端和服务端都同时具备加密和解密技术。这种方式的加密下,内容仍有可能被篡改。 2.1.2 不验证通信方身份 问题:任何人都能发起请求,可能导致: 1. 无法确定客户端和服务器的真实身份,可能存在伪装; 2. 无法确定正在通信的对方是否具有访问权限。 解决方式:使用由第三方可信机构颁发的证书 2.1.3 无法证明报文完整性 问题:在请求和响应传输途中、报文可能被篡改。 解决方式:使用MD5和SHA-1等散列值校验或数字签名。 2.2 HTTPS=HTTP+加密+认证+完整性保护 为解决HTTP上述的三个痛点,HTTPS应运而生。之前提到,HTTPS就是披上SSL外壳的HTTP。下面对其使用技术进行说明。 加密技术:HTTPS采用共享密钥加密和公开密钥加密的混合加密技术。首先,使用公开密钥加密方式安全地交换在稍后的共享密钥加密中要使用的密钥;然后在确保交换的密钥安全的前提下,使用共享密钥加密方式进行通信。 共享密钥加密:也称对称密钥加密,加密解密都使用同样的密钥。但是发送密钥就有密钥被盗的风险;不发送,对方就无法解密。 公开密钥加密:也称非对称密钥加密,该加密算法使用两个不同的密钥:加密密钥和解密密钥。前者公开,又称公开密钥,简称公钥;后者保密,又称私有密钥,简称私钥。这两个密钥是数学相关的,用某用户加密密钥加密后所得的信息只能用该用户的解密密钥才能解密。公钥的形式就是数字证书。 HTTPS缺点:1. 加密技术会耗费更多CPU和内存资源;2. 认证技术需要花钱。 三 构建Web页面 3.1 HTML HTML是为了发送Web上的超文本而开发的标记语言,Web页面几乎全是用HTML写成的。由HTML构成的文档经过浏览器的解析、渲染后,呈现的画面即为Web页面。最新的HTML版本是HTML5。 超文本:一种文档系统,可将文档中任意位置的信息和其他信息(文本或图片)建立关联,即超链接文本 标记语言:通过在文档中的某部分穿插特别的字符串标签,用来修饰文档的语言 CSS:Cascading Style Sheets,层叠样式表。能够对网页中元素位置的排版进行像素级精确控制,进行网页修饰;还可以配合各种脚本语言动态地对网页各元素进行格式化。可以实现文档结构和设计分离。 动态HTML:使用客户端脚本语言将静态的HTML内容变成动态的技术的总成。使用JavaScript对DOM进行操作。 3.2 Web应用 Web应用:通过Web功能提供的应用程序。比如购物网站、BBS、搜索引擎等。 作用:Web应用对客户端发来的请求,创建HTML内容。这种由程序创建的内容称为动态内容,事先准备好的内容称为静态内容。 CGI:Common Gateway Interface,通用网关接口。Web服务器在接收到客户端发来的请求后转发给程序的一组机制。在CGI作用下,程序对请求进行进行HTML创建等操作。 Servlet:能在服务器上创建动态内容的程序,用Java序言实现的接口,属于J2EE。Servlet常驻内存,负载较小,随Java而普及。 XML:eXtensible Markup Language,可扩展标记语言。 是一种可按应用目标进行扩展的通用标记语言。其和HTML都是从SGML简化二来,其对数据的记录方式做了特殊处理。 参考文章 1. 聊聊HTTPS和SSL/TLS协议