HTTP相关

HTTP相关

Posted by ZBX on March 19, 2020

还待进一步完善

HTTP请求和响应

ETag

一个代表响应服务端资源(如页面)版本的报文头属性,如果某个服务端资源发生变化了,这个ETag就会相应发生变化。它是Cache-Control的有益补充,可以让客户端“更智能”地处理什么时候要从服务端取资源,什么时候可以直接从缓存中返回响应。

Set-Cookie

服务端可以设置客户端的Cookie,其原理就是通过这个响应报文头属性实现的:

HTTP的状态码

状态码 类别 含义
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错
  • 100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
  • 200 OK
  • 204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
  • 206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。
  • 301 Moved Permanently :永久性重定向
  • 302 Found :临时性重定向
  • 303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。
  • 304 Not Modified :该状态码表示客户端发送附带条件的请求 时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应 的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关 系。附带条件例如:If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,
  • 307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器不会把重定向请求的 POST 方法改成 GET 方法。
  • 400 Bad Request :请求报文中存在语法错误。
  • 401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
  • 403 Forbidden :请求被拒绝。
  • 404 Not Found
  • 500 Internal Server Error :服务器正在执行请求时发生错误。
  • 502 Bad Gateway: 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
  • 503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
  • 504 Gateway Time-out: 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

HTTP的方法

  • GET
    • 获取资源
    • GET参数是以字符串的形式出现在URL上。
  • HEAD
    • 获取头部
  • POST
    • 传输实体主体
    • POST参数在实体主体中,参数支持标准字符集。
  • PUT
    • 上传文件
  • PATCH
    • 对资源进行部分修改
  • DELETE
    • 删除文件
  • OPTIONS
    • 查询支持的方法
  • CONNECT
    • 要求在与代理服务器通信时建立隧道
  • TRACE
    • 追踪路径

HTTP/1.1 和HTTP/1.0的区别

HTTP/1.1 新特性

  • 默认是长连接
  • 支持流水线
    • 流水线是在同一条长连接上连续发出请求,而不用等待响应返回,这样可以减少延迟。
  • 支持同时打开多个 TCP 连接
    • 支持虚拟主机
    • 一台服务器拥有多个域名
  • 新增状态码 100
  • 支持分块传输编码
    • Chunked Transfer Encoding,可以把数据分割成多块,让浏览器逐步显示页面。
  • 新增缓存处理指令 max-age

HTTP/2.0新特性

新增的性能改进不仅包括HTTP/1.1中已有的多路复用,修复队头阻塞问题,允许设置设定请求优先级,还包含了一个头部压缩算法(HPACK)。此外, HTTP/2 采用了二进制而非明文来打包、传输 客户端<—>服务器 间的数据。

  • 多路复用(Multiplexing
    • 多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
  • 二进制分帧层
    • HTTP/2.0 将报文分成 HEADERS 帧和 DATA 帧,它们都是二进制格式的。
    • HTTP1.X中的头部信息header封装到Headers帧中,而request body将被封装到Data帧中。
    • 帧(Frame)是最小的通信单位,来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。
    • 消息:比帧大的通讯单位,是指逻辑上的HTTP消息,比如请求、响应等。由一个或多个帧组成。
    • 流:比消息大的通讯单位。是TCP连接中的一个虚拟通道,可以承载双向的消息。每个流都有一个唯一的整数标识符。
  • 头部压缩
    • 头部压缩算法(HPACK)
    • HTTP/2.0 要求客户端和服务器同时维护和更新一个包含之前见过的头部字段表,从而避免了重复传输。
  • 服务端推送
    • HTTP/2.0 在客户端请求一个资源时,会把相关的资源一起发送给客户端,客户端就不需要再次发起请求了。例如客户端请求 page.html 页面,服务端就把 script.js 和 style.css 等与之相关的资源一起发给客户端。
  • 请求优先级
    • 把HTTP消息分为很多独立帧之后,就可以通过优化这些帧的交错和传输顺序进一步优化性能。
  • 流量控制
    • 流量控制基于窗口更新帧进行,即接收方广播自己准备接收某个数据流的多少字节,以及对整个链接要接收多少个字节。
    • 流量控制有方向性,即接收方可能根据自己的情况为每个流乃至整个链接设置任意窗口大小。

DNS劫持

域名劫持是互联网攻击的一种方式,通过攻击域名解析服务器(DNS),或伪造域名解析服务器(DNS)的方法,把目标网站域名解析到错误的IP地址从而实现用户无法访问目标网站的目的或者蓄意或恶意要求用户访问指定IP地址(网站)的目的。

攻击者使用DNS请求,将数据放入一个具有漏洞的DNS服务器的缓存当中。这些缓存信息会在客户进行DNS访问时返回给用户,从而把用户客户对正常域名的访问引导到入侵者所设置挂马、钓鱼等页面上,或者通过伪造的邮件和其他的server服务获取用户口令信息,导致客户遭遇进一步的侵害。

原则上TCP/IP体系通过序列号等多种方式避免仿冒数据的插入,但入侵者如果通过监听客户端和DNS服务器的对话,就可以猜测服务器响应给客户端的DNS查询ID。攻击者在DNS服务器之前将虚假的响应交给用户,从而欺骗客户端去访问恶意的网站。

方法:1. 修改Hosts文件。 2. 使用安全的DNS服务器。

ARP欺骗

介绍

是针对以太网地址解析协议ARP)的一种攻击技术。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。

原理

ARP欺骗的运作原理是由攻击者发送假的ARP数据包到网上,尤其是送到网关上。其目的是要让送至特定的IP地址的流量被错误送到攻击者所取代的地方。因此攻击者可将这些流量另行转送到真正的网关(被动式数据包嗅探,passive sniffing)或是篡改后再转送(中间人攻击,man-in-the-middle attack)。攻击者亦可将ARP数据包导到不存在的MAC地址以达到阻断服务攻击的效果,例如netcut软件。

防御方案

  1. 最理想的防制方法是网上内的每台计算机的ARP一律改用静态的方式,不过这在大型的网上是不可行的,因为需要经常更新每台计算机的ARP表。

  2. 另外一种方法,例如DHCP snooping,网上设备可借由DHCP保留网络上各计算机的MAC地址,在伪造的ARP数据包发出时即可侦测到。此方式已在一些厂牌的网上设备产品所支持。

  3. 有一些软件可监听网络上的ARP回应,若侦测出有不正常变动时可发送邮箱通知管理者。例如UNIX平台的Arpwatch以及Windows上的XArp v2或一些网上设备的Dynamic ARP inspection功能。 [1]