利用Python进行Web渗透测试(四):HTTP协议基础

本篇概要

  • 什么是HTTP,以及HTTP的工作方式
  • HTTP的方法

一、什么是HTTP

HTTP协议

HTTP全称超文本传输协议,一个设计用来来客户端和服务器之间进行通信的协议。HTTP在网络世界中属于OSI模型的第七层——应用层,也属于TCP/IP模型的第四层——应用层。

关于什么是OSI模型,什么又是TCP/IP模型,简而言之,其是计算机网络世界的一个网络体系结构,用来定义计算机网络及其各个部分通信的原理的作用。

下图是OSI模型和TCP/IP模型的一个简单示例图:

OSI模型与TCP/IP模型

OSI模型与TCP/IP模型并非是一一对应的,但是思路和结构大体上是相似的。 TCP/IP模型中的网络接口层就是我们的各种网络设备(路由器、交换机、电脑等)的网络接口以及接口之间的物理链路(网线、光纤等);网际层则是网络设备之间的寻址和路由,确定两个设备之间通信的路径,IP地址就是作用在这一层;接下来的传输层就是在通过IP确定了设备之间的路由后,进行勾搭和建立联系,这一层的主要协议是TCP和UDP,TCP是面向连接的传输协议(经典的三次握手),在双方的确认之下,两者才会建立起网络连接,而UDP则是面向无连接的传输协议,通讯时不需要接收方确认,属于不可靠的传输。最后就是应用层了,这一层定义了很多高级的传输协议,比如我们的网络爬虫涉及到的HTTP,还有DNS、FTP等,很多网络应用均是基于这一层的网络协议进行开发的。

TCP/IP各层及其常用协议

我们的网络爬虫涉及到上三层,比如获取HTML涉及的http,使用代理IP涉及到的IP,以及建立通信连接的TCP/UDP。

下面,我们使用wireshark抓取打开一个网页的数据包,通过对网络数据进行抓包,我们能够很清晰的理清TCP/IP各层的关系。

从图中可以看到,我们向远处服务器发送了一个HTTP请求,捕获到的数据包则显示我们发送出去的HTTP请求是以Frame帧进行传输的。

我们的请求字段数据打包在HTTP请求中,HTTP请求打包在了TCP请求中,TCP请求进而通过IP进行打包,最后通过Frame帧传输出去。这就完成了一个请求网页的过程。

HTTP协议的工作方式

HTTP用来实现客户端和服务器端的通信,主要依靠请求和响应来完成一个工作。 客户端发送请求,服务器端响应请求。在一次HTTP连接中,发送请求的永远都是客户端,而回复响应的则永远都是服务器端。并且,在HTTP中,只能由客户端发送请求,服务器端才能响应,否则服务器端不能主动对客户端进行响应。

现实世界的体现就是,网站服务器不会平白无故给我们返回一个HTML页面,我们只有输入或点击一个网址,网页才会呈现在浏览器上。

HTP的请求与响应

HTTP的协议版本

HTTP协议拥有两个版本:

  • HTTP/1.0
  • HTTP/1.1

http1.0是http协议的基础,而http1.1则添加和完善和http1.0的功能。

HTTP运行的端口

默认情况下,HTTP协议运行在服务器端的80端口上。

HTTPS

HTTP协议使用明文进行传输和通信,这对某些隐秘的通信就很不安全,容易被窃取。 于是HTTPS应运而生。 HTTPS 使用SSL或TLS对HTTP的消息进行加密,并运行在443端口上

HTTP的消息结构

通常一个HTTP消息包括客户端向服务器端发送的请求消息和服务器端向客户端发送的响应消息。这两种类型的消息均由一个起始行,一个或者多个头域,一个指示头域结束的空行和可选的消息体组成。 其中,请求消息:

  • 起始行:由请求方法、请求的URL以及使用的HTTP协议版本三部分组成
  • 头域:各种请求头(下面详述)
  • 消息体:一般的GET请求没有消息体

HTTP请求的消息结构

响应消息:

  • 起始行:由响应的协议版本、响应状态码和响应状态码描述三部分组成;
  • 头域:各种响应头
  • 消息体:响应请求的正文,比如一个HTML页面、一个文件、一个图片等

HTTP响应的消息结构

二、HTTP的方法

根据HTTP标准的定义,HTTP的请求方法有以下8种:

  • GET:请求指定的资源,并返回资源实体。
  • POST:向指定的资源提交数据并处理请求(上传文件或提交表单之类的操作)。
  • HEAD:类似于GET方法,请求指定的资源,但不返回资源实体。
  • PUT:请求更新指定的资源。
  • DELETE:请求删除指定的资源。
  • OPTIONS:返回服务器对指定资源所支持的请求方法。
  • TRACE:回显服务器收到的请求,主要用来测试或诊断。
  • CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

其中:

  • 在HTTP/1.0中定义的方法有:get、post、head
  • 在HTTP/1.1中定义的方法有:options、put、delete、trace、connect等

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

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏happyJared

Docker + Elasticsearch 集群环境搭建

无论是安装包形式还是基于Docker,搭建Elasticsearch集群环境还是较为简单的,实操的时候还遇到过一丢小问题,本文用于记录下操作过程。

693
来自专栏服务端思维

Nginx 反向代理 机制

反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给...

853
来自专栏LIN_ZONE

Nginx负载均衡的5种策略(转载)

本文转自:nginx负载均衡的5种策略(转载) 如需转载请注明出处:https://www.cnblogs.com/zhuchenglin/p/9750970...

521
来自专栏大学生计算机视觉学习DeepLearning

ImportError: No module named cv2 或 ModuleNotFoundError: No module named 'cv2'

原文链接:https://www.cnblogs.com/DOMLX/p/9747019.html

1082
来自专栏运维

DNS服务器(五):使用queryperf对DNS服务器作压力测试

   当我们把DNS服务器配置好后,我们肯定会想测试一下DNS服务器的性能如何,上线后如果请求数够多服务器还能否响应?于是,我们可以使用软件模拟环境,对DNS...

753
来自专栏CaiRui

Linux 优化

 一、最小化原则 (1)安装最小化 (2)开机启动服务最小化 (3)操作最小化 (4)权限最小化 (5)配置参数合理,不要最大化 二、端口优化   远程登录的端...

19810
来自专栏七夜安全博客

PowerProxy原理篇: HTTP代理(1)

1073
来自专栏施炯的IoT开发专栏

Windows Phone 8 API一览

    Windows Phone 7平台不支持Native语言的开发,这困扰了许多游戏和底层应用的开发者。Windows Phone 8 SDK的推出,改善了...

1648
来自专栏自由而无用的灵魂的碎碎念

使用Oracle SQL Developer 64位来访问Oracle 11g R2 64bit版本

之前,Oracle刚刚发布了Oracle 11g R2 for Windows版本。我的系统是Windows Server 2008 R2,所以安装的就是64位...

611
来自专栏菩提树下的杨过

haproxy 新手上路

apache、nginx之类的反向代理(转发)功能,通常只能用于http协议,其它协议就不好使了(注:nginx据说商业版的,支持tcp协议了)。 haprox...

1928

扫码关注云+社区