图解HTTP(读书笔记)

HTTP超文本传输协议

总纲如下(自整理,比较不重要的章节省略):


图解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的格式:

绝对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攻击主要分为两类主动攻击和被动陷阱触发攻击,这边基本上只是简单的了解,需要找一些书籍做更深入的探索)

你可能感兴趣的:(图解HTTP(读书笔记))