当前位置: 首页 > article >正文

2.5 - 网络协议 - HTTP协议工作原理,报文格式,抓包实战

「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》

HTTP协议

  • 1、HTTP协议工作原理
  • 2、HTTP协议报文
  • 3、HTTP请求方法
  • 4、HTTP响应状态码
  • 5、HTTP请求头

HTTP(Hypertext Transfer Protocol)是 「超文本传输协议」,基于B/S架构(Browser/Server,浏览器/服务器模式)通信,用户通过浏览器访问Web服务器产生的网页(文本、图片、视频、音乐等),与服务器进行数据交互。

1、HTTP协议工作原理

HTTP协议是基于TCP实现的请求响应-响应协议,工作分为四个过程:

  1. 三次握手「建立TCP连接」
  2. 客户端发送「请求」
  3. 服务端发送「响应」
  4. 四次挥手「关闭TCP连接」

工作过程从HTTP的数据包中可以很好地体现出来

在这里插入图片描述

协议本质上就是一个约定俗称的规范,而HTTP协议就规定了浏览器需要如何从服务器请求Web页面、服务器需要如何把Web页面传送给客户端。

  • 浏览器向服务器请求Web页面需要使用「HTTP请求报文」
  • 服务器吧Web页面传送给客户端需要使用「HTTP响应报文」

2、HTTP协议报文

在这里插入图片描述

  • 请求报文分为三个部分:请求行、请求头、请求体
  • 响应报文分为四个部分:状态行、响应头、响应空行、响应体

HTTP请求报文的数据包如下

在这里插入图片描述

  • 请求行:【固定格式】包含请求方法、请求URL、HTTP版本
  • 请求头:包含请求的客户端的信息,一行一个请求头
  • 请求体:请求的数据部分

HTTP响应报文的数据包如下

在这里插入图片描述

  • 状态行:【固定格式】包含版本和响应状态码、状态信息
  • 响应头:包含响应的服务器的资源信息,一行一个响应头
  • 响应空行:用来间隔/区分响应头和响应体
  • 响应体:服务器响应的内容,通常是一个HTML页面的代码或者给客户端的数据。

3、HTTP请求方法

在这里插入图片描述

HTTP请求报文的 Request Method表示请求方法(面试常问),不同的方法可以实现不同的获取数据的操作

  • GET:获取数据
  • POST:传递数据,常用于表单提交或上传文件
  • PUT:获取文件资源
  • HEAD:获取报文首部
  • DELETE:删除文件
  • OPTIONS:询问支持的方法(HTTP服务器并不是所有方法都必须实现,但起码要实现GETHEAD方法)
  • TRACE:回显服务器收到的请求,常用于测试
  • CONNECT:要求用隧道协议连接代理,比如SSL加密
  • HTTP服务器扩展其他自定义的方法

GET和POST请求的区别主要体现在三个方面,首先是作用,两个请求的设计理念就不一样:

  • get主要用在查询操作,用来获取资源。
  • post主要用在增删改操作,用来传递数据。

然后是安全性:

  • get请求的参数拼接在url后面,受到url的长度限制,但前端直接就能看到参数的内容,不安全。
  • post请求的参数放在请求体里面,没有大小限制,前端不能直接看到参数的内容,比get要安全一些。

还有缓存和刷新机制:

  • get请求可以被浏览器缓存,并且刷新没有影响。比如同样的请求,第一次请求是200,第二次请求就是304,直接查缓存。
  • post请求不能缓存,每次都会请求到服务器才能响应;如果刷新的话,会重新提交一次数据。

4、HTTP响应状态码

在这里插入图片描述

HTTP响应报文的 Status Code 表示响应状态码,用来判断请求成功/失败的原因。

常见的响应状态码:

  • 200 OK:请求成功
  • 304 Not Modified:访问了缓存,短时间重复访问同一个页面,会直接去缓存,而不再请求服务器。
  • 403 Forbidden:没有权限,请求的页面被禁止访问
  • 404 Not Found:路径错误,服务器找不到被请求的页面
  • 500 Internal Server Error:后端代码报错了,请求未完成。服务器遇到不可预知的情况。

完整的状态码如下:

1xx 请求信息

在这里插入图片描述
2xx 请求成功

在这里插入图片描述
3xx 请求被重定向

在这里插入图片描述
4xx 客户端错误

在这里插入图片描述

5xx 服务器错误

在这里插入图片描述

5、HTTP请求头

HTTP请求的中间部分就是请求头,一行一个,每个请求头的字段都有不同的作用,按需使用。

在这里插入图片描述

  • Host:服务器的IP+端口,用来寻找目标服务器。
  • Content-Length:请求体的长度,没有请求体就没有这个字段。
  • Content-Type:请求体的格式,接收方按照这个格式解析。
  • User-Agent:客户端的浏览器版本,接收方按照这个调整返回的内容。
  • Referer:源URL,接收方可以验证请求的来源,防止恶意请求。
  • Cookie:存储在浏览器本地的一些数据,比如账号密码可以用来免登陆。
  • Accept:浏览器可接受的MIME类型
  • Connection:是否需要长链接,Keep-Alive:使用,colse:关闭。
  • X-Forwarded-For:源IP,接收方可以追溯请求的源IP,防止恶意请求。

http://www.kler.cn/a/146030.html

相关文章:

  • STM32 学习笔记【补充】(十)硬件I2C读写MPU6050
  • VIVADO FIFO (同步和异步) IP 核详细使用配置步骤
  • [EAI-018] π0: A Vision-Language-Action Flow Model for General Robot Control
  • 二叉搜索树(TreeMapTreeSet)
  • (十五)WebGL中gl.texImage2D函数使用详解
  • 多种vue前端框架介绍
  • 机器学习库:numpy
  • 笔记:pycharm当有多个plt.show()时候,只显示第一个plt.show()
  • 线性分组码的奇偶校验矩阵均匀性分析
  • 最新AI创作系统ChatGPT网站运营源码、支持GPT-4-Turbo模型,图片对话识图理解,支持DALL-E3文生图
  • Vue框架学习笔记——数据代理
  • 高精度/单精度
  • Couchdb 权限绕过漏洞复现(CVE-2017-12635)
  • kafka,RabbitMQ,RocketMQ,他们之间的区别,架构,如何保证消息的不丢失,保证不重复消费,保证消息的有序性
  • 基于PLC的果园灌溉系统设计(论文+源码)
  • R语言数据缩放-1到1
  • 免费分享一套基于springboot的餐饮美食分享平台系统,挺漂亮的
  • 【数据中台】开源项目(2)-Dbus数据总线
  • 只考数据结构,计算机评级C+,成都信息工程大学考情分析
  • 【GD32307E-START】RT-Thread移植测试
  • Debian 11.3 ARM64 安装中文语言包
  • 【开源】基于Vue和SpringBoot的个人健康管理系统
  • 【计算机网络笔记】多路访问控制(MAC)协议——轮转访问MAC协议
  • 056-第三代软件开发-软件打包
  • 正则表达式例题-PTA
  • [Docker]十.Docker Swarm讲解