image.png

了解 web 及网络基础

HTTP(HyperText Transfer Protocol): 超文本传输协议

WWW:

  • HTML:超文本标记语言
  • HTTP:文档传递协议
  • URL:指定文档所在的地址

TCP / IP

TCP/IP 是互联网相关的各类协议族的总称:IEEE 802.3 、FDDI 、ICMP、TCP 、IP、DNS、FTP、SNMP、UDP、PPPoE

分层管理

应用层:FTP、DNS、HTTP
传输层:TCP、UDP; 数据分割并打上标记序号及端口号
网络层:IP;增加 MAC 地址
数据链路层:硬件相关(网卡、驱动、光纤等)

封装(encapsulate): 把数据信息包装起来

ARP 协议是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址
IP 协议 的作用是把各种数据包传送给对方

TCP 协议 提供可靠的字节流服务,将大块数据分割成以报文段为单位的数据包进行管理,并且能够确认数据最终是否送达到对方。

三次握手

  • SYN
  • SYN/ACK
  • ACK


    注释:SYN(synchronize) ACK(acknowledgement)

DNS 协议: 提供通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务

简单的HTTP 协议

请求报文:

  • 请求方法
  • 请求 URI
  • 协议版本
  • 可选的请求首部字段
  • 内容实体

响应报文:

  • 协议版本
  • 状态码
  • 用以解释状态码的原因短语
  • 可选的响应首部字段
  • 实体主体

HTTP 是不保存状态的协议,可通过cookie做持久化处理

HTTP 方法

方法 说明
GET 获取资源
POST 传输实体主体
PUT 传输文件
HEAD 获得报文首部
DELETE 删除文件
OPTIONS 询问支持的方法
TRACE 追踪路径
CONNECT 要求用隧道协议连接代理

持久连接

只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。V1.1 所有的连接默认都是持久连接,从而使得管线化方式发送成为可能,即不用等待响应亦可直接发送下一个请求。

Cookie

通过在请求和响应报文中写入cookie信息来控制客户端的状态。cookie 会根据从服务器端发送的响应报文内的 Set-Cookie 的首部字段信息,通知客户端保存 Cookie。当客户端再次发送请求时,会自动在请求报文中加入 Cookie 值后发送出去

HTTP 报文内的 HTTP 信息

编码提升传输速率

压缩传输的内容编码

  • gzip: GUN zip
  • compress: UNIX 系统的标准压缩
  • deflate:zlib
  • identity: 不进行编码

分割发送的分块传输编码

分块传输编码:把主体实体分块,每一块都会用十六进制来标记块的大小。传输编码(Transfer Coding)机制就是作用于分块传输编码中。

发送多种数据的多部分对象集合

MIME(Multipurpose Internet Mail Extensions 多用途因特网邮件扩展): 会使用多部分对象集合的方法来容纳多份不同类型的数据。

**多部分对象集合**(Multipart): 通过Content-Type来指定,使用 boundary 字符串来划分多部分对象集合指明的各类实体。

  • multipart/form-data: 在 Web 表单上传时使用
  • multipart/byteranges:状态码206(Partial Content, 部分内容)响应报文包含了多个范围的内容时使用

获取部分内容的范围请求

可恢复机制:指能从之前下载中断处恢复下载,则需要指定下载的实体范围。
范围请求:指定范围发送的请求,使用 Range 来指定 byte 范围

服务器针对范围请求会返回206,如果无法响应,则返回200及完整的实体内容

内容协商返回最合适的内容

内容协商机制(Content Negotiation): 指客户端和服务端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。判断基准:

  • Accept
  • Accept-Charset: 字符集
  • Accept-Encoding:编码方式
  • Accept-Language:语言
  • Content-Language: 语言

返回结果的 HTTP 状态码

类别 原因短语
1XX 信息 接收的请求正在处理
2XX 成功 请求正常处理完毕
3XX 重定向 需要进行附加操作以完成请求
4XX 客户端错误 服务器无法处理请求
5XX 服务器错误 服务器处理请求出错

常见状态码

200 OK

请求被正常处理

204 No Content

请求处理成功,但没有资源可返回
一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用

206 Partial Content

范围请求
响应报文中包含 Content-Range 指定范围的实体内容

301 Moved Permanently

永久性重定向,URI 已更新

302 Found

临时性重定向,URI 临时更新

303 See Other

使用 GET重新获取资源,URI 已更新

304 Not Modified

资源已找到,但未符合条件请求(If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since),即服务端资源未改变,可直接使用客户端未过期的缓存。

400 Bad Request

请求报文中有语法错误

401 Unauthorized

请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息

403 Forbidden

不允许访问,即未获得文件系统的访问授权

404 Not Found

服务器上没有请求的资源

500 Internal Server Error

服务器端在执行请求时发生了错误,也可能是 Web 应用存在的 bug 或某些临时的故障

503 Service Unavailable

服务器暂时处于超负载或正在进行停机维护

与HTTP协作的Web服务器

用单台虚拟主机实现多个域名

虚拟主机可以寄存多个不同主机名和域名的网站,因此访问的是相同的 IP 地址,在发送 HTTP 请求时,必须在 Host 首部内完整指定主机名或域名的 URI

通信数据转发程序

代理

  • 利用缓存技术减少网络带宽的流量
  • 组织内部针对特定 URI 的访问控制,以获取访问日志为主要目的

网关

可以由 HTTP 请求转化为其他协议通信

隧道

确保客户端能与服务端进行安全的通信

HTTP 首部

通用首部字段

首部字段名 说明
Cache-Control 控制缓存的行为
Connection 逐跳首部、连接的管理
Date 创建报文的日期时间
Pragma 报文指令
Trailer 报文末端的首部一览
Transfer-Encoding 指定报文主体的传输编码方式
upgrade 升级为其他协议
via 代理服务器的相关信息
warning 错误通知

请求首部字段

首部字段名 说明
Accept 用户代理可处理的媒体类型
Accept-Charset 优先的字符串
Accept-Encoding 优先的内容编码
Accept-Language 优先的语言(自然语言)
Authorization web 认证
Expect 期待服务器的特定行为
From 用户的电子邮箱地址
Host 请求资源所在服务器
If-Match 比较实体标记(ETag)
If-Modified-Since 比较资源的更新时间
If-None-Match 比较实体标记(与If-Match相反)
If-Range 资源未更新时发送实体Byte的范围请求
If-Unmodified-Since 比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards 最大传输逐跳数
Proxy-Authorization 代理服务器要求客户端的认证信息
Range 实体的字节范围请求
Referer 对请求中 URI 的原始获取方
TE 传输编码的优先级
User-Agent HTTP 客户端程序的信息

响应首部字段

首部字段名 说明
Accept-Ranges 是否接受字节范围请求
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 实体主体的媒体类型
Expires 实体主体过期的日期时间
Last-Modified 资源的最后修改日期时间

确保 Web 安全的 HTTPS

HTTP 的缺点

  • 通信使用明文(不加密), 内容可能会被窃听
  • 不验证通信方的身份,因此有可能遭遇伪装
  • 无法证明报文的完整性,所以有可能已遭篡改

HTTP + 加密 + 认证 + 完整性保护 = HTTPS

  • 通常 HTTP 直接和 TCP 通信,HTTPS 则是 HTTP 先和 SSL 通信,再由 SSL 和 TCP 通信
  • SSL 是独立于 HTTP 协议的,其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用
  • HTTPS 采用混合加密机制,在交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则使用共享密钥加密方式
  • HTTPS 比 HTTP 要慢 2 到 100倍
  • 与纯文本通信相比,加密通信会消耗更多的 CPU 及内存资源

确认访问用户身份的认证

认证:

  • 密码:只有本人才会知道的字符串信息
  • 动态令牌:仅限本人持有的设备内显示的一次性密码
  • 数字证书:仅限本人(终端)持有的信息
  • 生物认证:指纹和虹膜等本人的生理信息
  • IC 卡:仅限本人持有的信息

BASIC 认证(基本认证)

  • 发送请求
  • 返回401以告知客户端需要进行认证
  • 用户 ID 和 密码以 BASE64 方式编码后发送
  • 认证成功者返回200,认证失败则返回401

BASE64是明文密码,安全级别偏低

DIGEST 认证(摘要认证)

  • 发送请求
  • 返回临时的质询码(随机数,nonce)以告知需要认证的状态码 401
  • 发送摘要以及由质询码计算出的响应码(response)
  • 认证成功者返回200,认证失败则返回401认证成功

安全级别偏低,使用不便捷

SSL客户端认证

  • 将客户端证书分发到客户端
  • 双因素认证:即结合表单认证的密码
  • 需要付费

FormBase认证(表单认证)

  • 发送已登陆信息(ID、密码)
  • 服务器端发送包含Session ID 的 Cookie(Set-Cookie)
  • 客户端发送包含Session ID 的 Cookie(Cookie)

    httponly

基于HTTP的功能追加协议

HTTP 瓶颈

  • 一条连接上只可发送一个请求
  • 请求只能从客户端开始。客户端不可以接收除响应以外的指令
  • 请求/响应首部未经压缩就发送。首部信息越多延迟越大
  • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多
  • 可任意选择数据压缩格式。非强制压缩发送

SPDY

以会话层形式加入,控制对数据的流动,但还是采用HTTP建立通信连接

WebSocket

XMLHttpRequest 虽然可以达到局部 Web 页面替换的效果,但是会产生大量的请求。websocket 可以解决其附带缺陷。

  • 推送功能:服务器可直接发送数据
  • 减少通信量:只要建立起 WS 连接,就希望一直保持连接状态

握手-请求

  • Upgrade: websocket
  • Sec-WebSocket-Key: 记录着握手过程中必不可少的键值
  • Sec-WebSocket-Protocol: 记录使用的子协议

握手-响应

  • 返回101 Switching Protocols
  • Sec-WebSocket-Accept: 是由 Sec-WebSocket-Key 的值生成的

web 的攻击技术

SSH:远程登录协议
通过 URL 查询字段或表单、HTTP 首部、Cookie 等途径将攻击代码传入到HTTP请求报文内

主动攻击

  • SQL 注入攻击
  • OS 命令注入攻击

被动攻击:主要攻击用户的资源和权限