HTTP请求的完全过程
Posted 安全界 的彭于晏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP请求的完全过程相关的知识,希望对你有一定的参考价值。
1.1 浏览器根据域名解析IP地址
浏览器根据访问的域名找到其IP地址。DNS查找过程如下:
浏览器缓存:首先搜索浏览器自身的DNS缓存(缓存的时间比较短,大概只有1分钟,且只能容纳1000条缓存),看自身的缓存中是否是有域名对应的条目,而且没有过期,如果有且没有过期则解析到此结束。
系统缓存:如果浏览器自身的缓存里面没有找到对应的条目,那么浏览器会搜索操作系统自身的DNS缓存,如果找到且没有过期则停止搜索解析到此结束。
路由器缓存:如果系统缓存也没有找到,则会向路由器发送查询请求。
ISP(互联网服务提供商) DNS缓存:如果在路由缓存也没找到,最后要查的就是ISP缓存DNS的服务器。
1.2 浏览器与WEB服务器建立一个TCP连接:
TCP的3次握手。
一个HTTP请求报文由请求行(request line)、请求头部(headers)、空行(blank line)和请求数据(request body)4个部分组成。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210621151801516.png#pic_center)
1.请求方法
GET:一个说明HTTP方法的动词。最常用的方法为GET,它的主要作用是从Web服务器获取一个资源。GET请求并没有消息主体,因此在消息头后的空白行中没有其他数据。所请求的URL,通常由所请求的资源名称,以及一个包含客户端向该资源提交的参数的可选查询字符串组成。在该URL中,查询字符串以?字符标识,上面的示例中有一个名为uid、值为129的参数。使用的HTTP版本。因特网上常用的HTTP版本为1.0和1.1,多数浏览器默认使用1.1版本。这两个版本的规范之间存在一些差异;然而,当攻击Web应用程序时,渗透测试员可能遇到的唯一差异是1.1版本必须使用Host请求头。
Referer 消息头用于表示发出请求的原始URL(例如,因为用户单击页面上的一个链接)。请注意,在最初的HTTP规范中,这个消息头存在拼写错误,并且这个错误一直保留了下来。
User-Agent消息头提供与浏览器或其他生成请求的客户端软件有关的信息。请注意,由于历史原因,大多数浏览器中都包含Mozilla前缀。这是因为最初占支配地位的Netscape浏览器使用了User-Agent字符串,而其他浏览器也希望让Web站点相信它们与这种标准兼容。与计算领域历史上的许多怪异现象一样,这种现象变得很普遍,即使当前版本的Internet Explorer也保留了这一做法,示例的请求即由Internet Explorer提出。
Host消息头用于指定出现在被访问的完整URL中的主机名称。如果几个Web站点以相同的一台服务器为主机.就需要使用Host消息头.因为
请求第一行中的URL内通常并不包含主机名称。
Cookie消息头用于提交服务器向客户端发布的其他参数(请参阅本章后续内容了解更多详情)。
X_FORWARDED_FOR是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。(请看图1)
3.1.3 HTTP方法
当渗透测试员攻击Web应用程序时,几乎肯定会遇到最常用的方法:GET和POST。这些方法之间存在一些必须了解的重要差异,忽略这些差异可能会危及应用程序的安全。
GET方法的作用在于获取资源。它可以用于URL查询字符串的形式向所请求的资谏发送参数。这使用户可将一个包含动态资源的URL标注为书签,用户自己或其他用户随后可重复利用该书签来获取等价的资源(作用与标注为书签的搜索查询相似)。URL显示在屏幕上.并被记录在许多地方,如浏览器的历史记录和Web服务器的访问日志中。如果单击外部链接,还可以用Referer消息头将它们传送到其他站点。因此,请勿使用查询字符申传送任何敏感信息。
POST方法的主要作用是执行操作。使用这个方法可以在URL查询字符申与消息主体中发送请求参数。尽管仍然可以将URL标注为书签,但书签中并不包含消息主体发送的任何参数。许多维护URL日志的位置及Referer消息头也将这些参数排除在外。因为POST方法旨在执行操作,如果用户单击浏览器上的“后退”按钮,返回一个使用这种方法访问的页面,那么浏览器不会自动重新发送请求,而是就即将发生的操作向用户发出带告.如图3-1所示。这样做可防止用户无意中多次执行同一个操作。因此.在执行某一操作时必须使用POST请求。
图 3-1 浏览器不会自动重新发送用户提出的POST请求,因为这样做会导致多次执行某一操作
除了GET和POST方法以外.HTTP协议还支持许多其他因特殊目的而建立的方法。需要了解
的其他方法如下:
HEAD。这个方法的功能与GET方法相似,不同之处在于服务器不会在其响应中返回消息主体。服务器返回的消息头应与对应GET请求返回的消息头相同。因此,这种方法可用于检查某一资源在向其提交GET请求前是否存在。
TRACE.这种方法主要用于诊断。服务器应在响应主体中返回其收到的请求消息的具体内容。这种方法可用于检测客户端与服务器之间是否存在任何操纵请求的代理服务器。
OPTIONS。这种方法要求服务器报告对某一特殊资源有效的HTTP方法。服务器通常返回一个包含Allow消息头的响应,并在其中列出所有有效的方法。
PUT。这个方法试图使用包含在请求主体中的内容,向服务器上传指定的资源。如果激活这个方法,渗透测试员就可以利用它来攻击应用程序。例如,通过上传任意一段脚本并在服务器上执行该脚本来攻击应用程序。
还有许多其他与攻击Web应用程序没有直接关系的HTTP方法。然而,如果激活某些危险的方法,Web服务器可能面临攻击风险。
以上是关于HTTP请求的完全过程的主要内容,如果未能解决你的问题,请参考以下文章