利用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 条评论
登录 后参与评论

相关文章

来自专栏跟着阿笨一起玩NET

c#实现打印功能

2822
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

4045
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6998
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏java 成神之路

使用 NIO 实现 echo 服务器

4747
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2717
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4878
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2080
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2586
来自专栏魂祭心

原 canvas绘制clock

4174

扫码关注云+社区