《图解HTTP》笔记
HTTP(Hyper Text Transfer Protocol):超文本传输协议
TCP/IP基础
- HTTP是TCP/IP协议族的一个子集
- TCP/IP协议族分层:
应用层 | 传输层 | 网络层 | 链路层 |
---|---|---|---|
目的 | 决定了向用户提供应用服务时通信的活动 | 对上层应用层提供处于网络连接中的两台计算机之间的数据传输 | 处理在网络上流动的数据包 |
协议 | FTP、DNS | TCP、UDP |
- 传输流:HTTP请求–>TCP分割–>IP增加通信目的地MAC
IP协议
IP协议:位于网络层,把各种数据包传送给对方
条件:
- IP地址:指明节点被分配到的地址
- MAC地址:网卡所属的固定地址
ARP协议凭借MAC地址进行通信,是一种解析地址协议,通过IP反查对方MAC
TCP协议
TCP协议:位于传输层,提供可靠的字节流服务
字节流服务:为了方便传输,将大块数据分割成以报文段为单位的数据包进行管理
三次握手:
发送端发送标有SYN的数据包,接收端返回SYN/ACK数据包,发送端发送标有ACK的数据包
DNS服务
Domain Name System 位于应用层,提供域名到IP地址之间的解析服务
URI和URL
URI:Uniform Resource Identifier 统一资源标识符,即网络资源地址
URL:Uniform Resource Locator 统一资源定位符,即网址
可见URL是URI的子集
HTTP协议
请求报文由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体组成
HTTP是一种无状态协议
HTTP方法
请求方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0\1.1 |
POST | 传世实体主体 | 1.0\1.1 |
PUT | 传输文件 | 1.0\1.1 |
HEAD | 获得报文首部 | 1.0\1.1 |
DELETE | 删除文件,与PUT相反 | 1.0\1.1 |
OPTIONS | 询问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理,主要是SSL和TLS | 1.1 |
LINK/UNLINK | 建立/断开资源之间的联系 | 1.0 |
Cookie技术
通过在请求和响应报文中写入Cookie信息来控制客户端的状态
HTTP报文内的HTTP信息
分类:报文首部和报文主体
首部内容组成:
- 请求行:包含用于请求的方法、请求URI和HTTP版本
- 状态行:包含表明响应结果的状态码、原因短语和HTTP版本
- 首部字段:包含表示请求和响应的各种条件和属性的各类首部
报文(message)是HTTP通信中的基本单位,由8位组字节流组成
实体(entity)作为请求或响应的有效载荷数据被传输
内容编码种类:gzip、compress、deflate、identity
HTTP状态码
状态码 | 类别 | 说明 |
---|---|---|
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
200 | Success(成功状态码) | 请求正常处理完毕 |
204 | No Content | 请求处理完毕但是没有资源返回 |
206 | Partial content | 对资源某一部分的请求 |
301 | Moved Permanently | 永久性重定向 |
302 | Found | 临时性重定向 |
303 | See Other | 应使用GET方法定向获取请求的资源 |
304 | Not Modified | 发送附带条件的请求时,服务器允许请求访问,但未满足条件 |
307 | Temporary Redirect | 临时重定向,不会从POST变成GET |
400 | Bad Request | 请求报文中存在语法错误 |
401 | Unauthorized | 请求需要通过认证 |
403 | Forbidden | 对请求资源的访问被服务器拒绝 |
404 | Not Found | 无法找到请求资源 |
501 | Internal Server Error | 内部资源故障 |
503 | Service Unavailable | 服务器暂时处于超负载或者正在进行维护 |
总结:
- 2XX 成功,请求正常处理完毕
- 3XX 重定向,需要进行附加操作以完成请求
- 4XX 客户端错误,服务器无法处理请求
- 5XX 服务器错误,服务器处理请求出错
Web服务器
代理
具有转发功能的应用程序
使用代理服务器的理由:
- 利用缓存技术减少网络带宽流量
- 组织内部针对特定网站的访问控制
- 以获取访问日志为主要目的
使用分类:
- 是否使用缓存:缓存代理预先将资源副本保存在服务器上
- 是否修改报文:对报文不做任何加工的代理成为透明代理
网关
转发其他服务器通信数据的服务器
利用网关提高通信的安全性,因为可以在客户端和网关间的通信线路上加密
隧道
在相隔甚远的客户端和服务器之间进行中转,并保持双方通信连接的应用程序
目的:安全通信
本身不会解析HTTP请求
HTTPS
HTTP的缺点:
- 明文传输,会被窃听
- 不验证通信方身份,遭遇伪装
- 无法证明报文完整性,会被篡改
SSL:Secure Socket Layer
TLS:Transport Layer Security
SSL不仅提供加密处理,还使用了一种被称为证书的手段,用于确定通信方身份
伪造证书从技术角度来说是一件异常困难的事情
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
流程:HTTP先和SSL通信,SSL再和TCP通信……
HTTPS采用混合加密机制:先用非对称加密对称密钥,确保对称密钥安全,之后就基于对称密钥加密传输
SSL慢:1.通信慢 2.大量消耗CPU及内存资源,导致处理速度慢
确认访问用户身份的认证
HTTP使用的认证方式
HTTP/1.1使用的认证方式:
- BASIC认证 (几乎不使用)
- DIGEST认证 (几乎不使用)
- SSL客户端认证:借由HTTPS客户端证书完成认证,会和表单认证组合形成双因素认证
- FormBase认证:目前认证多为此种方法
由于HTTP是无状态协议,我们使用Session和Cookie弥补状态管理
在Cookie内加上httponly属性以减少XSS造成的损失
安全保存用户名密码的方式:先给密码加盐的方式增加额外信息,再使用hash计算散列值后保存
基于HTTP的功能追加协议
HTTP的瓶颈
以下标准成为瓶颈:
- 一条连接上只可发送一个请求
- 请求只能从客户端开始。客户端不可以接收除响应以外的指令
- 请求/响应首部未经压缩就发送。首部信息越多延迟越大
- 发送冗长的首部。每次互相发送相同的首部造成的浪费较多
- 可任意选择数据压缩格式。非强制压缩发送
AJAX的解决方案
- AJAX(Asynchronous JavaScript and XML)异步JavaScript与XML技术
- 是一种有效利用JavaScript和DOM的操作,以达到局部Web页面替换加载的异步通信手段
- 核心技术:XMLHttpRequest的API
Comet的解决方案
通过延迟应答,模拟实现服务器端向客户端推送(Server Push)的功能
消除瓶颈的SPDY
- 在TCP/IP的应用层和传输层之间通过新加会话层的形式运作,它介于TCP(SSL)和HTTP之间
- 考虑到安全问题,SPDY规定通信中使用SSL
优势:
- 多路复用
- 赋予请求优先级
- 压缩HTTP首部
- 推送功能
- 服务器提示功能
WebSocket
- 即Web浏览器和Web服务器之间全双工通信标准
协议主要特点:
- 推送功能:由 服务器向客户端推送数据的推送功能
- 减少通信量:首部信息小
Web服务器管理文件的WebDAV
- WebDAV(Web-based Distributed Authoring and Versioning)基于万维网的分布式创作和版本控制
- 是一个可对Web服务器上的内容直接进行文件复制、编辑等操作的分布式文件系统
构建Web内容的技术
HTML、CSS、JS
动态HTML
- Dynamic HTML 是指使用客户端脚本语言将静态的HTML内容变成动态的技术的总称
- 通过客户端脚本语言JavaScript实现,利用DOM可指定欲发生动态变化的HTML元素
CGI
- Common Gateway Interface 通用网关接口
- 是指Web服务器接收到客户端发送过来的请求后转发给程序的一组机制,在CGI作用下,程序会对请求内容做出相应的动作,比如创建HTML等动态内容
Servlet
- Java Servlet 是一种能在服务器上创建动态内容的程序,Servlet是用Java语言实现的一个接口,属于J2EE一部分
- Servlet的运行环境叫做Web容器或Servlet容器
XML
- eXtensible Markup Language 可扩展标记语言
- 是一种可按应用目标进行扩展的通用标记语言,其从XML文档中读取数据比HTML更简单
JSON
- JavaScript Object Notation
- 是一种以JavaScript的对象表示法为基础的轻量级数据标记语言,让数据更轻更纯粹
Web攻击技术
主动攻击中最具代表的攻击:SQL注入、OS命令注入
XSS
- Cross-site Scripting 跨站脚本攻击
- 指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JS进行的攻击
造成的影响:
- 利用虚假输入表单骗取用户个人信息
- 利用脚本窃取用户的Cookie值,伪造恶意请求
- 显示伪造的文章或图片
SQL注入
- SQL Injection 针对Web应用使用的数据库,通过非法SQL语句产生的攻击
造成的影响:
- 非法查看或篡改数据库内的数据
- 规避认证
- 执行和数据库服务器业务关联的程序等
OS命令注入
OS Command Injection 通过Web应用,执行非法的操作系统命令达到攻击目的。
在调用Shell函数的地方就有风险
HTTP首部注入
- HTTP Header Injection 指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的攻击。
- 属于被动攻击
造成的影响:
- 设置任何Cookie信息
- 重定向至任意URL
- 显示任意的主体
CSRF
- Cross-site Request Forgeries 跨站请求伪造
- 攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击
造成的影响:
- 利用已通过认证的用户权限,更新设定信息等
- 利用已通过认证的用户权限,购买商品
- 利用已通过认证的用户权限,发表言论
DoS攻击
- Denial of Service attack 是一种让运行中的服务呈停止状态的攻击
方式:
- 集中利用访问请求造成资源过载,资源用尽的同时,实际上服务也呈停止状态
- 通过攻击安全漏洞使服务停止
多台计算机发起的DoS攻击称为DDoS攻击,通常利用感染病毒的计算机作跳板
后门程序
- Backdoor 指开发设置的隐藏入口,可不按正常步骤使用受限功能
类型:
- 开发阶段作为Debug调用的后门程序
- 开发者为了自身利益植入的后门程序
- 攻击者通过某种方法设置的后门程序