利用Python进行Web渗透测试(五):剖析HTTP请求

本篇概要

  • URL的结构
  • HTTP头域
  • HTTP状态码
  • 一个完整的HTTPget请求

在上一篇我们简单介绍了HTTP协议的概念和知识,本篇我们来详细剖析一下HTTP的请求,将这两篇综合起来,我们就对HTTP有了基本的认识和了解了。

URL结构解析

通常情况下,我们发起一个HTTP请求都是通过访问一个URL网址来实现。 比如我们打开百度的首页(http://www.baidu.com),就是对百度的服务器发起了一个HTTP的请求。

网址在我们的互联网生活中,很常见,那网址的结构又有什么讲究呢? 我们来看一个典型的URL——百度搜索“州的先生”:

https://www.baidu.com/s?wd=州的先生

这其中:

  • https——表示HTTP请求的使用的协议,这里使用的是https;
  • www.baidu.com——表示服务器端的域名地址;
  • s——表示我们的资源的路径,这里的s应当是搜索资源的路径;
  • wd=州的先生——这就是我们发送的请求的查询字符串;

HTTP头域

HTTP的头域描述和客户端和服务器端如何相互进行通信,并且提供了相关的事务信息。HTTP的头域包括了请求头和响应头。

HTTP响应的头域

  • Connection:表示这个HTTP连接的模式,前面我们提到,HTTP的运行模式是客户端进行请求,服务器端进行响应,默认情况下,Connection的值为close,当这个过程完成,HTTP连接便断开。如果使用了keep-alive值,Keep-Alive功能能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。
  • Content-Encoding:表示响应实体的编码方式。浏览器在发送请求的时候,会通过 Accept-Encoding头域 带上自己支持的内容编码格式列表;服务器端接收到之后,会从中挑选一种用来对响应实体进行编码,并通过 Content-Encoding 响应头指明选定的格式;浏览器拿到响应正文后,依据 Content-Encoding 进行解压。
  • Content-Type:表示响应实体的类型,用于定义响应的文件类型和网页的编码,以此来决定浏览器以什么形式、什么编码来读取这个响应实体。
  • Date:表示响应的时间。
  • Server:表示响应服务器的架构。
  • Transfer-Encoding:表示响应实体的传输编码模式,图中的"chunked"代表的含义是分块传输。

HTTP请求的头域

  • Accept:表示浏览器声明请求接收的文件类型。
  • Accept-Encoding:表示浏览器声明接受的响应内容的编码格式。
  • Accept-Language:表示浏览器声明其接受的自然语言类型。
  • Cache-Control:用于浏览器控制网页的缓存。其各类值指示的是浏览器再次请求网页的时候,是使用缓存,还是向服务器发出请求。
  • Connection:表示浏览器声明此次请求的连接模式。
  • Cookie:浏览器发出的为了声明本次请求的身份、便于进行 session 跟踪而储存在本地的数据,通常由键值对组成,常用于用户身份的持久化认证。
  • Host:表示浏览器请求的主域名。
  • User-Agent:表示浏览器的标识。不同操作系统、不同版本、不同厂商的浏览器的标识各不一致,通过修改这个参数可以达到爬虫初级伪装的效果。

HTTP的状态码

HTTP的状态码是一个由三个十进制的数组成的代码,这个简短的三位数,可以很直观的告诉我们,这次HTTP的请求的结果是什么。

HTTP的状态码由三个十进制的数表示,状态码的类型由第一位数来决定。 HTTP的状态码一共分为五种类型:

  • 1xx:表示服务器收到请求,需要客户端继续执行操作。
  • 2xx:表示请求成功,并且服务器对请求做出了响应。
  • 3xx:表示重定向。
  • 4xx:表示客户端请求错误。
  • 5xx:表示服务器错误。

在实际的应用当中,我们经常遇到的状态码有以下几种:

  • 200:请求成功
  • 304:重定向
  • 400:客户端请求语法错误
  • 403:客户端请求被拒绝,可能是权限问题
  • 404:请求的资源没有找到
  • 500:服务器内部错误
  • 502:网关或代理服务器错误
  • 504:网关超时,服务器没有及时从上游服务器接获取到全球

一个GET请求

GET请求方法是显式的请求方法,通过URL参数,将需要的所有信息发送给URL。例如上一节我们通过百度搜索“州的先生”就是向百度的服务器发送了一个GET请求。

下面,我们以www.httpbin.org这个网站作为测试示例。 httpbin.org是一个测试HTTP请求和响应的网站,基于Python + Flask 平台,能够测试 HTTP 请求和响应的各种信息,比如 cookie、ip、headers 和登录验证等,且支持 GET、POST 等多种方法,对 web 开发和测试很有帮助。

一个成功的请求

我们点击www.httpbin.org页面上的/ip链接,页面会跳转到返回一个服务器的IP地址:

我们打开浏览器控制台的网络选项卡看看,其中:

  • Headers:表示的就是头域了,其中包含了请求头和响应头。
  • Preview:表示预览请求资源的响应实体。
  • Response:请求资源的响应实体。
  • Cookies:记录浏览信息或者用于认证的数据
  • Timing:请求这个资源所花费的时间

里面详细的显示了整个HTTP的请求和响应的信息。

我们看看Headers选项卡里面的General部分,主要概述本次HTTP连接的总体信息。

  • Request URL,表示请求的URL地址;
  • Request Method,表示请求的方法,GET;
  • Status Code,表示响应的状态码,200;
  • Remote Address,表示响应服务器的IP地址。

其余的Response Headers部分和Requests Headers部分就是我们之前介绍的响应头域和请求头域,其中的内容大都能找到代表的意思。

这样,我们就完成了对一个基本的HTTP请求剖析。

下一篇,我们介绍使用Python的模块进行HTTP请求。

(类似于爬虫的……)

如果有疑问,欢迎留言提问。

原文发布于微信公众号 - 州的先生(zmister2016)

原文发表时间:2017-11-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术分享

手把手教你用Mysql-Cluster-7.5搭建数据库集群

当你的业务到达一定的当量,肯定需要一定数量的数据库来负载均衡你的数据库请求,我在之前的博客中已经说明了,如何实现负载均衡,但是还有一个问题就是数据同步,因为负载...

4468
来自专栏逻辑熊猫带你玩Python

Linux | 26条Shell常用命令(面向小白)

语法格式:cd 目录, cd 回到家目录 cd ~回到家目录 cd -回到个目录 cd ..返回上层目录 cd !$返回上次([其他]命令)访问的目录

2772
来自专栏ml

如何搭建一个linux服务器

1, 首先 下载一个linux server 系统镜像    ubuntu 64bit下载      http://www.ubuntu.com/downloa...

3505
来自专栏云安全分享

linux下如何查看软件的漏洞修复情况

工作中经常会遇到客户咨询更新软件包是否就修复了xx漏洞,本文就是针对此场景而出。下面以bash为例进行讲解:

3311
来自专栏软件开发 -- 分享 互助 成长

Android开发环境的搭建

前言: 作为一个Android开发的新手,光开发环境就差点搭建了一天,最后发现自己走了很多弯路,在此写出希望能够帮助想入门的朋友。先说一下,开发Android ...

1915
来自专栏linux驱动个人学习

用户态/内核态、用户栈/内核栈

内核态就是拥有资源多的状态,或者说访问资源多的状态,也称为特权态。相对来说,用户态就是非特权态,访问的而资源将受到限制。如果一个程序运行在特权态,该程序就可以访...

1272
来自专栏闵开慧

eclipse中部署tomcat

1 下载tomcat6.0,网址http://www.apache.org,这里使用zip文件,而不是exe文件。 2 解压下载文件,tomca...

29511
来自专栏Python小屋

Python使用pyinstaller打包几个小技巧

1、进入命令提示符环境cmd,执行命令pip install pyinstaller安装扩展库pyinstaller。

1892
来自专栏微服务生态

利用Zookeeper实现Leader选举的一些思考

我们都知道Zookeeper的节点有两种类型,分别是持久节点和临时节点。临时节点有个特性,就是如果注册这个节点的机器失去连接(通常是宕机),那么这个节点会被zo...

693
来自专栏云计算教程系列

如何通过Yum在CentOS 7上安装Apache Tomcat 7

Apache Tomcat是一个Web服务器和servlet容器,用于为Java应用程序提供服务。Tomcat是Apache Software Foundati...

2400

扫码关注云+社区