2、深入HTTP请求流程

随着web2.0时代的到来,互联网从传统的C/S架构转变为更方便更便捷的B/S架构。当客户端与web服务器进行交互时,就存在web请求,这种请求都基于统一的应用层协议(HTTP协议)交互数据

HTTP协议解析

http即超文本传输协议,是一种详细规定了了浏览器和万维网服务器之间互相通信的规则,他是万维网交换信息的基础,它允许将HTML(超文本标记语言)文档从web服务器传送到web浏览器

http协议目前最新版的版本时1.1,HTTP是一种无状态的协议。无状态是指web浏览器与web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发送请求(reaquest),然后web服务器返回响应(response),连接就关闭了,在服务端不保留连接的有关信息。也就是说,HTTP请求只能由客户端发起,而服务器不能主动向客户端发送数据

HTTP请求与响应

HTTP请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。

(1)HTTP请求

HTTP请求包括三部分,分别是请求行(请求方法)、请求头(消息报头)和请求正文。下面是HTTP请求的一个例子

POST /login.php HTTP/1.1      //请求行

HOST:www.xxser.com             //请求头

User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0         

                                                 //空白行,代表请求头结束

Username=admin&password=admin   //请求正文

HTTP请求行的第一行即为请求行,请求行由三部分组成,该行的第一部分说明了该请求是POST请求;该行的第二部分是一个斜杠(/login.php),用来说明请求的是该域名根目录下的login.php;该行的最后一部分说明使用的是HTTP1.1版本(另一个可选项是1.0)

第二行至空白行为HTTP中的请求头(也被称为消息头)。其中,HOST代表请求的主机地址,User-Agent代表浏览器的标识,请求头由客户端自行设定

HTTP请求的最后一行为请求正文,请求正文是可选的,它最常出现在post请求方法中

 

HTTP响应

HTTP响应的第一行为响应行,其中有HTTP版本、状态码以及消息

第二行至末尾的空白行为响应头,由服务器向客户端发送

消息报头之后为响应正文,是服务器向客户端发送的HTML数据

 

HTTP请求方法

HTTP请求的方法非常多,其中GET、POST最为常见。下面是HTTP请求方法的详细介绍

(1)GET

GET方法用于获取请求页面的指定信息(以实体的格式)。如果请求资源为动态脚本(非HTML),那么反户籍文本是web容器解析后的HTML源代码,而不是源文件。例如请求index.jsp,返回的不是index.jsp的源文件,而是经过解析后的HTML代码。

(2)HEAD

HEAD方法除恶服务器不能在响应里返回消息主体外,其他斗鱼GET方法相同。此方法经常被用来测试超文本链接的有效性、可访问性和最近的改变。攻击者编写扫描工具时,就常用此方法,因为只测试资源是否存在,而不用返回消息主体,所以速度一定是最快的

(3)POST

POST方法也与GET方法相似,但最大的区别在于,GET方法没有请求内容,而POST是有请求内容的。POST请求最多用于向服务器发送大量的数据。GET虽然也能发送数据,但是有大小(长度)的限制,并且GET请求会将发送的数据显示在浏览器端,而POST则不会,所以安全性相对来说高一些

(4)PUT

PUT方法用于请求服务器把请求中的实体存储在请求资源下,如果请求资源已经在服务器中存在,那么将会用此请求中的数据替换原先的数据,作为指定资源的最新修改版。如果请求指定的资源不存在,将会创建这个资源,且数据位请求正文

因为他会为服务器建立文件,服务器一般都会关闭此方法

(5)DELETE

DELETE方法用于请求远服务器删除请求的指定资源。服务器一般都会关闭此方法,因为客户端可以进行删除文件操作

(6)TRACE

TRACE方法被用于激发一个远程的应用层的请求笑死回路,也就是说,回显服务器收到的请求。TRACE方法允许客户端去了解数据被请求链的另一端接收的情况,并且利用那些数据信息去测试或诊断。但此方法非常少见

(7)CONNECT

HTTP1.1协议规范保留了CONNECT方法,此方法是为了用于能动态切换到隧道的代理

(8)OPTIONS

OPTIONS方法是用于请求获得由URL标识的资源在i请求/响应的通信过程中可以使用的功能选项。通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能

以上为HTTP/1.1标准方法,但HTTP的请求方法还不止这些,例如webDSV等等

 

HTTP状态码

当客户端发出HTTP请求,服务端接收后,会向客户端发送响应信息,其中,HTTP响应中的第一行中,最重要的一点就是HTTP的状态码,内容如下:

  • 1xx:信息提示,表示请求已被成功接收,继续处理。其范围为100~101
  • 2xx:成功,服务器成功地处理了请求,其范围为200~206
  • 3xx:重定向,重定向状态码用于告诉浏览器客户端,他们访问的资源已被移动,并告诉客户端新的资源地址位置。这时,浏览器将重新对新资源发起请求。其范围为300~305
  • 4xx:客户端错误状态码,有时客户端会发送一些服务器无法处理的东西,比如格式错误的请求,或者最常见的是,请求一个不存在的URL。其范围为400~415
  • 5xx:有时候客户端发送了一条有效请求,但web服务器自身却出错了,可能是web服务器运行出错了,或者网站都挂了。5xx就是用来描述服务器内部错误的,其范围为500~505

常见的状态码描述如下

200:客户端请求成功,是最常见的状态

302:重定向

404:请求资源不存在,是最常见的状态

400:客户端请求有语法错误,不能被服务器所理解

401:请求未经授权

403:服务器收到请求,但是拒绝提供服务

500:服务器内部错误,是最常见的状态

503:服务器当前不能处理客户端的请求,一段事件后可能恢复正常

 

HTTP消息

HTTP消息又称为HTTP头,由四部分组成,分别是请求头、响应头、普通头和实体头。从名称上看,我们就可以知道他们所处的位置

(1)请求头

请求头只出现在HTTP请求中,请求报头允许客户端向服务端请求附加信息和客户端自身的信息。常用的HTTP请求头如下。

  1. Host   Host请求报头域主要用于指定被请求资源的internet主机和端口号
  2. Use-Agent  Use-Agent请求报头域允许客户端将他的操作系统、浏览器和其他属性告诉服务器。登陆一些网站时,很多时候都可以见到显示我们的浏览器、系统信息,这些都是此头的作用
  3. Referer    Refrer包含一个URL,代表当前访问URL上的一个URL,也就是说,用户是从什么地方来到本页面
  4. Cookie     Cookie是非常重要的请求头,他是一段文本,常用来表示请求者身份等。
  5. Range      Range可以请求实体的部分内容,多线程下载一定会用到此请求头
  6. x-forward-for      即XXF头,他代表请求端的IP,可以有多个,中间以逗号隔开
  7. Accept      Accept请求报头域用于指定客户端接收哪些MIME类型的信息,如Accept:text/html,表明客户端希望接受HTML文本
  8. Accept-Charset      请求报头域用于指定客户端接收的字符集

(2)响应头

响应头是服务器根据请求向客户端发送的HTTP头。

  1. Server     服务器所使用的web服务器名称,攻击者通过查看此头,可以探测web服务器名称。所以建议在服务器端进行修改此头的信息
  2. Set-Cookie       向客户端设置cookie,通过查看此头,可以清楚的看到服务器向客户端发送的cookie信息
  3. Last-Modified     服务器通过这个头告诉浏览器,资源的最后修改时间
  4. Location       服务器通过这个头告诉浏览器去访问哪个页面,浏览器接收到这个请求之后,通常会立刻访问Location头所指向的页面。这个头通常配合302状态吗使用
  5. Refresh        服务器通过Refresh头告诉浏览器定时刷新浏览器

(3)普通头

在普通报头中,有少数报头域用于所有的请求和响应消息,但并不用于被传输的实体,至用于传输的消息。例如:Data表示消息产生的日期和事件。connection,允许发送制定连接选项

注:普通报头作为了解即可

(4)实体头

请求和响应消息都可以传送一个实体头。实体头定义了关于实体正文和请求所标识的资源的元信息。元信息也就是实体内容的属性,包括实体信息类型、长度、压缩方法、最后一次修改时间等。常见的实体头如下

  1. Content-Type       用故意向接收方指示实体的介质类型
  2. Content-Encoding       被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须采用响应的解码机制
  3. Content-Length      用于指明实体正文的长度,以字节方式存储的十进制数字来表示
  4. Last-Modified        用于指示资源的最后修改日期和时间

 

HTTP协议和HTTPS协议的区别

HTTPS协议的全称为Hypertext Transfer Protocal over Secure Socket Layer,它是以安全为目标的HTTP通道,其实就是HTTP的“升级”,只是它比单纯的HTTP协议更加安全

HTTPS的安全基础是SSL,即在HTTP下加入SSL层。也就是HTTPS通过安全传输机制进行传送数据,这种机制可保护网络传送的所有数据的隐秘性和完整性,可以降低非侵入性拦截攻击的可能性

既然是在HTTP的基础上进行构建的HTTPS协议,所以,无论怎么样,HTTP请求与响应都是以相同的方式进行工作的

HTTP协议与HTTPS协议的主要区别如下。

  • HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议
  • HTTP与HTTPS协议使用的是完全不同的连接方式,HTTP采用80端口连接,而HTTPS则是443端口
  • HTTPS协议需要到ca申请证书,一般免费证书很少,需要缴费,也有些web容器提供,如TOMCAT.而HTTP协议则不需要
  • HTTP连接相对简单,是无状态的,而HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,相对来说,他要比HTTP协议更安全

 

作为一名web开发人员,一定要牢记,前端javascript验证是为了防止用户输入错误,服务器端验证是为了防止恶意攻击

 

HTTP应用:黑帽SEO之搜索引擎劫持

SEO(search engine optimization)即为搜索引擎优化。简单的说,就是让网站的排名更高

那么黑帽SEO就是通过作弊的手段欺骗搜索引擎,获取非正常的排名,让网站更靠前,流量更大

案例:直接输入域名可以进入自己的网站,而使用百度、google等搜索引擎搜索关键字看到自己的网站后,再打开却跳转到其他的网站。客户说自己已经用web杀毒扫描过,并没有发现木马等病毒

其实这是黑帽SEO利用HTTP协议搞的鬼

在HTTP中有个请求头叫Referer,还有一个头叫做User-agent,黑帽SEO就是利用这两个头来欺骗搜索引擎的。Referer头用于告诉web服务器用户使用的浏览器和操作系统等信息。当用户通过搜索引擎打开此网站时,一般会引出referer头

利用这点,黑帽SEO就可以用任何web语言进行针对搜索引擎的流量劫持,一般步骤如下。

  1. 建立劫持搜索引擎库,如baidu、google等域名为关键字
  2. 获取HTTP referer头
  3. 遍历搜索引擎库,并与referer的内容相比较,如果两者相同或存在搜索引擎关键字,那么页面将会发生跳转,也就是域名劫持

这就是针对搜索引擎的劫持,那么user-agent又能做什么呢?user-agent主要来劫持搜索引擎的蜘蛛,与劫持流量类似,但是具体的作用不一样,例如ipad,iphone关键字等等,就跳转到手机端的黑客构造的页面

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值