【 第一部分 】 HTTP相关内容
写在前面
春节期间,抽空看完了《 图解HTTP 》 全书 豆瓣评分8.1 这几天正好空闲,趁着这股热乎劲儿,将书中一下重点知识进行了归纳总结,方便日后查阅。
简单聊一下读后感 :全书共11个章节,前面几章主要介绍HTTP通信相关的知识,也就是围绕从输入URL到页面展示话题展开,完整讲解了HTTP的通信原理和通信过程,文中穿插着许多生动形象的图片,非常有利于读者理解,帮助读者快速了解HTTP协议;面几章主要介绍了一些加密手段和web攻击技术,内容点到即止,没有深入的阐述属于科普性质。
随便提一下,为了更好的阅读体验,可点击下方链接,访问我在wolai的读书笔记【没有广告!!!】
HTTP/HTTPS定义
- 超文本传输协议/超文本安全传输协议
HTTP 的诞生主要是为了解决文本传输的难题
TCP/IP与HTTP的关系
-
TCP/IP 是互联网相关的各类协议的总称
-
TCP/IP 采取分层管理(4层)
-
应用层 :决定向用户提供服务时通信的活动 【HTTP】【FTP】【DNS】
-
传输层 : 提供处于网络链接中两台计算机之间的数据传输 【TCP】【UDP】
-
网络层 : 处理在网络上流动的数据包 【IP】
数据包是网络传输的最小单位
-
数据链路层 : 用来处理连接网络的硬件部分 【硬件的设备驱动】【网卡】【光纤】
-
HTTP 是TCP/IP的子集,属于TCP/IP分层结构中的应用层
IP协议、TCP协议、DNS 名词解释
-
IP协议 :TCP/IP协议集合中的网络层,主要作用的将数据包传送给对方
要确保数据能正确的传输给目标方,需具备以下条件
1. IP地址 :指明节点被分配到的地址 【IP地址通常是可变的】
2. MAC地址 :网卡所属的固定地址 【MAC地址通常是不变的】 -
TCP协议 :TCP属于传输层,提供可靠的字节流服务
要确保数据能真情的传输给目标方,TCP采取三次握手的形式,确保数据成功发送!
-
DNS : 属于应用层,主要负责域名解析即将域名解析为IP,或将IP转换为对应域名
TCP/IP的通信流程
-
客户端在应用层发起http请求
-
TCP传输层将数据(HTTP请求 报文)进行分割,并在各个报文上打上标记序号以及端口号,然后转发给网络层
-
网络层(IP协议)增加作为通信目的地的MAC地址后转发给数据链路层
-
接收端服务器在数据链路层接收到数据,按序往上层发送,一直到应用层。
-
当响应数据传输到应用层,一次请求完成
从输入URL 到页面展示的过程
HTTP协议介绍
- 无状态
HTTP是无状态的协议,为了实现状态保持功能,后续引入cookie 技术
- 持久链接:keep-alive
在HTTP初始协议中,每进行一次HTTP通信,就要断开一次TCP连接,大量的TCP连接和断开会增加通信量的开销。
为了解决上述问题,HTTP/1.1 和一部分HTTP/1.0 提出持久连接的方法。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态
- 管线化
持久连接使得多数请求以管线化的方式发送成为可能,以往发送请求后需等待并收到响应,才能发送下一个请求,管线化技术实现后不用等待响应亦可直接发送下一个请求。【并行发送多个请求】
- 使用Cookie 管理状态
cookie 技术通过在请求和响应报文中写入Cookie 信息来控制客户端的状态
- 根据响应报文的set-cookie 的首部字段,通知客户端写入cookie
- 当下次客户端向服务器发送请求时自动在请求报文中加入Cookie 的值发送给客户端
HTTP报文介绍
报文是HTTP通信中的基本单位 [ 由8 位字节流组成 ]
报文类型
- 请求报文
请求报文由 【请求方法】【请求URI】【http协议版本】【请求首部字段】【内容实体构成】
- 响应报文
响应报文由 【协议版本】【状态码】【状态码解释短语】【可选的响应首部字段】【内容实体】
报文内容
-
报文首部 :内容和属性
-
报文主体 :传输的数据
报文首部和报文主体通过空行分割
报文结构
- 请求行/响应行
请求行 :【请求方法】 + 【URI】 + 【HTTP协议版本号】
响应行 :【状态码】 + 【状态码解释短语】 + 【HTTP 协议版本】
-
请求首部字段 / 响应首部字段
-
通用首部字段
-
实体始于字段
通过编码提升速度
-
压缩传输内容的编码
-
gzip ( GNU zip )
-
compress ( UNIX 系统的标准压缩 )
-
deflate ( zlib )
-
identify ( 不进行编码 )
-
-
分割发送的分块传输编码
在传输大量内容时,通过将数据分割成多块,能够让浏览器逐步显示页面,分块传输码会将实体主体分割成多个部分( 块 )。每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用 【 0(CR + LF ) 】来标记
发送多种数据的多部分对象集合
发送的一份报文主体可含有多种类型的实体。( 通常在是上传文件或者图片的时候使用 )
-
多部分对象集合包含的对象如下
-
multipart / form-data : 在web上传表单的时候使用
-
multipart / byteranges : 状态码206,响应报文包含多个范围内容的时候使用 【分段上传】
-
内容协商返回最合适的内容
-
服务器驱动协商
-
客户端驱动协商
-
透明协商 ( 服务器驱动+ 客户端驱动 )
常见状态码
状态码 | 状态码描述短语 | 备注 |
200 | OK | |
204 | No Content | 请求已成功处理,但响应中不含报文主体即数据 |
206 | Partical Content | 分段范围请求成功 |
301 | Moved Permanently | 永久性重定向,通过响应报文的location字段指定新的URL |
302 | Found | 临时性重定向 |
303 | See Other | 资源的URI 已经更新,应使用GET 访问新的URL |
304 | Not Modified | 资源已找到,但未符合条件请求,不包含任何响应主体 |
307 | Temporary Rediect | 临时重定向 |
400 | Bad Request | 请求报文存在语法错误,服务器无法理解 |
401 | Unauthorized | 未授权 |
403 | Forbidden | 访问被拒绝 |
404 | Not Found | 资源未找到,通常是URI 出了问题 |
500 | Internal Server Error | 服务器内部错误 |
503 | Service Unavailable | 服务不可用,服务器超负载或正在停机维护 |
WEB 服务器相关知识
- 代理 : 客户端和服务端的中间人,具有转发功能的应用程序。
代理转发时需要附加Via 字段标记经过的主机信息
使用代理的优点: 利用【缓存】技术【减少网络带宽】、组织内部针对特定的网站的设置【访问控制】、【获取访问日志】
-
网关 : 利用网关可以实现将HTTP请求转换为其它通信协议
-
隧道 :建立一条与其它服务器的通信线路,确保客户端能与服务器进行安全的通信
重要的HTTP首部字段
-
content-type :报文主体对象的媒体类型
-
cache-control :操作缓存相关指令
指令 | 参数 | 说明 |
no-cache | - | 每次都得向源服务器确认 |
no-store | - | 彻底不使用缓存 |
max-age=[秒] | 必须 | 响应最大的age值,即缓存的有效时间 |
max-state=[秒] | 可省略 | 接受已过期的响应,即响应过期多少秒以内仍可使用 |
min-fresh=[秒] | 必须 | 期望在指定时间内响应仍有效 |
-
Via : 追踪客户端与服务器之间的请求和响应报文的传输路径 ( 跟踪经过的代理和网关 )
-
Accept : 告知服务器,客户端能够处理的媒体类型及其优先级,反之亦然
使用q= 来表示优先级,优先级范围0—1 ,1为最大值
-
Accept-Charset : 告知服务器支持的字符集及其优先级,反之亦然
-
Accept-Encoding : 告知服务器支持的内容编码及其优先级,反之亦然
-
Host : 告知主机名
-
Range : 范围请求,如果服务器支持则返回状态码206及请求的范围资源,否则返回200和全部资源
-
User-Agent : 浏览器的种类
-
Age : 源服务器在多久前建立的响应
-
Etag : 资源的标记,由服务器分配
-
Location : 重定向时用于指定新的URL
【第二部分】HTTPS及web安全相关知识
HTTPS = 【HTTP】+ 【加密】+ 【认证】+【完整性保]
HTTPS比HTTP慢2到100倍
HTTP 的缺点
-
通信使用明文(不加密),内容可能会被窃听
HTTP 本身不具备加密功能
-
不验证通信方的身份**,有可能在于****伪装**
-
无法验证报文的完整性,报文有可能被****篡改
HTTPS 介绍
HTTPS = 【HTTP】+ 【加密】+ 【认证】+【完整性保护】
HTTPS 并非是应用层的的新协议,知识http通信接口部分用SSL和TLS协议替代而已,通常HTTP直接和TCP通信。当使用SSL时,则演变成先和SSL通信,再由SSL和TCP通信。
加密技术
-
通信的加密 :比如
ssl
( 安全套接层 ) 或tls
( 安全层传输协议 ) 的组合使用以此加密HTTP的通信内容 -
内容的加密 :对报文进行加密后在发送,要求客户端和服务端同时具备加密和解密机制
加密方法
近代加密算法中加密算法是公开的,密钥是保密的,加密和解密通用一个密钥的方式称为共享密钥加密,也称作对称密钥加密,
-
共享密钥加密的缺点 :密钥交换时是不安全的,如果在密钥交换的图中密钥被监听,那么就失去了加密的意义。
-
公开密钥加密: 使用一对非对称的密钥,一把叫私有密钥,一把叫共有密钥。私有密钥不得让任何人直到,公开密钥则可以随意发布。报文发送时使用公开密钥加密,接收方使用私有密钥解密。
-
HTTPS采用混合的加密方式 : 在交换密钥的环节使用公开密钥加密方式,待密钥交换完成后则使用共享密钥加密的方式,以较快处理速度。
web 攻击技术
WEB 服务器上的应用和资源是攻击的目标
针对web应用的攻击技术
-
主动攻击 【SQL注入攻击】 【OS命令注入攻击】
-
被动攻击 【跨站脚本攻击】 【跨站请求伪造】
跨站脚本攻击 【XSS】
通过存在安全隐患的Web网站注册用户的浏览器运行非法的HTML标签或者JS进行攻击
可能造成的影响:
-
利用虚假表单骗取个人信息
-
利用脚本窃取用户的cookie, 在用户不知情的情况下帮助攻击者发送恶意请求
-
显示伪造的文章或图片
SQL注入攻击
通过运行非法的SQL语句产生攻击
可能产生的影响
-
非法查看或篡改数据库内的数据
-
规避认证
-
执行和数据库服务器关联的程序等
强制浏览
从安置在web服务器上的公开的文件目录中,浏览哪些非资源公开的文件,从而导致信息泄露 【网站设计的漏洞】
(完)