All for one, one for all. 收藏本站
登陆 / 注册 搜索

阅读: 6.5K   回复: 2

[# 网络安全] WEB安全 第五课 HTTP协议 之二 HTTP的请求类型

小执念 古黑浩劫论坛大牛 2016-5-29 11:20 |显示全部楼层

可遇不可求的事:故乡的云,上古的玉,随手的诗,十九岁的你。

管理员
        初始的HTTP/0.9草案里对请求的文档只提供了唯一的方法(或叫“动作verb”):GET。在它之后曾冒出来一批荒谬怪诞的方法提议,像什么SHOWMETHOD、CHECKOUT,还有个什么SPACEJUMP呢。
        
        大多数这类实验性的构想在HTTP/1.1里都被抛弃了,HTTP/1.1里只有8种便于管理的方法。实际上只有前2种请求类型:GET和POST对我们现在的大多数Web应用是比较重要的。

WEB安全 第五课 HTTP协议 之二 HTTP的请求类型 http2-http.jpg

        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安全 第五课第三节:HTTP协议 之三 服务器响应状态码


映画 「出类拔萃」 2018-4-30 23:35 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

我想说我什么也不想说、
夏雨初晴 「出类拔萃」 2018-5-3 21:27 |显示全部楼层

这个用户很懒,还没有填写自我介绍呢~

#j347:我支付宝都不集福就服你
您需要登录后才可以回帖 登录 | 免费注册  

本版积分规则

关于本站|大事记|小黑屋|古黑论 网站统计

GMT+8, 2020-12-1 17:33 , Processed in 0.038863 second(s), 23 queries , Redis On.

© 2015-2020 GuHei.Net

Powered by Discuz! X3.4

快速回复 返回列表