HTTP超文本传输协议
总纲如下(自整理,比较不重要的章节省略):
第一章 了解Web及网络基础
关于部分概念
通常我们使用的网络是在TCP/IP协议族的基础上运行的,HTTP属于它内部的一个子集。在这边就不多介绍TCP/IP了,关于它,可以看更详实的专业书,如谢希仁老师所著的《计算机网络》(第七版)
FTP(File Transfer Protocol)文件传输协议
DNS(Domain Name System)服务提供域名到IP地址之间的解析服务
URI(Uniform Resource Identifier)统一资源标识符,URI用字符串标识某一互联网资源
URL(Uniform Resourcem Locator)统一资源定位符,URL表示资源的地点(互联网上所处的位置)。URL是URI的子集。
绝对URI的格式:
第二章 简单的HTTP协议
HTTP协议规定,请求从客户端发出,最后服务器端响应该请求并返回。换句话说,肯定是从客户端开始建立通信的,服务器端在没有收到接收到请求之前不会发送响应。
HTTP是一种无状态协议,即自身不对请求和响应之间的通信状态进行保存(优点是服务器不必保存状态,可以减少服务器的CPU及内存资源的消耗)。后面为了实现期望的保持状态功能引入了Cookie技术。
HTTP请求报文的组成:请求方法,请求URI,协议版本,可选的请求首字段,内容实体
响应报文的组成:协议版本,状态码,用以解释状态码的原因短语,可选的响应首部字段,实体主体
HTTP方法:
①GET:获取资源
②POST:传输实体主体
③PUT:传输文件,上传文件
④HEAD:和GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间
⑤DELETE:删除文件,与PUT相反,一般不用
⑥OPTIONS:询问支持的方法,用来查询针对请求URI指定的资源支持的方法
⑦TRACE:追踪路径,让Web服务器端将之前的请求通信环回给客户端的方法(客户端TRACE方法被用来确认连接过程中发生的一系列操作,一般不用,容易引起XST跨站追踪攻击)
⑧CONNECT:要求用隧道协议连接代理
TCP短链接:HTTP的初始版本中,每进行一次HTTP通信就要断开一次连接,通信开销大
TCP长连接:只要任意一端没有明确提出断开连接,则保持TCP连接状态,HTTP1.1中,所有的默认为持久连接(管线化方式发送成为可能,可以并行发送多个请求)
第三章 HTTP报文内的HTTP信息
报文结构:
HTTP报文中使用多部分对象集合时:
①需要在首部字段里加Content-type
②使用boundary字符串来划分多部分对象集合指明的各类实体
③多部分对象集合的每个部分类型中,都可以含有首部字段
第四章 返回结果的HTTP状态码
2XX 成功
①200 OK 正常
②204 No Content 服务器接受的请求已成功处理,但返回的响应报文中不含实体的主体部分
③206 Partial Content 表示客户端进行了范围请求,服务器成功执行了这部分的GET请求
3XX 重定向
①301 Moved Permanently 永久性重定向。请求的资源已被分配了新的URI,以后应使用资源现在所指的URI
②302 Found 临时性重定向。
③303 See Other 请求的资源存在着另一个URI,应使用GET方法
④304 Not Modified 表示客户端发送附带条件的请求时,服务器允许请求访问资源,但未满足条件的情况
⑤307 Temporary Redirect 临时重定向与302有相同含义。
(当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改成GET,并删除请求报文内的主体之后请求会自动再次发送)
4XX 客户端错误
①400 Bad Request 请求报文中存在语法错误
②401 Unauthorized 请求需要有通过HTTP(BASIC认证DIGEST认证)认证的认证信息,若之前已进行过一次请求,则表示用户认证失败。
③403 Forbidden 表明对请求资源的访问被服务器拒绝了
④404 Not Found 服务器上无法找到请求的资源
5XX 服务器错误
①500 Internal Server Error 服务器端在执行请求时发生了错误
②503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求
第五章 Web服务器
通信数据转发程序
①代理 只转发不改变URI,充当中间人角色。但转发时,需要附带Via首部字段以标记出经过的主机信息(分类,一种是是否使用缓存:缓存代理,缓存服务器;一种是是否会修改报文:透明代理,非透明代理)
②网关 客户端与客户端之间使用HTTP协议服务,但与服务器之间可以提供非HTTP协议服务。故而可以提高通信安全性,工作机制与代理类似
③隧道 建立安全的通信线路,使用SSL等加密手段进行通信
第六章 HTTP首部
HTTP协议的请求和响应报文中必定包含HTTP首部,首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
首部包含四类如下:
部分笔记整理
通用首部字段:
1.Cache-Control :控制缓存的行为(请求/响应):
①no-cache:强制向源服务器再次验证
②no-store:不缓存请求或响应的任何内容
③......(private,public)
2.Connection:管理持久连接,控制不再转发给代理的首部字段(例如connection:upgrade则把upgrade删除再转发)
3.Date:日期
4.trailer:报文末端的首部一览
5......
(no-cache可以在本地缓存,也可以在代理服务器缓存,但需要服务器验证才可以,no-store则彻底禁用缓存)
关于Cookie管理的首部字段:
1.set-cookie:
①expires:指定浏览器可发送Cookie的有效期
②path:限制指定Cookie的发送范围的文件目录
③domain:不使用更安全
④secure:仅HTTPS才可以发送Cookie
⑤httponly:防止跨站脚本攻击
2.......
第七章 确保Web安全的HTTPS
1.HTTP的缺点:
①通信使用明文可能会被窃听(加密)
②不验证通信方的身份可能遭遇伪装(证书认证)
③无法证明报文完整性,可能遭到篡改(加密算法,数字签名)
2.解决缺点即是HTTPS:
①HTTP+加密(SSL)+认证+完整性保护=HTTPS
②HTTPS是身披SSL外壳的HTTP
③相互交换密钥的公开密钥加密技术
3.HTTPS采用混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者并用的混合加密机制,在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式。(提高处理速度)
4.公开密钥证书由数字证书认证机构和其相关机关颁发
流程如下:
①服务器运营人员向数字证书认证机构提出公开密钥的申请
②数字证书认证机构在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公钥证书后绑定在一起
③服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。
④接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证。
(多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥,用以保证认证机关的公开密钥安全转交到用户客户端)
5.完整HTTPS安全通信机制
①SSL握手阶段:
步骤1:客户端通过发送Client Hello报文开始SSL通信
步骤2:服务器可进行SSL通信时,会以Server Hello报文作为应答
步骤3:服务器发送Certificate报文,报文中包括公开密钥证书
步骤4:最后服务器发送Server Hello Done报文通知客户端,最初的SSL握手协商结束
②SSL连接建立:
步骤5:SSL握手结束后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种被称为Pre-master secret的随机密码串。该报文已用步骤3中公开密钥进行加密。
步骤6:接着客户端会发送Change Cipher Spec的报文。该报文会提示服务器,在此报文之后的通信会采用Pre-master secret密钥加密
步骤7:客户端发送Finished报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。
步骤8:服务器同样发送Change Cipher Spec报文
步骤9:服务器同样发送Finished报文
③HTTP通信建立:
步骤10:Finished报文交换完毕之后,SSL连接建立完成。通信受到SSL的保护,从此开始应用层协议的通信,发送HTTP请求。
步骤11:应用层协议通信,即发送HTTP响应。
步骤12:最后由客户端断开连接。断开连接时,发送close_notify报文。
(在以上流程中,应用层发送数据时会附加一种叫做MAC的报文摘要,MAC能够查知报文是否遭到篡改,从而保护报文的完整性)
第八章 确认访问用户身份的认证
1.SSL客户端认证
需要事先将客户端证书分发给客户端,且客户端必须安装此证书,与上面的流程相似,这边省略,一般会和基于表单认证组合形成一种双因素认证来使用。
2.基于表单认证
一般情况就是用户账号密码
(大部分情况下认证都是基于表单认证,SSL客户端认证虽然具有高度安全性,但由于导入及维持费用,尚未普及)
3.Session管理及Cookie应用
步骤1:客户端把用户ID和密码等登陆信息放入报文的实体部分,通常以POST方法把请求发送给服务器。而这时,会使用HTTPS通信来进行HTML表单画面的显示和用户输入数据的发送。
步骤2:服务器会发送用以识别用户的Session ID。通过验证从客户端发送过来的登陆信息进行身份认证,然后把用户认证状态与Session ID绑定后记录在服务器端。
(Session ID使用难以推测的字符串,同时服务器端也需要进行有效期的管理,保证安全性。另外,为减轻跨站脚本攻击XSS造成的损失,建议事先在Cookie内加上httponly属性)
步骤3:客户端接收到从服务器端发来的Seeion ID后,会将其作为Cookie保存在本地
第九章 基于HTTP的功能追加协议
1.使用浏览器进行全双工通信的WebSocket
2.HTTP/2.0
3.web服务器管理文件的WebDAV
第十章 构建Web内容的技术(略)
第十一章 Web的攻击技术
1.XSS跨站脚本攻击
2.SQL注入攻击
3.DDoS攻击
4.······
(Web攻击主要分为两类主动攻击和被动陷阱触发攻击,这边基本上只是简单的了解,需要找一些书籍做更深入的探索)