http 1.1 协议基础知识;https 安全协议加密、解密处理;
http 协议基础
浏览器地址栏中输入URL访问一个HTML页面,首页通过DNS域名系统解析到对应的服务IP信息;由HTTP协议生成的请求报文传输至传输层(TCP协议);TCP将数据字节流传输至网络层(IP协议),网络传输至(经过网卡、网线、路由器等)目标机器。
TCP/IP协议层
- 应用层:提供给用户的服务通信。比如:FTP(文件传输协议)、DNS(域名系统)、HTTP(超文本传输)
- 传输层:TCP(可靠传输)、UDP
- 网络层:传输数据包,确定传输路线。
- 数据链路层:连接网络的硬件部分,包括操作系统、设备驱动、网卡、光纤等。
请求报文有请求方法、请求URI、协议版本、可选的请求首部字段和实体内容。
// 方法、URI、协议版本
POST /user HTTTP/1.1
// 请求头部字段
HOST:localhost
Connection:keep-live
Content-Type:application/json
content-Length:10
// 实体内容
name=admin
响应报文由协议版本、状态码、状态解释语、响应首部字段及实体内容构成。
// 协议、状态码、状态解释语
HTTP/1.1 200 OK
// 响应首部
Date:Sun, 16 Aug 2020 03:16:17 GMT
Content-Length:430
Content-Type:application/json; charset=UTF-8
// 实体内容
{“id”:"321d321sa443",//...}
http 方法
方法 | 释义 | |
---|---|---|
GET | 获取资源 | |
POST | 传输实体内容 | |
PUT | 传输文件 | 将报文主体中的文件内容保存到请求的URI指定的位置。 |
HEAD | 获取报文首部信息,不返回主体内容 | 用于确认URI的有效性及资源的更新日期 |
DELETE | 删除文件 | 按请求URI删除指定的资源 |
OPTIONS | 询问针对请求URL支持的方法 | |
TRACE | 追踪请求连接过程中的一系列操作 | XST(跨站追踪)攻击 |
CONNECT | 要求使用隧道协议连接代理, | SSL(安全套接层)或TLS(传输层安全)加密通信内容进行传输 |
提升传输速率
通过在传输时编码,能有效处理大量的访问请求。
- 内容编码压缩传输:gzip(GNU zip)/compress(UNIX系统的标准压缩)/deflate(zlib)/identity(不进行编码)
- 分割传送的分块传输编码:将实体内容分成多个部分,每一块需要使用十六进制标记快大小;最后一块使用“0”标记。
- 多种数据类型的数据对象集合,文本、视屏、图片等,格式不限于:multiple/form-data 、multiple/byteranges
- 范围请求部分内容,比如断点续传;通过首部字段
Range
指定请求资源的字节范围。 - 内容协商,客户端和服务端通过首部字段交涉判断。
http 状态码
状态码 | 释义 | 说明 | |
---|---|---|---|
1** | 信息类状态码 | 请求正在处理 | |
2** | 成功状态码 | 请求正常处理完毕 | 200:响应成功返回 204:响应成功,响应没有实体内容 206:范围请求 |
3** | 重定向 | 需要进行附加操作已完成请求 | 301:永久性重定向,资源已分配新的URL 302:临时性重定向,希望采用get方法请求资源 303:使用get方法从另一个URI获取资源 304:资源未更新、可使用缓存 307:临时重定向 |
4** | 客户端错误 | 400:请求存在错误 401:需要认证 403:不允许访问该资源 404:未找到指定资源 | |
5** | 服务端错误 | 500:服务端存在错误 503:服务器无法处理请求,处于超负载或停机维护 |
http 首部字段
首部字段重复,会根据浏览器不同处理不同。
通用首部字段:
字段名 | 释义 | 请求指令 | 响应指令 |
---|---|---|---|
Cache-Control | 控制缓存的行为 | no-cache:强制像服务器再次验证 no-store:不缓存任何请求或响应内容 max-age=[秒]:响应最大Age值 | public:向任意方提供缓存 private:仅向特定用户返回响应 no-cache:缓存前先确认有效性 no-store:不缓存请求或响应内容 max-Age=[秒]响应的最大Age值 |
Connection | 逐跳首部、连接管理 | 管理不转发的首部字段名 close:断开连接 keep-live:持续连接 | 同 |
Date | 报文日期时间 | ||
Pragma | 报文指令 | ||
Trailer | 报文末端首部一览 | ||
Transfer-Encoding | 指定报文主体传输编码方式 | ||
Upgrade | 协议升级 | ||
Via | 代理层相关信息 | ||
Warning | 错误通知 | 110:代理返回一过期的资源 111:代理验证资源有效性时失效 112:代理与互联网连接被故意切断 | 同 |
请求首部字段:
字段名 | 释义 | 指令 |
---|---|---|
Accept | 用户代理可处理的媒体类型 | 文本:text/html、text/plain/text/css 图片:image/jpeg、image/gif 视频:vide/mpeg 二进制文件 |
Accept-Charset | 优先的字符集 | |
Accept-Encoding | 优先的内容编码 | gzip/compress/deflate/identity |
Accept-Language | 优先的语言 | |
Authorization | Web认证信息 | |
Expect | 期待服务器的特定行文 | |
From | 用户的电子邮箱 | |
Host | 请求资源所在服务器 | |
if-Match | 比较实体标记(ETag) | |
if-Modified-Since | 比较资源的更新时间 | |
if-None-Match | 比较实体标记(不匹配) | |
if-Range | 发送实体byte的范围请求 | |
if-Unmodified-Since | 比较资源的更新时间(不匹配) | |
Max-Forwards | 最大传输逐跳数 | |
Proxy-Authorization | 代理服务器要求的客户端信息 | |
Range | 实体范围请求 | |
Referer | ||
TE | 传输编码的优先级 | |
User-Agent | 客户端信息 |
响应首部字段:
字段名 | 释义 | |
---|---|---|
Accept-Range | 是否接受字节范围请求 | |
Age | 推算资源创建经过时间 | |
ETag | 资源的匹配信息 | |
Location | 令客户端重定向至指定URI | |
Proxy-Authenticate | 代理服务器对客户端的认证信息 | |
Retry-After | 对再次发起请求的时机要求 | |
Server | HTTP服务器的安装信息 | |
Vary | 代理服务器缓存的管理信息 | |
WWW-Authenticate | 服务器对客户端的认证信息 |
实体首部字段:
字段名 | 释义 | |
---|---|---|
Allow | 资源支持的HTTP方法 | |
Content-Encoding | 实体主体适用的编码方式 | |
Content-Language | 实体主体的自然语言 | |
Content-Length | 实体主体内容的大小(字节数) | |
Content-Location | 替代资源的URI | |
Content-MD5 | 实体主体的报文摘要 | |
Content-Range | 实体主体的位置范围 | |
Content-Type | 实体主体适用的媒体类型 | |
Expire | 实体主体过期的日期时间 | |
Last-Modified | 资源的最后修改日期 |
端到端首部必须转发到目标服务器;逐跳首部只对单次转发有效,包括:Connection、Keep-Alive、Proxy-Authenticate、Proxy-Authori、Trailer、TE、Transfer-Encoding/Upgrade。其他均为端到端首部。
Cookie
用作HTTP无状态特性的补充。可用于用户信息识别及状态管理。
字段名 | 释义 | 指令 |
---|---|---|
Cookie | 服务器接受到的请求Cookie信息 | |
set-Cookie | 服务器响应的状态管理Cookie信息 | NAME=VALUE:赋予cookie的名称、值 expires=DATE:cookie有效期 path=PATH:服务器上的文件目录 domain=域名:默认服务器域名 Secure:仅在HTTPS安全通信下发送cookie HttpOnly:Cookie不能被JS脚本访问 |
扩展首部字段
字段名 | 释义 | 指令 |
---|---|---|
X-Frame-Options | 响应首部,控制页面Frame标签显示问题,防止点击劫持攻击 | DENY:拒绝 SAMEORIGN:同源域名下页面访问 |
X-XSS-Protection | 响应首部,防止跨站脚本攻击(XSS) | 0:无效 1:有效 |
DNT | 请求首部,拒绝个人信息收集,拒绝精准广告追踪 | 0:同意追踪 1:拒绝被追踪 |
P3P | 响应首部,在线隐私偏好,保护用户隐私 |
HTTPS
http协议的不足:
- 通信使用明文传输,内容可能会被窃听;
- 无法验证通信方的身份,遭遇跨站点伪造请求攻击;
- 无法验证报文完整性,可能会被篡改(中间人共计,MITM);
那么https是什么:
- https是由http协议和SSL(安全套接层)组合对通信加密,拥有认证机制。
不是新协议 - https采用混合加密机制:共享秘钥加密和公开密钥加密混合的加密机制。
使用公开秘钥通信,确认安全后,交换共享秘钥;后续的通信使用共享秘钥加密;
HTTP 2.0
改善用户在使用时的速度体验:通信速度、性能。
7项技术及讨论:
- 多路复用 - SPDY
- TLS义务化 - Speed+Mobility
- 协商 - Speed+Mobility,Friendly
- 客户端拉曳/服务端推送 - Speed+Mobility
- 流量控制 - SPDY
- WebSocket - Speed+Mobility
web 攻击
主动攻击,主动访问web应用程序,传入攻击代码:SQL注入统计、OS命令注入攻击
被动攻击,利用圈套策略执行了攻击代码:跨站脚本攻击(XSS)、跨站请求伪造(CSRF)、HTTP首部注入攻击
XSS
攻击者使用动态创建的HTML运行非法HTML片段或JavaScript脚本进行攻击。
造成影响:
- 窃取用户个人信息。
- 利用脚本获取用户Cookie值
- 显示伪造的文本或 图片。
SQL
通过运行非法的SQL语句进行攻击。
造成影响:
- 非法查看或篡改数据库内的数据
- 规避认证
- 执行和数据库服务器业务关联的程序
HTTP 首部注入攻击
拦截响应并在相应中添加首部字段。
造成影响:
- 设置任何Cookie信息。
- 重定向至任意URL
- 显示任意响应主体。