HTTP 图解知识梳理

1. 了解web及网络基础

  • 网络基础TCP/IP
    • 协议:所有不同的硬件,操作系统之间的通信规则
    • TCP/IP概念:与互联网相关联的集合
    • 分层管理:
      • 应用层:决定向用户提供应用服务时的通信活动。TCP/IP协议族内预存了各类通信的应用服务,如FTP和DNS及HTTP。
      • 传输层:对上层应用层,提供处于两台网络连接中的两台计算机之间的数据传输。包含两个性质不同的协议(TCP:transmission Control Protocol,UDP:User Data Protocal)
      • 网络层:处理在网络中流动的数据包(网络传输的最小数据单位)。决定通过怎样的传输路线到达对方计算机并把数据包传达。通常作用是在众多选项内选择一条传输路线。
      • 数据链路层: 用来处理网络的硬件部分(OS,驱动,NIC网卡及光纤)。
    • 发送端在层间传输数据时,每经一层被打上该层所属的首部信息;反之接受短消去该层的首部信息。这种把数据信息包封装起来的做法称为封装(encapsulate)
  • IP/TCP/DNS
    • IP协议(Internet Protocol):
      • 功能:负责传输;
      • 位置:网络层;
      • 作用:传送各种数据包,其中两个重要地址(IP地址和MAC(Media Access Control)地址);
      • IP地址指明了节点被分配的地址,MAC地址指网卡所指的物理地址。IP地址和MAC地址可配对,IP地址可变,MAC地址一般不会变;
      • ARP(Address Resolution Protocol)协议:解析地址的协议,根据通信双方的IP地址反查其MAC地址;
      • 无人能全面掌握互联网中的传输状况。
    • 确保可靠的TCP协议:
      • 位置:传输层;
      • 作用:提供可靠的字节流服务(Byte Stream Service)–为方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理,即TCP为了方便传送大数据而分隔,并能确认数据最终是否到达对方;
      • 确保数据到达目标:三次🤝(three-way handshaking)
        • TCP的flag:SYN(synchronize)和ACK(acknowledgement)
          1. syn
          2. syn + ack
          3. ack
  • 域名解析的DNS(Domain Name System)服务(应用层)
    • 作用: 提供Domain到IP地址之间的解析服务 。为了解决IP地址难记问题,DNS提供了IP与Domain Name之间的map关系。
  • 各种协议与HTTP协议间的关系

  • URI(Uniform Resource Identifier) & URL(Uniform Resource Location),前者标识某一互联网资源,后者表示资源地点。
    • URI:某个协议方案表示的资源定位标识符。
      • U:格式统一可处理各种资源且无需据上下文来识别资源的访问方式,且易于新增协议方案(http/ftp);
      • R:可标识的任何东西;
      • I:可标识的对象。
  • 格式:

    • scheme:数据或脚本程序的方案名;
    • certification:登陆认证,可选;
    • url:
    • port:
    • path&file:带层次的文件路径,可选;
    • query:查询字符串,可选;
    • fragment identifier:片段标识符,标记已获取资源中的子资源。
schemecertificationurlportpathfilequeryfragment identifier
http://user:pass@www.example.jp:80/dir/index.html?uid=1#ch1 

2. 简单的HTTP协议

客户端:请求访问文本或图像等资源的一端;服务端:提供资源响应的一端。

  • 请求报文的组成

  • HTTP是无状态(stateless)协议:
    • 本身不保存(持久化处理)请求和响应之间的通信状态。cookie🉑️用于保存状态。
  • 告知Server意图的HTTP方法
    • GET:获取资源,请求已被URI识别的资源。🈯️定的资源经Server解析后🔙响应内容。
    • POST:传输实体的主体,主要目的不是获取响应的主体内容。
    • PUT:传输文件,本身不带验证机制,任何人都可以上传文件,存在安全性问题,不推荐。若架构设计采用REST标准的同类web网站,则可以开放PUT方法。
    • HEAD:只获取报文首部。
    • DELETE:与PUT相反。
    • OPTIONS:询问支持的方法。
    • TRANCE:追踪路径,让web服务器将之前的请求通信返回给客户端。
    • CONNECT:要求用隧道协议🔗代理,实现用隧道协议进行TCP通信。
  • 持久连接节省通信量
    • 持久连接(HTTP Persistent Connections):若任意一端明确提出断开连接则断开。
    • 管线化(piping line):不用等待响应即可发送下一个请求。
  • 使用cookie状态管理
    • 原理:cookie根据从服务端发送的响应报文内的一个叫Set-Cookie的首部字段信息,通知客户端保存cookie。当下次客户端再向该服务器发送请求时,客户端会自动在请求报文中加入cookie值后发送出去。

3. HTTP报文内的HTTP信息

  • HTTP报文:用于HTTP协议交互的信息。🈶️多行数据构成的字符串文本。
    • 报文首部:服务器端或客户端需要处理的请求或响应的内容即属性。
    • 空行:CR + LF。
    • 报文主题:被发送的数据,🉑️选。
  • 结构:
    • 请求行:包含method,uri和http version。
    • 状态行:包含表明响应结果的状态码,原因短语和http版本。
    • 首部字段:包含表示请求和响应的各种条件和属性的各类首部。
      • 通用首部
      • 请求首部
      • 响应首部
      • 实体首部
    • 其它:可能包含http的rfc里未定义的首部(Cookie etc)。
  • 编码提升传输速率(通过在传输🀄️编码,🉑️有效处理大量的访问请求;但也会消耗更多的CPU资源)
    • 报文主体和实体主体
      • 报文(message):http通信的基本单位,通过http通信传输,由八位字节流组成。
      • 实体(entity):作为请求或响应的有效载荷数据被传输,由实体首部和实体主体组成。通常报文主题等于实体主体,只有当传输🀄️🈶️编码操作时才有差异。
    • 压缩传输分内容编码
      • 内容编码:指明应用在实体🀄️的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接受并负责解码。
      • 常见内容编码:
        • gzip(GUN zip)
        • compress(UNIX系统)
        • deflate(zlib)
        • identity(不编码)
    • 分隔发送的分块传输编码
      • 分块传输编码:把实体主体分块的功能。
    • 发送多种数据的多部分对象集合
      • 多用途因特网(MIME,multipurpose Internet Mail Extensions)机制:允许📧处理图片,文本,视频等多个不同类型的数据。
      • 包含:
        • multipart/form-data:web表单文件⏫使用;
        • multipart/byteranges:状态码206响应报文包含了多个范围内容时使用;
    • 获取部分内容范围请求
      • 范围请求(Range Request):🈯️定范围发送的请求。
    • 内容协商🔙最合适的内容
      • 内容协商(Context Negotiation):当浏览器默认语言是英文或中文,访问相同URI的web📃时,会显示对应英文版或中文版的📃机制。
      • 机制:客户端和服务端就响应的资源进行交涉,然后提供给客户端最为合适的资源。其基准会是语言,字符集,编码方式等。如请求报文中的首部字段 :
        • Accept
        • Accept-Charset
        • Accept-Encoding
        • Accept-Language
        • Content-Language
      • 内容协商技术分类:
        1. 服务器驱动协商(Server-driven Negotiation)
        2. 客户端驱动协商(Agent-driven Negotiation)
        3. 透明协商(Transparent Negotiation)

4. 返回结果的HTTP状态码

  • 状态码:
    • 作用:告知从服务器🔙的请求结果,标记服务端的处理是否异常,通知出现的❌等工作;
    • 类别:
 类别原因短语
1xxinformational接受的请求正在处理
2xxsuccess请求正常处理完毕
3xxredirection需要进行附加操作以✅请求
4xxclient error客户端无法处理结果
5xxserver error服务端无法处理结果
  • 2xx成功
    • 200:👌,从客户端发来的请求在服务端正常处理 ;
    • 204:no-content,服务器接受的请求已成功处理,但在🔙的请求报文中不含实体的主体部分且❎返回任何实体的主题部分。一般在只需客户端往服务器发送💻,而对客户端不需要发送新信息内容时用。
    • 206:partial content,客户端进行了范围请求,而服务器成功执行了该部分的GET请求。
  • 3xx重定向:浏览器需要执行某些特殊处理以正确处理请求。
    • 301:moved permanently,永久性🐛定向;
    • 302:found,临时性重定向;
    • 303:see other;
    • 304:not modified ;
    • 307:temporary redirect。
  • 4xx:
    • 400:bad request;
    • 401:unauthorized;
    • 403:forbidden;
    • 404:not found。
  • 5xx:
    • 500:internal server error;
    • 503:service unavailable.

5. 与HTTP协作的Web服务器

一台web服务器可以搭建多个独立域名的web网站,也可作为通信路径上的中转服务器提升传输效率。

  • 用单台虚拟主机实现多个域名
    • HTTP/1.1规范✅一台http服务器搭建多个web站点。
  • 通信数据转发程序:代理,网关,隧道
    • 代理:一种具有转发功能的应用程序,扮演了客户端和服务端间的中间人🎭;
      • 基本行为:接受客户端发送的请求后转发给其它服务器。不改变请求url,会直接发送诶前方源服务器
      • 源服务器: 持有资源的目标服务器;
      • 使用代理理由:
        • 利用缓存技术减少网路带宽的流量;
        • 组织内部针对特定网站的访问控制;
        • 获取访问日志等。
      • 分类:
        • 缓存代理:使用缓存;
        • 透明代理: 转发请求或响应时不对报文做任何加工。
    • 网关:转发其它服务器通信数据的服务器
      • 与代理类似,能提为使通信线路上的服务器提供非http协议服务。
    • 隧道:在相隔甚远的客户端和服务端之间进行中转,并保持双方通信🔗的应用程序
      • 目的:确保🔐;
  • 保存资源的缓存:
    • 缓存:代理服务器或客户端本地磁盘内保存的资源副本。

6. HTTP首部

  • http报文首部:客户端和服务端处理时起至关重要作用的信息
    • 请求报文组成:
      • 方法,
      • URI,
      • HTTP版本,
      • HTTP首部字段(请求,通用,实体)
    • 响应报文组成:
      • HTTP版本,
      • 状态码,
      • HTTP首部字段
  • HTTP首部字段
    • 传递重要信息(报文主体大小,语言,认证信息等)
    • 结构:首部字段名:字段值
    • 4种类型:
      • 通用。。(general header fields)
      • 请求。。(request)
      • 响应。。 (response)
      • 实体。。(entity)
    • 首部字段一览表:

    • 非HTTP首部字段

7. 确保Web安全的HTTPS

在HTTP协议中可能存在信息窃取或身份🆔伪装等安全🔐问题,而HTTPS🉑️有效防止此类问题。

  • HTTP的缺点:
    • 通信使用明文(不加密),内容可能被窃听;
    • 不验证通信方的身份,有可能遭遇伪装;
    • 无法证明报文完整性,有可能已遭篡改
  • 通信的加密🔐
    • 加密机制:
      • SSL(Secure Socket Layer):安全套接字
      • TLS(Transport Layer Secure):安全传输层协议。
    • HTTPS(HTTP over SSL):HTTP + SSL + 认证 + 完整性保护

8. 确认访问用户身份的认证

某些web📃只想让特定人访问,用户🆔认证应运而生。

  • 何为认证?
    • 核对信息:
      • 密码:只有本人才知道的字符串;
      • 动态令牌:仅限本人持有的设备内显示的一次性密码;
      • 数字🔢📄证书:仅限本人持有的信息;
      • 生物认证:指纹和虹膜等本人的生理信息;
      • IC卡等:仅限本人持有的信息。
    • HTTP/1.1使用的认证:
      • BASIC认证
      • DIGEST认证
      • SSL客户端认证
      • FormBase认证(并不在http协议中定义)
        • 客户端会向web服务器上的app发送登陆信息(credential),按登陆信息的验证结果认证。
        • 认证多半基于表单认证
        • session管理及cookie应用(cookie管理session弥补了http协议无状态的不足)

9. 基于HTTP的功能追加协议

  • 消除http瓶颈的spdy
    • http瓶颈:
      • 一条连接上只能发送☝️请求;
      • 请求只能从客户端开始。客户端不能接收除响应以外的指令;
      • 请求/响应首部未经压缩就发送。首部信息越多延迟越大。
      • 发送冗长的首部。每次互相发送相同的首部造成的浪费较多。
      • 🉑️任意选择数据压缩格式。非强制压缩发送。
    • 解决方法:
      • ajax:
      • comet:
      • spdy:
  • 使用浏览器进行全双工通信的websocket
  • 期盼已久的http2.0
  • web服务器管理文件📃的webdav

10. 构建Web应用的技术

pass

11. Web的攻击技术

  • 针对web的攻击技术:简单的http本身不存在安全性问题,协议本身几乎不会称为被攻击的对象。应用http协议的客户端和服务端,及运行在服务器上的web应用才是攻击目标。

    • 在客户端🉑️篡改请求: 在http请求报文内加载攻击代码,就能发起对web应用的攻击。通过url查询📖字段,http首部,cookie等途径把攻击代码传入。

    • 针对web应用的攻击模式:

      • 以服务器为目标的主动攻击:攻击者通过直接访问web应用,把攻击代码传入。SQL注入和OS命令注入。
      • 以服务器为目标的被动攻击: 利用圈套策略执行攻击代码。常见步骤如下:
          1. 攻击者诱导用户触发已设置好的陷阱,而陷阱会启动发送已嵌入好的http请求;
          1. 当用户无知🀄️中招后,用户浏览器或📧客户端就会触发这个陷阱;
          1. 中招后的用户浏览器会把含有攻击代码的http请求发送给作为攻击目标的web应用,运行攻击代码;
          1. 执行完攻击代码,存在安全漏洞的web应用会成为攻击者的跳板,可能导致用户所持的cookie等个人👤信息被窃取,登陆状态的用户权限遭恶意滥用等后果。
  • 因输出值转译不完全引发的安全漏洞

    • 跨站脚本攻击XSS(cross-site scripting): 通过存在安全漏洞的web网站注册用户的浏览器内运行非法的html标签🏷️或JavaScript进行的攻击。
      • 利用虚假输入表单骗取用户信息;
      • 利用脚本窃取用户cookie值,被害者在不知情情况下帮助攻击者发送恶意请求;
      • 显示伪造的文章或图片。

Leave a Comment

comments powered by Disqus