图解HTTP-HTTP协议
HTTP
HTTP是一种不保存状态,即无状态的协议。HTTP协议自身不对请求和响应之间的通信进行保存。为了保存状态因此后面也有一些技术产生比如Cookies技术。
HTTP是通过URI定位网上的资源,理论上将URI可以访问互联网上的任意资源。
如果不是访问特定的资源而是对服务器本身发起请求,可以使用一个来代替请求URL。
OPTIONS * HTTP/1.1
GET
GET方法用来请求访问已被URI识别的资源。
POST
POST方法用来传输实体的主体。虽然GET方法也可以传输实体的主体,但是一般不用GET方法传输,而是用POST方法。
注解:也就是GET主要是用于访问资源,POST一般携带实体, 但是也没有区分的这样严格只是一个习惯,例如在REST风格中GET经常携带信息访问资源。
HEAD
HEAD和GET方法一样,只是不返回报文主体部分,用于确认URI的有效性及资源更新的日期和时间。
DELETE
DELETE方法用来删除文件,是与PUT相反的方法。DELTE方法按请求URI删除指定的资源。
PUT 传输文件
PUT方法用来传输文件。由于PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般的WEB网站不使用该方法。配合WEB应用程序验证机制,就可以放开PUT方法。
OPTIONS
OPTIONS方法用来查询请求URI指定的资源支持的方法。
TRACE
TRACE 方法是让WEB 服务端将之前的请求通信返回给客户端的方法。
客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改的。这是因为想要连接到源服务器可能会通过代理中转,TRACE方法是用来确认连接过程中发生的一系列操作。
但是由于TRACE 方法本来就不常用,加上容易被XST攻击,一般不常用。
Cross-Site Tracing (XST) 概述
- 定义:
Cross-Site Tracing (XST) 是一种攻击手段,利用 HTTP TRACE 方法来获取敏感信息。TRACE 方法是一种调试工具,用于回显服务器收到的请求内容。 - 工作原理:
当客户端发送一个 TRACE 请求时,服务器会将接收到的请求头原样返回给客户端。
攻击者可以通过诱导用户点击恶意链接,使用户的浏览器向目标服务器发送 TRACE 请求,从而获取用户的敏感信息(如 cookies、认证令牌等)。 - 风险:
如果服务器支持 TRACE 方法且未进行适当的安全配置,攻击者可以利用这一方法窃取用户的会话信息,进而进行进一步的攻击。 - 防护措施:
禁用 TRACE 方法: 最直接的方法是在服务器上禁用 TRACE 方法。
CONNECT
CONNECT 方法要求在代理服务器通信时建立隧道,实现隧道协议进行TCP通信。主要是SSL 和TLS 协议把通信内容加密以后经网络隧道传输。
使用方法下达命令
向请求URI指定的资源发送请求报文时,采用成为方法的命令。
方法 | 说明 | 支持的HTTP协议版本 |
---|---|---|
GET | 获取资源 | 1.0、1.1 |
POST | 传输实体 | 1.0、1.1 |
PUT | 传输文件 | 1.0、1.1 |
HEAD | 获得报文首部 | 1.0、1.1 |
DELETE | 删除文件 | 1.0、1.1 |
OPTIONS | 访问支持的方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议连接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
ULINE | 断开连接 | 1.0 |
持久连接节省通信量
HTTP 请求出事版本中,每一次HTTP都要建立和断开一次TCP连接。
这样造成了连接资源的浪费,所以出现了持久连接 HTTP keep-alive。持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接。
在HTTP/1.1中,所有的连接默认都是持久连接。但是在HTTP/1.0总并没有标准化。持久化连接需要服务端的支持,同时客户端也需要支持。
管线化
持久连接使得多数请求以管线化方式发送成为可能。也就是不一定要等响应返回以后才能发送下一个请求,管线化就可以并行发送锁哥请求。
使用Cookie 的状态管理
HTTP 是无状态协议,它不对之前发生过的请求和响应的状态进行管理。所以有了Cookies 技术通过在请求和响应报文中写入Cookie信息来控制客户端状态。
Cookie 会根据从服务器发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。下次请求的时候携带Cookie,这样服务端就知道是从那个客户端发送过来的。