第一章 了解web及网络基础
第二章 简单的HTTP协议
HTTP协议规定:从客户端开始建立通信,服务器端在没有接收到请求之前不会发送响应
请求报文由请求方法,请求URI,协议版本,可选的请求首部字段和内容实体构成
响应报文由协议版本,状态码,用以解释状态码的原因短语,可选的响应首部字段以及实体主体构成
HTTP是不保存状态的协议,自身不对请求和响应之间的通信状态进行保存。
这种不保存状态,能够更快的处理大量事务,但是对于想要保持状态功能,于是引入了cookie技术
请求URI定位资源
客户端请求访问资源,请求报文中URI包含在内
如果不是访问特定资源,而是对服务器本身发起请求,可以用*代替URI
告知服务器意图的HTTP方法
GET:获取资源
用来请求访问已被URI识别的资源。
POST:传输实体主体
POST和GET功能相似,但是,POST的主要目的不是获取响应的主体内容
PUT传输文件
请求报文中主体包含文件内容,然后保存在URI指定的位置
这种方法不带验证机制,一般的web网站不使用这个功能
HEAD:获得报文首部
这个方法与GET方法一样,只是不返回报文主体部分,用于确认URI的有效性以及资源更新的日期等
DELETE:删除文件
与PUT方法相反,删除URI指定的资源。这种方法本身不带有验证机制,一般的web网站不使用这种方法
OPTIONS:询问支持的方法
查询针对请求URI指定的资源支持的方法
TRACE:追踪路径
让web服务器将之前的请求通信环回给客户端的方法
这个方法用来确认连接过程发生的一系列操作
CONNECT:要求用隧道协议连接代理
这个方法要求在与代理服务器通行时建立隧道,实现用隧道协议进行TCP通信,主要使用SSL和TLS协议吧通信内容加密后经网络隧道传输
持久连接节省通信量
HTTP初始版本,每进行一次HTTP通信就要断开一次TCP连接
持久连接的特点:只要任意一段没有明确提出断开连接,则保持TCP连接状态
管线化
从前发送请求后要等待接收到响应后发送下一个请求,管线化技术,不用等待响应可以直接发送下一个请求
第三章 HTTP报文内的HTTP信息
获取部分内容的范围请求
可恢复机制:从之前的中断处回复下载
内容协商返回最合适的内容
内容协商机制是指客户端和服务器端就响应的资源内容进行交涉然后提供给客户最适合的资源。内容协商会已响应资源的语言、字符集、编码方式最为判断的基准
第四章 返回结果的HTTP状态码
状态码的工作机制
状态码的职责是当客户端向服务器端发送请求,描述返回的请求结果。用户可以知道服务器端是正确处理了还是出现了错误
HTTP状态码有多达60余种,常用的大概有14种
2XX成功
1 200 OK表示从客户端发来的请求在服务器端被正常处理了
2 204 No Content表示服务器接受的请求成功处理了,返回的响应报文不含实体的主体部分
3 206 Partial Content
客户端进行了范围请求,服务器成功执行了这部分的GET请求,响应报文包含由content-range指定范围的实体内容
3XX重定向
4 301 Moved Permanently
永久性重定向,这个状态码表示请求的资源已被分配了新的URI,以后使用的资源是现在URI所指的。
5 302 Found
临时性重定向,请求的资源已被分配了新的URI,希望永辉能使用的新的URI访问
资源不是被永久移动,只是临时性质的
6 303 See Other
由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源
303和302有着相同的功能,但是303明确表示客户端应当采用GET方法获取资源,这是两者的区别
7 304 Not Modified
表示伏虎的发送附带条件的请求是,服务器端允许请求访问资源,单位满足条件的情况。这个状态码与重定向没有关系
8 307 Temporary Redirect
临时重定向,与302有着相同的含义。307遵照标准,不会从POST变成GET
4XX 客户端错误
表明客户端是发生错误的原因所在
9 400 Bad Request
表明请求报文中存在语法错误
10 401 Unauthorized
表明发送的请求需要有通过HTTP认证的认证信息
11 403 Forbidden
对请求资源的访问被服务器拒绝了。(未获得文件系统的访问授权,访问权限出现了问题等都可能出现这个状态码)
12 404 Not Found
服务器上无法找到请求的资源
5XX 服务器错误
响应结果表明服务器本身发生错误
13 500 Internal Server Error
服务器在执行请求是发生了错误
14 503 Service Unavailable
服务器暂时处于超负载或正在进行停机维护,无法处理请求
第五章 与HTTP协作的Web服务器
用单台虚拟主机实现多个域名
HTTP/1.1允许一台HRRP服务器搭建多个web站点。
在相同的IP地址下,由于虚拟主机可以寄存多个不同主机名和域名的web网站。在发送HTTP请求时,必须在Host首部内完整指定主机名或域名的URI
通信数据转发程序:代理、网关、隧道
代理:是一种由转发功能的应用程序,他扮演了位于服务器和客服端中间人的角色
接收客户端发送的请求后转发给其他服务器。大力不改变请求URI
转发时,需要附加Via首部字段已标记出经过的主机信息
使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取日志为主要目的。
缓存代理:代理转发响应时,会预先将资源的副本保存在代理服务器上。当代理再次接收到相同资源的请求时,就可以不从源服务器哪里获取资源
透明代理:转发请求或响应,不对报文做任何加工的代理。
网关:转发其他服务器通信数据的服务器
代理和网关工作机制相似,网关能够使通信线路上的服务器提供非HTTP协议服务
可以提高通信的安全性,客户端与网关之间通信线路上加密以确保连接的安全性
隧道:在相隔甚远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序
隧道的目的确保客户端能与服务器进行安全的通信
隧道在通信双反断开连接时结束
保存资源的缓存
缓存是指代理服务器和客户端本地磁盘中保存的资源副本
缓存的有效期限
当遇上源服务器资源更新,如果还是使用缓存中的资源,那么获得的就是未更新的资源
客户端的缓存
第六章 HTTP首部
HTTP报文首部
首部内容为客服端和服务器分别处理请求和响应提供所需要的信息
HTTP首部字段
首部字段,起到了传递额外重要信息的作用
使用首部字段,给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容
HTTP首部字段由首部字段名和字段值构成,中间用冒号分开
4种HTTP首部字段类型
- 通用首部字段
请求报文和响应报文都会使用的首部 - 请求首部字段
请求报文使用的,补充了请求的额附加内容。客户端信息、响应内容相关优先级等信息 - 响应首部字段
响应报文使用的首部,补充了响应的附加内容,也会要求客户端附加额外的内容信息 - 实体首部字段
两种报文都使用,补充了资源内容更新时间等与实体有关的信息
通用首部字段
Cache-Control
操作缓存的工作机制
public指令,表明其他用户可利用缓存
private指令,响应只以特定的用户作为对象
缓存服务器会对该特定用户提供资源缓存的服务,对于其他用户发送过来的请求,代理服务器则不会返回缓存
no-cache指令,谜底是为了放置从缓存中返回过期的资源
客服端发送这个指令,客户端将不会接收缓存过的响应
服务器返回的响应包含这个指令,缓存服务器不能对这个资源进行缓存
控制可执行缓存的对象的指令,no-store指令。暗示请求会相应中包含机密信息。这个指令规定缓存不能再本地存储请求或响应的任一部分。
指定缓存期限和认证的指令
s-maxage指令 这个指令的功能与max-age相同,但是这个指令只适用于共多位用户使用的公共缓存服务器。
max-age指令 客户端发送的请求含有这个指令,如果缓存资源缓存时间比指定时间小,客户端接收这个缓存。
服务器端返回的响应含有这个指令,缓存服务器将不对资源的有效性在做确认
min-fresh指令 要求缓存服务器返回至少还未过指定时间的缓存资源
max-stale指令 指示缓存资源,即使过期也照常接收
only-if-cached指令
Connection
控制不在转发给代理的首部字段
管理持久连接。断开连接指定Connection的值为Close
Date
表明创建HTTP报文的日期和时间
Pragma
Transfer-Encoding
传输报文主体采用的编码方式
Upgrade
检测HTTP协议以其他协议是否可使用更高端版本进行通信
Via
追踪客户端与服务器之间的请求和响应报文的额传输路径
请求首部字段
Accept
通知服务器、用户代理能够处理的而媒体类型以及媒体类型的相对优先级
Accept-Charset
通知服务器、用户代理支持的字符集以及字符集的相对优先顺序。
Accept-Encoding
通知服务器、用户代理支持的内容编码以及内容编码的优先级顺序
Accept-Language
通知服务器、用户代理能够处理的自然语言及,以及其相对优先级
Authorization
通知服务器、用户代理的认证信息。
Expect
告知服务器,期望出现的某种特定行为。服务器无法理解伏虎的的期望做出的回应,会返回417 expectation failed 状态码
From
告知服务器使用用户代理的用户的电子邮件地址。目的就是为了显示搜索引擎等用户代理的负责人的电子邮件联系方式。
Host
会告知服务器,请求的资源所处的互联网主机名和端口号
虚拟主机运行在同一个IP上,使用Host加以区分
响应首部字段
Accept-Ranges
告知客户端服务器是否能处理方位请求,已制定获取服务器端耨个部分的资源
Age
告知客户端,源服务器在多久前创建了响应
ETag
第七章确保web安全的HTTPS
HTTP的不足之处:
- 通信使用明文,内容可能被窃听
- 不验证通信方的身份,可能遭遇伪装
- 无法证明报文的完整性,可能被篡改
加密处理防止被窃听
如何防止窃听保护信息,最普及的就是加密技术。主要有通信的加密和内容的加密两种。
通信加密
通过SSL(Secure Socket Layer,安全套接层)或TLS(Transport Layer Security,安全层传输协议)的组合使用,加密HTTP的通信内容。通过对通信线路加密处理。
与SSL组合使用的HTTP被称为HTTPS
内容加密
把HTTP报文所含的内容进行加密处理。客户端需要对HTTP报文进行加密处理后再发送请求。为了做到有效的内容加密,客户端和服务器应同时具备加密和解密机制。这种方法不同于通信加密,内容仍有可能被篡改。
不验证通信方的身份就可能遭遇伪装
HTTP协议中的请求和响应不会对通信方进行确认,即存在着以下隐患:
1)无法确定请求发送至目标的Web服务器是否按真实意图返回响应的那台服务器。有可能是伪装的服务器;
2)无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。有可能是已伪装的客户端;
3)无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要信息,只想发给特定用户通信的权限;
4)无法判定请求是来自何方、出自谁手;
5)即使是无意义的请求也会照单全收,无法阻止海量请求下的DOS攻击(拒绝服务攻击)。
虽然HTTP协议无法确定通信方,但是用SSL则可以。SSL不仅提供加密处理,还可以使用一种称为证书的手段,可以用于确定对方。证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。只要确定通信方持有的证书,则可判断通信方的真实意图。另外,客户端持有证书即可完成个人身份的确认,也可用于Web网站的认证环节。
无法证明报文完整性,则有可能被篡改
完整性是指信息的准确度,如果无法证明完整性,则无法判断信息是否准确。因此有可能出现中间人攻击篡改后,服务器和客户端仍不知情。
虽然有使用HTTP协议确定报文完整性的方法,但是这并不便捷可靠。为了有效防止其中弊端,有必要使用HTTPS。SSL提供认证和加密处理及摘要功能。
HTTPS并不是应用层的一种新协议,而是在HTTP通信接口部分用SSL和TLS协议代替。因此,HTTP不再与TCP通信,而是先和SSL通信,再由SSL和TCP通信。因此,HTTPS就是身披着SSL协议这层外壳的HTTP。SSL协议是广泛使用的网络安全技术。