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

相关文章

来自专栏前端之路

http状态码

873
来自专栏谈补锅

http协议笔记

1、连接(Connection):浏览器和服务器之间传输数据的通道。一般请求完毕就关闭,http不保持连接,不保持连接会降低处理速度(因为建立连接速度很慢),保...

1104
来自专栏cs

python文件下载

2738
来自专栏Python自动化测试

python接口测试之401错误的分析和解决(十七)

通过一个案例来分析在HTTP的请求中403错误的解决以及HTTP的状态码中403怎么理解,见发送一个请求后,返回的状态码,见如下的信息:

896
来自专栏Grace development

thinkphp 如何禁止浏览器缓存

我写了一个礼品兑换功能,但用户兑换完成后,后退又进入兑换页面,如果使得用户使用浏览器自带的后退按钮后退后页面重新读取php代码

793
来自专栏along的开发之旅

Http请求和HttpServletRequest中获得对应参数的方法

一个Http请求可以分为请求行, 请求头, 和可选的实体内容, 我们分别来看下http和HttpServletRequest中的方法如何对应.

491
来自专栏闻道于事

HTML状态码大全(301,404,500等)

HTML状态码大全(301,404,500等)HTML状态码大全(301,404,500等)HTML状态码大全(301,404,500等)HTML状态码大全(...

3156
来自专栏娱乐心理测试

网络请求返回HTTP状态码(404,400,500)

4515
来自专栏Java Edge

告知服务器意图的 HTTP 方法1 GET:获取资源2 POST:传输实体主体3 PUT:传输文件4 HEAD:获得报文首部5 DELETE:删除文件6 OPTIONS:询问支持的方法一般网站只用G

26810
来自专栏沈唁志

PHP中常用的header头

1353

扫码关注云+社区