HTTP协议学习

tcp协议学习:wireshark分析tcp协议(一)三次握手【理论 + 实操】

前面我们对TCP协议进行分析时,我们知道了在TCP/IP具有四层结构,其中各层对应的协议如下

  • 应用层——HTTP、FTP、SNMP等协议
  • 传输控制层——TCP / UDP协议
  • 网络层——IP协议
  • 数据链路层

其中HTTP协议就是典型的应用层的协议。

也就是说HTTP是站在应用的角度,为应用程序提供服务的。

下面我们对HTTP协议进行学习。

什么是HTTP?

HTTP全称是Hyper Text Tranfer Protocol(超文本传输协议)的缩写,其定义了浏览器服务器之间的请求

响应的格式与规则,是网络可靠交互文件的基础

HTTP操作过程

整体上,分为以下步骤

  • 用户输入地址
  • 解析地址
  • 建立TCP连接
  • 发送请求
  • 响应请求
  • 释放TCP连接

大致工作流程如下

请添加图片描述

以访问我们学校中的页面为例

建立TCP连接——三次握手

请添加图片描述

建立完成后,发送HTTP请求——GET login.html

请添加图片描述

因为当前系统的默认页面为login,因此通过GET获取login页面

服务器响应HTTP请求

服务器在接受到GET请求后,发送ACK包后,响应HTTP请求

请添加图片描述

因为服务器之前已经响应发送过页面了,因此这里的状态码为304——重定向

直接使用缓存页面

释放TCP连接

请添加图片描述

浏览器渲染页面……

HTTP特点

在经过上述的实例演示HTTP操作过程,或许我们可以总结HTTP的工作特点

无连接

我们发现在建立TCP连接,发送HTTP请求后,服务器响应我们的请求之后,就释放了TCP连接

也就是说,每次连接只处理一个请求

优点——节省传输时间,实现简单

缺点——占用资源不释放

无状态

我们连续请求两次验证码,得到了下面的两个图

请添加图片描述

请添加图片描述

我们发现,浏览器在短时间内响应了两次,且这两次之间没有什么关系,基本请求相同

服务器并不会保留之前的一切请求或者响应报文信息

优点——更快地处理大量的事物,确保协议的可伸缩性

缺点——后续处理需要前面的信息,必须重传,导致每次连接数据量大


针对上述HTTP特点存在的缺点,有以下两种保持HTTP连接状态的技术:

  • cookie
  • session

cookie——客户端保持状态

cookie就是服务器给客户端发送一段特殊的信息,这些信息以文本文件的形式存放在客户端,每次发送HTTP请求时都带上这样的特殊信息,这样就能实现 客户端的保持状态

例如,在很多网站的登录页面都有 请记住我的选项,在勾选后就不需要再进行重复的登录工作了

session——服务器保持状态

session意为“会话”,客户端与服务器之间的一系列交互都称作session

也就是说,客户端在发送HTTP请求后,服务端会创建一个session,并将本session id发送给客户端

下一次客户端再次发送请求后,带上这个session id,

服务器根据其找到对应的session,从而再次使用

HTTP协议组成结构

在浅层了解HTTP协议的工作流程与特点后,现在我们深入对HTTP请求协议进行分析学习

HTTP是面向文本的,因此报文中的每个字段都是一些ASCII码串,并且每个字段长短不确定,有以下两类报文:

  • 请求报文
  • 响应报文

请求报文

请求报文分为四个部分

  • 请求行
  • 请求头
  • 空行
  • 请求正文

请求行

请求行包括三部分HTTP方法URL版本号

HTTP常用方法

方法意义用途
GET请求读取URL标识信息访问资源
POST给服务器添加信息提交表单等数据信息

分析下列真实的请求行

请添加图片描述

  • 方法——GET
  • URL——/query/sortLabel
  • 版本——HTTP/1.1

请添加图片描述

请求头

使用fiddler进行分析。

这部分分为多行,每一行都是键值对,通过: 空格来分割

请添加图片描述

空行

请求头的结束标志

响应报文

响应报文分为四个部分

  • 状态行
  • 响应头
  • 空行
  • 响应正文

状态行

状态行可分为版本号状态码状态码描述

HTTP1.1状态码分类

状态码类别意义
1xx信息类接受的请求正在处理
2xx成功类成功处理请求的状态码
例如:200,成功处理请求
3xx重定向表示要完成请求,需要进一步操作
例如:
301,永久性重定向,分配新的url
302,临时性重定向,临时被分配新的url
303,资源存在另一个URL中,用GET方法获取资源
304,未修改,请求房爷未修改过,不返回网页内容
4xx客户端错误表示请求可能出错
例如:
400,请求参数错误,服务器不理解请求语法
401,请求需要通过HTTP验证
403,服务器拒绝请求
404,服务器找不到请求的网页
5xx服务器错误服务器在尝试处理请求时发生内部错误
例如:
500,服务器遇到错误,无法完成请求
503,服务器处于挺急或超负载,无法处理请求

响应头

通常为键值对结构,通过: 空格分割

以下是真实响应头

请添加图片描述

空行

响应头的结束标志

响应正文

服务器返回的具体数据,常见格式为JSON

例如:请添加图片描述


版权声明:本文为qq_22841387原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。