WEB安全 第五课 HTTP协议 之二 HTTP的请求类型 |
初始的HTTP/0.9草案里对请求的文档只提供了唯一的方法(或叫“动作verb”):GET。在它之后曾冒出来一批荒谬怪诞的方法提议,像什么SHOWMETHOD、CHECKOUT,还有个什么SPACEJUMP呢。
大多数这类实验性的构想在HTTP/1.1里都被抛弃了,HTTP/1.1里只有8种便于管理的方法。实际上只有前2种请求类型:GET和POST对我们现在的大多数Web应用是比较重要的。 1.GET GET方法对信息的获取至关重要。实际上,所有常规浏览会话在“客户端-服务器”交互时都在使用GET方法。一般来说GET请求不会携带从浏览器端提交的Payload数据,尽管这也并非绝对禁止的。 根据RFC的规定,GET请求“除了索取信息之外,不应该承担其他的重要功能”(也就是说,它们应该不能永久性地改变应用的状态)。这个需求在现在的Web应用里已经越来越没有意义了,因为现在甚至服务器端也没法决定应用的状态了;因此,这个建议也越来越为开发人员所忽略e。 🤳🔥🍭✔🐒 注意:在HTTP/1.1协议里,客户端使用GET方法时,可以通过Range请求头域向服务器端请求任意非连续或有重叠的数据片段(虽然比较少见,但其他的请求方法也可能会用到这个请求头)。服务器并非一定会支持这个功能,但如果支持的话,浏览器就可以通过这个方式,实现断点续传方式的下载。 2.POST 👌🚐🍌♻🐴 POST方法原来的目标是把客户端提交的信息(主要是HTML表单数据)传递给服务器端。因为POST动作更有可能带来持久性的副作用,很多浏览器在重新加载包含POST方式的数据时,浏览器都会谨慎地向用户再确认一次,但大多数情况下,GET和POST的交互机制是比较相近的。 POST请求通常都会带有表单数据,这段数据的长度要明确地设置在Content-Length请求头里。在HTML格式的情况下,这些提交的数据通常是经过URL编码或MIME编码的表单数据(这种格式会在后面详细介绍),但要再说一遍,在HTTP协议里对这些数据的语法格式其实并没有具体的限制。 3.HEAD 👁🚗🆒🦌 HEAD是一种很少用到的方法,在本质上HEAD近似于GET方法,但它只返回响应头域的部分,不包含具体的数据,即响应内容的部分。一般来说无法通过浏览器直接发出HEAD请求,但有时候搜索弓|擎的爬虫或其他自动化测试□:具会用到这个方法,例如探测文件是否存在或检查它的最后修改时间。 有这么件传闻轶事(但很可能是真事),说的是一位名叫John Breckman的网站管理员的悲剧。故事里说,John的网站无意中被搜索引擎的爬虫全删了。仅仅是因为这个爬虫无意中访问到一个不需要授权的页面,里面是John自己做的一个基于GET方法的管理页面……爬虫就高高兴兴地把页面里所有的“删除”链接都爬了一遍,然后?然后就没有然后了。#j338: 👵🩴🔍😴✋ 4.OPTIONS OPTIONS是一种元数据请求(metarequest),月艮务器会根据客户端请求的URL地址(如果URL设置为“*”,则泛指整个服务器范围内),在一个响应头里返回其所能支持的全部方法列表。除了用于服务器信息检测,OPTIONS方法在实际中几乎从来不会用到;而即使用于这个目的,由于返回的值过于有限,所以最后的信息也不会精确。 注意如果想把事儿说个完整,那还得额外地补一句,OPTIONS请求是当前还处于提议阶段的跨域请求授权协议的基础,所以日后OPTIONS请求的应用可能会更广泛。 👎🏫🍭❓🐺 5.PUT PUT请求用来向服务器特定目标URL上传文件。但因为浏览器并不支持PUT方法,常规的文件上传功能一般是用POST方法提交给服务器端脚本来实现的,而不会用这个理论上更优雅的做法。 👎🌦🍟🈴🐺 当然也有某些非浏览器的HTTP客户端和服务器出于某种考虑允许使用PUT。有趣的是,由于某些Web服务器上的配置错误,可能导致这些服务器支持PUT请求,从而产生明显的安全漏洞。 6.DELETE DELETE这个方法看字面就知道它的意思了,其他方面和PUT类似(也同样很不常用)。 ✍🗺🥣📳🦜 7.TRACE TRACE是一种“ping”形式的请求,服务器会返回HTTP请求经过所有代理后的每一跳信息,并且把原始HTTP请求内容也再回显出来。TRACE请求不能由浏览器发出,也很少用于合法用途。TRACE主要用在安全测试里,用于揭示远程网络的内部架构里一些有趣的细节。因为这个缘故,服务器管理员一般都会把这个功能禁掉。 👨⚕️🩰🪝😚🖐 8.CONNECT CONNECT方法是通过HTTP代理服务器建立非HTTP类型连接时使用的。Connect指令是不能直接发送给目标服务器的。如果特定服务器上不小心设置了支持CONNECT方法,就可能导致安全风险,使攻击者获得了一条访问受保护网络的TCP通道。 9.其他HTTP方法🥷🦺🪥😋🧠 还有一些其他的请求方法,都只能由非浏览器的应用或浏览器扩展发起;最常见的HTTP扩展可能就是WebDAV,RFC 4918里描述这个HTTP方法是用于写作和版本控制协议的。 另外,客户端一般都可以通过XMLHttpRequest API,使用JavaScript向脚本所在页面的服务器发送各种方法的请求,尽管这个功能在某些浏览器里会受到很多限制。 👨⚕️👔📥🤬👂 WEB安全 第五课第三节:
帖子热度 1万 ℃
|
|