HTTP协议详解(一)

协议

为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。

一、HTTP 协议介绍

  • HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
  • HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,现主流使用 HTTP1.0 和 HTTP3.0
    ○ HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现
    ○ HTTP3.0 基于 UDP 实现。
  • 支持 B/S 模式,支持基本认证和安全认证
  • HTTP 允许传输任意类型的数据对象,正在传输的类型有 Content-Type 标记
  • 可靠的无状态协议,无状态是指对事物没有记忆能力,这意味着如果后面的处理逻辑需要前面的状态只能重传信息( cookie 机制可以解决这个问题)。

二、作用和使用场景

当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个 HTTP 请求,对应的服务器收到这个请求之后,经过计算处理,就会返回一个 HTTP 响应。并且当我们访问一个网站时,可能涉及不止一次的 HTTP 请求和响应的交互过程。
基础术语:

  • 客户端 client: 主动发起网络请求的一端
  • 服务器 server: 被动接收网络请求的一端
  • 请求 request: 客户端给服务器发送的数据
  • 响应 response: 服务器给客户端返回的数据
    协议特点:一发一收
    注意: 网络编程中,除了一发一收之外,还有其它的模式
    • 多发一收:例如上传大文件
    • 一发多收:例如看直播时,搜索一个词条可以得到多个视频源
    • 多发多收:例如串流(steam link、moonlight 等等)

三、HTTP 的工作流程

  • 1、TCP 三次握手:client 和 server 建立 TCP 连接
  • 2、client 向 server 发送 http 请求
  • 3、server 接收 client 请求后响应,发送响应包(响应数据)给 client
  • 4、TCP 四次挥手:client 和 server 断开 TCP 连接

HTTP 的流程

在这里插入图片描述

HTTP 长连接和短连接
  • 长连接
    ○ 优点: 可以在一个 TCP 连接里面多次 HTTP 请求和响应交互,减少 tcp 建立连接的开销
    ○ 缺点:会存在队头阻塞的问题,会出现大量长连接占用问题(恶意创建众多 tcp 连接打满 server 的处理能力)
    ○ 队头阻塞问题在 HTTP2.0 之后解决
    § HTTP2.0 是多路复用且非有序阻塞的
    § HTTP2.0 提升了 TCP 连接的利用率
  • 短连接
    ○ 不保持 TCP 连接,每次 HTTP 请求响应结束后就断开 TCP 连接,下次请求重建 TCP 连接
    ○ 不会造成队头阻塞的问题,但是交互频繁的时候互建立大量的 TCP 连接浪费资源
    Http1.1 之后默认使用长连接
协议开启关闭
HTTP1.0Connection: keep-alive默认
HTTP1.1默认Connection: close
  • 如果服务端使用 nginx 做了反向代理,那么需要调整keepalive_timeout 参数
    keepalive_timout 时间值意味着:一个http产生的tcp连接在传送完最后一个响应后,还需要hold住 keepalive_timeout 秒后,才开始关闭这个连接。
TCP 的长连接
  • 注意和 HTTP 的keep-alive 不同,TCP 有自己的keep-alive 叫做 TCP 保鲜机制
  • net.ipv4.tcpkeepalivetime:表示TCP链接在多少秒之后没有数据报文传输启动探测报文
  • net.ipv4.tcpkeepaliveintvl:前一个探测报文和后一个探测报文之间的时间间隔
  • net.ipv4.tcpkeepaliveprobes:探测的次数
  • 逻辑为:tcpkeepalivetime 时间没有数据则开始探测,每过tcpkeepaliveintvl探测一次,最多探测tcpkeepaliveprobes次,如果全部失败则关闭TCP连接。

四、数据包格式

在这里插入图片描述
在这里插入图片描述

burp 抓包
POST /api/v2/filereputation/query HTTP/1.1
Host: 10.252.177.58
User-Agent: python-requests/2.31.0
Accept-Encoding: gzip, deflate
Accept: /
Connection: close
Content-Type: application/json
Content-Length: 62

{“param”: “9e3bcd91672cb3e4d2e9345b71bf50ff”, “apikey”: “123”}

URL 的完整格式
协议类型:[//[访问资源需要的凭证信息@]服务器地址[:端口号]][/资源层级 UNIX 文件路径]文件名[?查询字符串][#片段标识符]

HTTP 的请求方法
在这里插入图片描述

1、GET 方法
- GET 是最常用的 HTTP 方法,常用于获取服务器上的某个资源。以下几种方式都会触发 GET 方法的请求
○ 在浏览器中直接输入 URL 回车或点击浏览器收藏夹中的链接,此时浏览器就会发送出一个 GET 请求。HTML 中的 link、img、script 等标签的属性中放的 URL,浏览器也会构造出 HTTP GET 请求
○ 使用 Javascript 重点 ajax,也能构造出 HTTP GET 请求,各种编程语言(只要能够访问网络),就都能够构造出 HTTP GET 请求
- GET 请求的特点:
○ 首行里面的第一个部分就是 GET
○ URL 里面的 query string 可以为空,也可以不为空【Params 一般专指 Query 参数】
○ GET 请求的 header 有若干个键值对结构
○ GET 请求的 body 一般是空的

2、POST 方法
- POST 方法也是一种常见的方法,多用于提交用户输入的数据给服务器(如登录页面)。以下几种方法都会触发 POST 方法的请求
○ 通过 HTML 中的 form 标签可以构造 POST 请求
○ 使用 JavaScript 的 ajax 可以构造 POST 请求
- POST 请求的特点:
○ 首行第一个部分就是 POST
○ URL 里面的 query string 一般是空的
○ POST 请求的 header 里面有若干个键值对
○ POST 请求的 body 一般不为空(body 的具体数据格式,由 header 中的 Content-Type 来描述;body 的具体数据长度,由 header 中的 Content-Length 来描述

3、GET 和 POST 的区别
- GET 和 POST 其实没有本质区别,使用 GET 的场景完全可以使用 POST 代替,使用 POST 的场景一样可以使用 GET 代替。但是在具体的使用上,还是存在一些细节的区别
- GET 习惯上会把客户端的数据通过 query string 来传输(body 部分是空的)
- POST 习惯上会把客户端的数据通过 body 来传输(query string 部分是空的)
- GET 习惯上用于从服务器获取数据,POST 习惯上是客户端给服务器提交数据
- 一般情况,程序员会把 GET 请求的处理,实现成“幂等”的,对于 POST 请求的处理,不要求实现成“幂等”【幂等:指的是同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的】
- GET 请求可以被缓存,可以被浏览器保存到收藏夹中,POST 请求不能被缓存

五、wireshark抓包分析

暂无

六、几种常用的 header

header 的整体格式是键值对结构,每个键值对占一行,键和值之间使用 冒号+空格 进行分割
以下介绍几个常见的报头

  • Host
    ○ HOST 的值表示服务器主机的地址和端口(地址可以是域名,也可以是 IP;端口号可以省略或者手动指定)
  • Content-Length
    ○ Content-Length 表示 body 的数据长度,长度单位是字节
  • Content-Type
    ○ Content-Type 表示 body 的数据格式,以下介绍三种请求中的数据格式
    § application/x-www-form-urlencoded
    这是 form 表单提交的数据格式,此时 body 的格式就类似于 query string(是键值对的结构,键值对之间使用 & 分割,键与值之间使用 = 分割
    § multipart/form-data
    这是 form 表单提交的数据格式(需要在 from 标签上加上 enctyped=“multipart/form-data”),通常用于 HTML 提交图片或者文件
    § application/json
    此时 body 数据为 json 格式,json 格式就是源自 js 的对象的格式。用一个 { } 括住,里面有多个键值对,键值对之间使用逗号分割,键和值之间使用冒号分割
  • User-Agent(简称 UA)
    UA 在早年是一个非常有用的字段,网站的开发者可以根据它来检测页面的“兼容性”
    ○ User-Agent 表示浏览器或者操作系统的属性,形如:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/91.0.4472.77 Safari/537.36
    ○ Windows NT 10.0; Win64; x64 表示操作系统信息
    ○ AppleWebKit/537.36 (KHTML, like Gecko)Chrome/91.0.4472.77 Safari/537.36 表示浏览器信息
  • Referer
    Referer 表示这个页面是从哪个页面跳转过来的,这是一个很有用的字段
    注意: 如果直接在浏览器中输入 URL 或直接通过收藏夹访问页面时,是没有 Referer 的
  • Cookie
    ○ Cookie 是什么?
    Cookie 是浏览器提供的一种让程序员在本地存储数据的能力
    ○ 为什么需要 Cookie?
    如果没有 Cookie,直接将要存储的数据保存在客户端浏览器所在的主机的硬盘上,那么就会出现很大的安全风险,比如当你不小心打开某个不安全的网站,该网站就可以在你的硬盘上写一个病毒程序,那么你的电脑就挂了!因此浏览器为了保证安全性,就禁止网页中的代码访问主机的硬盘(无法在 JS 中读写文件),因此也就失去了持久化存储的能力,故 Cookie 就很重要!
    ○ Cookie 里面存的是什么?
    Cookie 中存储了一个字符串,是键值对结构的,键值对之间使用 ;分割,键和值之间使用 = 分割
    ○ Cookie 来自哪里,如何往 Cookie 中存储数据?
    Cookie 这个数据可能是客户端(网页)自行通过 JS 写入的,也可能来自于服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据。
    Cookie 在浏览器这边是按照域名维度来存储的,例如我们打开 CSDN 的首页,点击网址栏左边的一把小锁就能找到 Cookie,我们就可以看到打开这个网页时,系统按照不同域名设置了 Cookie
    ○ Cookie 要到哪里去?
    Cookie 字段会在后续的请求中,把浏览器本地存储的这些键值对再发送回服务器
    ○ Cookie 的应用
    Cookie 的一个经典应用就是保持客户端的登录状态
    ○ Cookie 的缺陷:
    每次请求都要把该域名下所有的 Cookie 通过 HTTP 请求传给服务器,因此 Cookie 的存储容量是有限的
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3280638.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

AlmaLinux9安装中文语言包_zabbix没有中文语言包

更新你的系统包,如果系统最新可以忽略: sudo dnf update安装中文简体语言包 sudo yum install langpacks-zh_CN安装繁体中文包 sudo dnf install kde-l10n-Chinese-traditional安装完成后重启系统,以确保语言设置生效 设置系统为简体中文&…

【JavaSE-线程安全问题-死锁详解】

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 🌈…

HarmonyOs~应用程序框架进阶之 UIAbility组件间的交互

我们要知道一个概念 一个应用可以有多个模块 每个模块又可以有多个UIAbility 每个UIAbility又可以有多个页面 如何创建同模块的UIAbility 首先我们创建好项目之后 就是有一个UIAbility组件存在的 那么如果我想要在同模块创建一个UIAbility怎么创建 想要创建的模块-->&g…

IP地址https证书的优势与申请途径

一、IP地址SSL证书的优势 无需域名:对于一些内部系统或者专用设备而言,它们可能不具有域名,但仍需保障通信安全。IP地址SSL证书正好满足这一需求。简化管理:对于拥有大量设备的企业来说,维护每个设备的域名可能是一个…

快手文生图模型-Kolors快速上手

Kolors是什么 可图(Kolors):用于真实感文本到图像合成的扩散模型的有效训练 可图,是快手开源的一个文生图模型,架构上使用了chatglm,比普通的sd模型在中文理解上要强大很多,以往sd模型的提示词理解能力往往只有两种 …

U盘格式化后数据能恢复吗?恢复方法盘点!

在数字化时代,U盘已成为我们日常生活和工作中不可或缺的数据存储设备。然而,在使用过程中,我们有时可能会因为各种原因对U盘进行格式化,从而不慎删除了重要数据。那么,U盘格式化后数据能恢复吗? 首先&…

判断IP是否高匿?教你小妙招!

如何判断一个IP是否是高匿的呢?小编为大家整理了一下,赶快来看一看吧! 1. 了解高匿IP的定义 高匿IP,也叫匿名代理IP,是指在使用代理IP时,不向目标服务器透露用户的真实IP地址,甚至不会透露正在…

手摸手教你撕碎西门子S7通讯协议12--使用第3方通讯库读写数据

1、概述 前面通过坚强的努力,实现了多种数据类型的读写,发现还是灰常棒的,但也显示了它的不灵活性,伙伴们肯定有很多疑问,比如如何做到一个简单的命令实现读写,而不是自己拼接那些非常复杂的报文&#xff…

在 Elasticsearch 中实现采集自动扩展

作者:来自 Elastic Pooya Salehi, Henning Andersen, Francisco Fernndez Castao 正确调整 Elasticsearch 集群的大小并不容易。集群的最佳大小取决于集群正在经历的工作负载,而工作负载可能会随着时间的推移而变化。自动扩展会自动调整集群大小以适应工…

【建议收藏】大数据Hadoop实战入门手册,配套B站视频教程1小时速通

大数据Hadoop入门实战专栏 大数据技术概述大数据简介Hadoop简介 大数据集群环境搭建环境搭建概述虚拟机准备集群搭建Java开发环境准备 分布式文件系统HDFS学习前期概述HDFS Shell命令HDFS可视化界面HDFS Java API编程环境初始化API基本使用创建目录更改目录权限上传文件查看目录…

新版HAP应用市场即将推出,诚邀意向开发者提前入驻,抢占先机

新版HAP应用市场简介 今年Q4,明道云HAP将会发布全新的应用市场。任何企业和个人,无论是明道云客户、伙伴,甚至是自由职业者,都可以入驻成为应用市场的开发者,上传独创的应用、插件、API,自由定价售卖并获得…

数说故事 | 社媒聆听“顶流”红山动物园UGC声量

7月,CASETiFY和南京红山森林动物园联名啦,一个号称“手机壳中的爱马仕”,一个是“动物园顶流”,两大IP梦幻联动,推出了“明星动物”系列手机壳,CASETiFY还解锁“饲养员”身份,认养了酷酷的美洲豹…

深度学习Day-27:生成对抗网络(GAN)入门

🍨 本文为:[🔗365天深度学习训练营] 中的学习记录博客 🍖 原作者:[K同学啊 | 接辅导、项目定制] 要求: 了解什么是生成对抗网络生成对抗网络结构是怎么样的学习本文代码,并跑通代码调用训练好…

抖音开放平台API接口如何开发||抖音相关接口数据采集数据分析 【附实例】

抖音开放平台提供了多种接口,包括授权登录、用户信息、视频管理、评论互动、消息通知、数据分析等。 以下是开发抖音接口的一些步骤: 1. 注册开发者账号:在抖音开放平台上注册开发者账号,获取开发者身份认证。 2. 创建应用&…

Oracle VM VirtualBox 异常退出,如何解决??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

【Linux】进程间通信 —— 管道与 System V 版本通信方式

目录 为什么有进程间通信?进程间通信的目的是什么? 管道 匿名管道 父子进程共享管道 命名管道 共享内存 概念 原理 共享内存和内存映射(文件映射)的区别 使用 消息队列 概念 使用 信号量 概念 使用 IPCS 命令 S…

Docker Compose方式部署Ruoyi-前后端分离版本

目录 一. 环境准备 二. 制作一个jdk8u202环境的镜像 三. 制作nginx镜像 四. 对项目文件做修改 五. 项目打包 1. 前端打包 2. 后端打包 六. 编写docker-compose.yml 一. 环境准备 主机名IP系统软件版本配置信息localhost192.168.226.25Rocky_linux9.4 git version 2.…

码农职场:一本专为IT行业求职者量身定制的指南

目录 写在前面 推荐图书 推荐理由 写在后面 写在前面 本期博主给大家推荐一本专为IT行业求职者量身定制的指南:《码农职场》。 推荐图书 https://item.jd.com/14716160.html 内容简介 这是一本专为广大IT 行业求职者量身定制的指南,提供了从职前…

黑马JavaWeb后端案例开发(包含所有知识点!!!)

目录 1.准备工作 环境搭建 开发规范 REST(REpresentation State Transfer),表述性状态转换,它是一种软件架构风格 注意事项 统一响应结果 2.部门管理功能 查询部门 删除部门 新增部门 RequestMapping 3.员工管理功能 分页查询 批…

单细胞|MEBOCOST·基于代谢物的细胞通讯预测(一)

import os,sys import scanpy as sc import pandas as pd import numpy as np from matplotlib import pyplot as plt import seaborn as sns from mebocost import mebocost 1. 创建 mebocost 对象 adata sc.read_h5ad(data/demo/raw_scRNA/demo_HNSC_200cell.h5ad) ## che…