【网络】详解http协议
目录
- 一、认识URL
- urlencode和urldecode
- 二、HTTP协议
- HTTP协议格式
- HTTP的方法
- HTTP的状态码
- HTTP常见Header
一、认识URL
URL叫做统一资源定位符,也就是我们平时俗称的网址,是因特网的万维网服务程序上用于指定信息位置的表示方法。
urlencode和urldecode
urlencode编码:主要解决在url中出现的特殊符号的问题
urldecode:就是urlencode的逆过程
比如:图中的“+”就被转义成了“%2B”,而urldecode就是把“%2B”解释成“+”
转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
二、HTTP协议
HTTP协议格式
HTTP请求:
- 首行: [方法] + [url] + [版本]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
- Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个Content-Length属性来标识Body的长度;
HTTP响应:
- 首行: [版本号] + [状态码] + [状态码解释]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束
- Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有一个
- Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页面内容就是在body中.
HTTP的方法
其中最常用的就是GET方法和POST方法
HTTP的状态码
为什么有状态码?
我们对应的请求,我们给浏览器返回结果,但是我们怎么知道返回的是正确的,所以有http状态码。
当你访问某个服务器上的某个资源时,这个资源不存在,属于客户端错误还是服务器错误?
请求也分正常请求和不正常请求,比如你的银行卡只有1元,而你要取一个亿,所以服务器上的资源是有限的,所以404报错是客户端的错误。
要不要告诉客户端是错误的?要,所以会返回404的页面
5开头,一般是服务器错误,比如我们今天在做请求,服务器里面可能会创建进程或线程处理失败,这就是服务器内部错误,或者一些原因,服务器响应失败,但是即使公司内部是服务器错了,也不会给你发是5开头的错误码,一般会发1或2开头
3开头的状态码:重定向状态码
概念:有个客户端和服务器,因为某些原因服务器地址换了, 对应网站变了,可是老用户不知道,所以老用户访问的时候,请求之后,服务器不对这个客户端提供服务,只是告诉你当前需要访问其他地址。
我们举个例子,来理解什么是重定向状态码:
有个学校东门,在东门有家吃饭的地方,但是学校东门路况不好,过了二三月,走到吃饭的地方,发现门上有贴张字条,这条路在修,我们临时搬到西门,所以重定向功能是通过服务的一方告诉你,我们店门没办法提供服务了,由你决定去不去。而过了半年后,是去西门还是东门,但是我不知道路修好没,所以我还是去东门看看,看了后,然后再跑到西门,因为我不知道什么时候搬过来,这就是临时重定向,我的认知始终是先去老的店门,后来,老板在西门干久了,生意好,想在西门开,就回老店,贴三个月之内,我们永久搬到西门,所以此时,我们去东门看到这张纸,以后就都会去西门了。
- 临时重定向:不更改浏览器的如何地址信息
- 永久重定向:会更改浏览器的本地书签
server 会响应301 302 307 + Location + 新的地址
301:永久重定向
302 307:临时重定向
重定向什么时候用?
1、一个网站,不仅仅是人在访问,由可能有其他的程序也在访问,比如爬虫,搜索引擎每时每刻都在爬全网的数据
2、搜出来一个条目,点击,这个网站过期了,打不开了
一般用在搜索引擎爬全网的资源,会用重定向,爬的网站会经常更新,所以有临时重定向
HTTP常见Header
- Content-Type: 数据类型(text/html等)
- Cache-Control:缓存时间,默认为0,就是没有缓冲
- Content-Length: Body的长度
- Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
- User-Agent: 声明用户的操作系统和浏览器版本信息;
- referer: 当前页面是从哪个页面跳转过来的;
- location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
- Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能
- Accept-Enconing:我是客户端,可以接受什么样的编码或压缩类型
- Accept-Language:我是客户端,我未来可以接受什么样的编码符号
- User-Agent:代表这次HTTP请求的客户端信息
关于http的会话保持功能
http本身是无状态的,在我们不考虑缓存的问题,http今天访问file1,之后,还想访问,http并不知道你访问过,还会重新请求,就比如,登录哔哩哔哩,基于http已经登录了一个网站,关闭后,再访问,还是登录的,http不是无状态的吗,为什么还是认识我?
无状态主要是用于超文本传输的,本身并不会去维护你这个用户是否在线做过多工作,它本身不做,并不代表它不提供这个功能,所以http不直接做这个工作,但是用户需要这个功能,保证登录后,会一直都在,这就是会话功能,要使用户是否在线要持续的记录下来,所以有会话保持功能,会写入一些cookie信息,就有cookie加session功能,就是会话保持功能。
比如:服务器上有非常多的资源,如果今天我要访问一个资源,要VIP才能访问,所以我买了个VIP,然后我去访问它了,服务器识别到我是VIP,就发给我资源,而只有发和收,就是http的功能,下次我还想访问其他资源呢,http说你是谁啊,就还要再登录,,所以第一次访问VIP资源,服务器发现没登录,就会返回去要求登录,登录成功了,就会把我的账号密码提回去,服务器端就对我的账号密码做认证,做认证之前肯定我注册过,就会去查我的账号注册过,认证成功后,就会返回客户端一个认证通过的消息,可能返回一个301:Location: https//xxx,下次再访问时,它怎么知道我是谁,所以浏览器当我认证通过时,会通过一下http选项(set-cooke),把我的私人信息写到https的响应里,发给client。
1、将response中响应的cookie信息在本地进行保存(内存级,文件级)
所以以后访问请求都会携带一个cookie信息,不用用户手动操作,这是浏览器自动做的,服务器会自动进行认证,client访问每一个资源的时候,都需要认证的
假如黑客盗取cookie信息,就以你的cookie登录, 一旦我的cookie泄漏了,就被别人利用了,怎么解决呢?
所以服务器上有很多资源,client也来了,访问服务器资源,服务器叫先登录,会给client一个form表单,那我就以post的方式登录了, 以前是因为把我的信息保持在cookie里,这次我就先在服务器形成一个session对象,用当前用户的基本信息填充,就有了一个内存级或者文件级的,通过办法,形成一个session id,然后把id写回给client,证明登录成功了,所以session id是唯一的,client收到了session id,我本地也有cookie文件,只保存session id,是有保存时间限制的,一天或几天,之后在访问资源,都有携带一个http request cookie:session id,就给服务器推上来,每次推上来,就只需要确认是否在很多session id池当中,存在,就不用再登录了,然后黑客来了,给你client中放木马,拿到你的cookie,我也可以访问了,我在去访问时,也有session id,也可以访问,也会存在,但是我们的信息已经被server服务器维护了,而server服务器一般都是些公司。
所以cookie加session的策略存在的目的:
- 其一:用户信息不在泄漏
- 其二:我们要正确认识cookie加session的策略,不是为了防范客户用户被盗取的,也不是冒认客户去访问某某网站的,而是对异常用户进行识别,然后进行处理。
由于普通的小白,很难去保护自己的数据被盗用,所以我们很难去管理所有人的电脑,但是在公司层面,能保证把自己的东西管理好,服务器方虽然我无法确认你冒认我,但我识别出来,你冒认了,我立马就可以解决这个客户,
所以1、要识别出来,2、解决。但是,我们很难取解决,不可能去把你的用户密码改了,即使识别出来了,也很难去解决,最多是冻结,比如,这个账号在新疆,立马跑到北京,所以这个账号是有问题的,这个账号发生异地登录,就强制你下线,重新登录,黑客只有你的cookie信息,而没有你的账号密码,然后识别,比如这个QQ好友一天之内都在线了,在数据层面,如何解决,就直接将session id失效,就无法登录,就不像上面,怎么失效,只有改别人密码所以这种方案不能杜绝client的cookie丢失的问题,但是可以提出来一下解决方案,对异常client识别出来,并进行解决。
相关文章:

【网络】详解http协议
目录 一、认识URLurlencode和urldecode 二、HTTP协议HTTP协议格式HTTP的方法HTTP的状态码HTTP常见Header 一、认识URL URL叫做统一资源定位符,也就是我们平时俗称的网址,是因特网的万维网服务程序上用于指定信息位置的表示方法。 urlencode和urldecode …...

1819_ChibiOS的互斥信号与条件变量
全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com) 1. 关于会吃信号与条件变量的全局配置提供了4个配置信息,分别是互斥信号的使能、互斥信号的递归支持、条件变量的使能、条件变量的超时使…...

CSDN学院 < 华为战略方法论进阶课 > 正式上线!
目录 你将收获 适用人群 课程内容 内容目录 CSDN学院 作者简介 你将收获 提升职场技能提升战略规划的能力实现多元化发展综合能力进阶 适用人群 主要适合公司中高层、创业者、产品经理、咨询顾问,以及致力于改变现状的学员。 课程内容 本期课程主要介绍华为…...

电商接口api数据比价接口推荐
当前,受诸多因素的影响,经济下行,在日趋激烈的市场竞争中,很多企业也都面临着越来越大的生存压力,企业的盈利空间也逐渐被压缩。因此,越来越多的企业在控制成本方面更下功夫,这也就对企业采购提…...
读取Excel的工具类——ExcelKit
文章目录 ExcelKit工具类1、准备工作1.1、SheetInfoVo1.2、BizException 2、读取xlsx3、读取xls4、完整的ExcelKit.java源码 ExcelKit工具类 1、准备工作 1.1、SheetInfoVo import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import …...

vscode连接服务器一直retry
解决方法 打开vscode控制面板,输入命令remote-ssh: kill vs code server on host 选择一直连接不上的服务器端口 重新连接...

Spring Cloud Sentinel整合Nacos实现配置持久化
sentinel配置相关配置后无法持久化,服务重启之后就没了,所以整合nacos,在nacos服务持久化,sentinel实时与nacos通信获取相关配置。 使用上一章节Feign消费者服务实现整合。 版本信息: nacos:1.4.1 Sentinel 控制台 …...

STM32F4VGT6-DISCOVERY:uart1驱动
对于这款板子,官方并没有提供串口例程,只能自行添加。 一、PA9/PA10复用成串口1功能不可用 驱动测试代码如下: main.c: #include "main.h" #include <stdio.h>void usart1_init(void) {GPIO_InitTypeDef GPIO_InitStruct…...

C语言之 结构体,枚举,联合
目录 1.结构体 1.1结构的基础知识 1.2结构的声明 1.3 特殊的声明 1.4 结构的自引用 1.5 结构体变量的定义和初始化 1.6 结构体内存对齐 1.7 修改默认对齐数 1.8 结构体传参 2. 位段 2.1 什么是位段 2.2位段的内存分配 2.3 位段的跨平台问题 3. 枚举 3.1 枚举类型…...

红米电脑硬盘剪切
Redmi R14 2023版固态硬盘剪切 工具准备操作结尾语 首先要说明,本文所说的操作不一定适合你的电脑,因为电子产品更新换代过快,你的硬盘不一定能剪切,在操作前一定要仔细观察硬盘的型号,是否为同款,我上了图…...
微信小程序在线预览PDF文件
需求:微信小程序在线预览PDF合同文件,加载完成后强制阅读10秒才可点击同意按钮 H5代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" cont…...
Android 工厂模式增加Type-A功能测试
Android 工厂模式增加Type-A功能测试 收到客户需求想要增加Type-A测试项来验证Type-A功能,具体功能实现参照如下: /vendor/freeme/packages/apps/FreemeFactoryTest/src/com/freeme/factory/usb/TypeAUSB.java package com.freeme.factory.usb;i…...

Web攻防06_sqlmap的使用
文章目录 参考链接: SQLMAP简介支持五种不同的注入模式 数据猜解-库表列数据权限操作引出权限:引出文件:引出命令(执行命令): 提交方法-POST&HEAD&JSONPost注入cookie注入注入请求头中(…...

C++模拟实现-----日期计算器(超详细解析,小白一看就会!)
目录 一、前言 二、日期类计算器 三、日期计算器的实现 🍎日期计算器各个接口的实现 🍐日期计算器的需求 🍉打印当前日期(并检查日期是否合理) 💦检查日期是否合理 💦日期类构造函数&#x…...

Oracle实现把B表某一字段更新到A表
1.使用SQL命令UPDATE语句。 2.使用MERGE语句。 3.使用TRIGGER触发器。 4.使用游标CURSOR和循环 使用游标和循环来将B表中的数据更新到A表中,从而实现了两个表数据的同步。例如下面的代码实现:...
CUMCM历年赛题汇总
题目来源: 全国大学生数学建模竞赛官网 注:题目和数据均可在官网下载 2021–2023年 年份题号题目2023A定日镜场的优化设计2023B多波束测线问题2023C蔬菜类商品的自动定价与补货决策2023D圈养湖羊的空间利用率2023E黄河水沙监测数据分析2022A波浪能最大…...
人间道-您到底做错了什么:正心径之您要逐渐去除外邪行为
过去的您或许在您自个身上付出,投入了巨大,重大的人力,物力,财力等各方面的重重的成本,但是呢,收获却微小的稀罕,微少的可怜啊。甚至于一个错误,就把您完全陷入到万丈深渊里面去了&a…...

Spring Boot拓展XML格式的请求和响应
在我们开发过程中,我们经常使用的参数绝大多少事HTML和JSON格式的请求和响应处理,但是我们在实际开发过程中,我们可能经历一些,比如对于XML格式的请求,我们在后端应该如何接收,并且如何将XML格式的参数变成…...
0045【Edabit ★☆☆☆☆☆】【字符数转整型】Return a String as an Integer
0045【Edabit ★☆☆☆☆☆】【字符数转整型】Return a String as an Integer language_fundamentals numbers strings Instructions Create a function that takes a string and returns it as an integer. Examples stringInt("6") // 6 stringInt("1000&q…...
数据库MySQL(六):事务
事务 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 MySQL中默认事务是自动提交的,当执行完一条DML语句时…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...

C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...
深度解析云存储:概念、架构与应用实践
在数据爆炸式增长的时代,传统本地存储因容量限制、管理复杂等问题,已难以满足企业和个人的需求。云存储凭借灵活扩展、便捷访问等特性,成为数据存储领域的主流解决方案。从个人照片备份到企业核心数据管理,云存储正重塑数据存储与…...
P10909 [蓝桥杯 2024 国 B] 立定跳远
# P10909 [蓝桥杯 2024 国 B] 立定跳远 ## 题目描述 在运动会上,小明从数轴的原点开始向正方向立定跳远。项目设置了 $n$ 个检查点 $a_1, a_2, \cdots , a_n$ 且 $a_i \ge a_{i−1} > 0$。小明必须先后跳跃到每个检查点上且只能跳跃到检查点上。同时࿰…...
智能体革命:企业如何构建自主决策的AI代理?
OpenAI智能代理构建实用指南详解 随着大型语言模型(LLM)在推理、多模态理解和工具调用能力上的进步,智能代理(Agents)成为自动化领域的新突破。与传统软件仅帮助用户自动化流程不同,智能代理能够自主执行工…...