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

相关文章

来自专栏从零学习云计算

Centos7.2学习记录(3)——搭建本地yum仓库

入职以来,由于公司云主机运行在内网环境下,在搭建kubernetes和openshift集群时都需要进行离线安装,这里粗略记录一下本地yum仓库的搭建过程。 ...

3840
来自专栏编码前线

HTTP协议简介

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

windows批量创建用户

  建立用户:net  user  用户名 密码  /add           (如:net user test 123 /add)   提升权限:net  ...

3131
来自专栏smy

前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍

webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互...

3656
来自专栏张善友的专栏

使用WinSCP软件在windows和Linux中进行文件传输

当我们的开发机是Windows,服务器是Linux时,如何在windows操作系统和linux操作系统之间进行文件传输呢?大部分使用ScureCRT或者putt...

29410
来自专栏LanceToBigData

TCP/IP(七)之玩转HTTP协议

前言   前面一篇的博文简单的介绍了一下属于应用层的HTTP协议,这一篇我将详细的学习HTTP协议,这也是做Web开发中一定要用到的协议。虽然我是做大数据的,但...

2479
来自专栏轮子工厂

在浏览器中输入网址到页面显示出来,这中间到底发生了什么?

(1)检查本地hosts文件是否有这个网址的映射,如果有,就调用这个IP地址映射,解析完成。

873
来自专栏JavaQ

关于Cookie的细致总结

Cookie概述 HTTP是一种无状态的请求/响应协议,用户通过浏览器访问Web站点后,Web服务端没有可用信息来判断是哪个用户发起的请求,更加无法知道下次访问...

3284
来自专栏行者悟空

Nginx性能优化的那些事

1494
来自专栏前端技术总结

升级你的webpack(下)-- webpack入门教程(三)

我负责的一个前端项目之前用到的是webpack1,现需要升级到webpack4,特此记录下升级过程中有一些配置和需要注意的问题,具体会介绍:

1.2K59

扫码关注云+社区