HTTP编码杂谈

news2024/11/24 18:53:29

一  HTTP编码杂谈

①  知识铺垫

1) 编码的英文叫'encode' --> 常见'HTTP URL'编码、'Base64'编码等

   目的: 转变为'二进制的stream(字节流)',便于'网络传输'

   备注: 一般都是基于'utf-8'编码

2) 解码叫'decode'

3) 乱码的根源: '编码'和'解码'的方式不一致

4) 'url编码'和我们'日常所说编码'不是一回事

5) 写这篇文章最初的灵感: 想从'图裂'探究'url编码',稍微有点'偏'题了哈

URI

URI编码  URL编码

BASE64编码

字符编码

编码和转义的区别

Java中字符编码相关的问题解析

如何在URL中传递中文

编码、解码、序列化及反序列化的含义与区别

②  URL编码

浏览器的URL编码原理   说说http协议中的编码和解码

1) 爱宝的妍  --> "原始中文"

2) %E7%88%B1%E5%AE%9D%E7%9A%84%E5%A6%8D --> 'UTF-8编码','ASCII 2进制'转化为16进制

备注: 一个'中文'字符[charset]'UTF-8'编码对应'3个字节[bytes]',一个字节对应'8[bit]位'

特点: 每个'字节8bit',前面用%表示是'16进制'

3) %B0%AE%B1%A6%B5%C4%E5%FB             --> 'GBK 编码'

备注: 一个'中文'字符[charset]'GBK'编码对应'2个字节[bytes]',一个字节对应'8[bit]位'

备注: xdd -u  --> 十六进制输出时使用'大写'字母,'默认'是'小写'字母

强调: URL默认是用'UTF-8'编码

ngx_http_charset_module

对比:不同的'客户端'测试现象不一样,'curl'和'浏览器'

思考: 同时设置这种'行为'? --> "推荐分开设置"

default_type 'text/html;charset=utf-8';  --> 指的是'自己回传数据的编码'      
  
charset utf-8;  --> 指的是'nginx'的编码

关注点: Java中用于URL编解码的'类'有java.net包中的'URLEncoder'、'URLDecoder'

补充: 浏览器有一个'独特'的现象,'utf-8'编码后的字符放到浏览器中会'自动解析'

curl解码技巧 

③  前端裂图探究URL编码

++++++++++++++ "裂图的常见原因" ++++++++++++++

1) 本质上是'资源无法访问','裂图'只是'表像'

2) 无法访问的若干'原因':

  [1]、域名无法解析、网络或防火墙不通                    --> "直接访问资源形式验证"

  [2]、资源'不完整(有损)',比如格式'被破坏',丢失'部分'数据

  [3]、层层转发导致'url'发生变化,不是对应资源的'uri'     --> "直接访问资源形式验证"

  [4]、URL编码'导致'  --> "常见"  --> "下面案例讲解"

  [5]、资源确实'不存在':可能是'上传错'地方或者'访问错'地方,或者被'误'删除  --> "常见"

  [6]、权限'不足'导致

  [7]、盗链被'发现',也即引入'第三方'资源被发现,然后被加入到'黑名单'导致

  [8]、Content-Security-Policy 响应头'限制'导致

对象存储服务OBS的基本概念

  

背景和现象:

  1) 上传带'中文'名称的'图片资源'后,上传到'OBS对象存储桶'里面是'中文字符'的图片资源

  备注: 上传'英文名称'的图片无此现象

  2) 同时将'图片'的文件名以'utf-8'编码形式保存在'数据库'

  2) Java代码从数据库中查询该'昵称'对应关联的'图片资源名称'

  3) 将该名称['utf-8'编码]作为查询字符串形式'?name=xxx'形式'发起'请求,发现是'裂图'

验证方式: 直接'访问资源[中文名称]','不通过'数据库的方式  --> ok

原因: Java代码在发起'url'请求的时候,会主动进行'url'编码,导致'资源名称被二次'编码

解决方式: Java代码通过数据库查询的'资源名称',进行'decode'解码

遗留: minio与S3的'区别'?  -->同一个租户的'ak/sk'一致,obsutils'访问'需要这些信息

windows上传资源到linux服务器上导致乱码   S3的中文编码问题及修复方案 

form表单上传文件指定编码   表单上传中文文件乱码   form表单上传中文文件乱码

python请求multipart/form-data上传文件名含中文报错  文件上传全过程

<form action="/upload" method="post" enctype="multipart/form-data">
  选择文件:
  <input type="file" name="picture">
  <input type="submit" value="提交">
</form>

Content-Disposition: form-data; name="file"; filename="chrome.png"   

备注:关于'文件名',抓包'观察'

Content-Type: image/png 

常见: form表单'上传'文件的时候,上传的'文件名称'是'乱码'  --> "编码和解码"不一致​

需求: linux下查看'文件内容'编码,也即'文件编码'

  file  -i  文件名    #可查看到文件编码格式

细节点: 利用'form'表单上传文件名为'中文'的图片,暂时没有发现'中文文件名字符被utf-8'编码场景

当时一个'奇怪'现象: '图片.png通过'file'上传后,显示的是'utf-8编码'.png,而'不是'下面的

思考: 可能是在'上传文件'前,'前端'做了'utf-8特殊'处理导致'文件名'被utf-8编码

④  base64编码 

分析: 使用 base64 对'图片'进行编码和解码的过程

'编码'流程:  --> 编码的目的是为了'网络传输'

  1) 先对图片进行 'utf-8 编码' 生成 '二进制'

  2) 然后 base64 再对 二进制进行编码,生成 'base64' 字符串

  3) linux下 常见 'base64 wzj.jpg' 来实现'图片的base64'编码

  其它: 

    [1]、echo -n 'string' | base64                          --> "base64编码"

    [2]、echo -n `echo -n 'string' | base64` | base64 -d    --> "base64解码"

'解码'流程: --> 编码的目的是为了'可读性展示'

  1) 先对 base64字符串 解码 生成 '二进制'

  2) 然后使用 utf-8 解码生成'图片'

备注: Java中用于Base64编解码的类有java.util包下的'Base64类'

data:协议  Data URL资源base64编码

Data URL scheme 支持的类型 

⑤  base64案例

案例1: '基本认证'   --> 'Authorization: Basic xxx'

案例2: 'html中嵌入资源'  --> "本文讲解复杂的案例"

逻辑: 代码'base64'编码传输,然后'客户端'base64解码执行

玩转图片Base64编码 

++++++++++++++++++  "分割线"  ++++++++++++++++++

备注: www.google.com 的首页'搜索框右侧的搜索小图标'使用的就是'base64'编码

补充: 迅雷'thunder://'的"专用地址"也是用 Base64 加密的

说明: 这里假定'图片'使用'相对路径'

+++++++++ "相关说明" +++++++++

1) 由于使用'internal'内部重定向,产生的'结果'

  [1]、在'9s'内不主动点击,地址栏没有'跳转'

  [2]、返回了预期的'公告'页面

2) 时间'到了'或者用户'主动点击'进入,产生的'效果'
  
  [1]、前端发起了网络请求,地址栏'发生'变化,也即'域名'跳转重新发起请求

3) ceshi3.html页面在'root'下,内容粗略如下

  备注: 这里应该用'随机的字符[不可被碰撞]'代替,然后文件名同该'独一无二'的字符

 

 

测试说明: 做好'a1.wzj.com、a2.wzj.com'域名解析,大致效果如下:

 

⑥  转义 

1) 编码与转义有时容易'混淆',但其实是'不同'的

2) 转义的英文叫'escape';反转义叫unescape

  [1]、如C语言中的\n、\t

  [2]、以及 HTML、XML 中'特殊符号转义成实体' --> "重点讲解Html中的转义"

  强调: html转义是'将特殊字符或html标签'转换为与之对应的浏览器'(HHTP规范)'能识别的'字符'

  常见: HTML中将'空格、>、<、&'等符号转换成对应的'HTML实体',称为 'HTML escape' 

  说明: 实体有实体'名称'和实体'编号'两种形式,它们都是'以&开头','以;结尾'

    1、实体名称的形式为'&str;',其中str为字母串  --> "常见"
   
      优点: 易于理解与记忆;

      缺点: 浏览器支持'不太好'.如空格的实体名称是&nbsp;,>的实体名称是&lt;

    2、实体编号的形式为'&#num;',其中num为十进制数字

      优点: 是浏览器的支持好,但是不太容易记忆.如空格的实体编号是&#160;,>的实体名称是&#62;

  [3]、mysql的`反引号`转义、正则转义

3) 转义是为了'削除歧义'

为什么要转义字符串   html转义字符大全

⑦  开胃小菜

ps -ef 不显示自己

从抄书到开源之巅:章亦春的程序人生 

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

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

相关文章

深入理解深度学习——切面距离(Tangent Distance)、正切传播(Tangent Prop)和流形正切分类器

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 许多机器学习通过假设数据位于低维流形附近来克服维数灾难。一个利用流形假设的早期尝试是切面距离&#xff08;Tangent Distance&#xff09;算法 (Simard。它是一种非参数的最近邻算法&#xff0c;其中使用的度量不是…

libVLC 抓取视频帧并渲染(OpenGL)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在前面,我们写了几篇文章《libVLC 抓取视频帧并渲染(QWidget)》和《libVLC 抓取视频帧并渲染(QGraphicsView)》,分别介绍了QWidget 和 QGraphicsView 对视频帧的渲染,除了这些方式之外,还有一种最常…

动,静态库(与linux有关)

1.一些与本章标题无关的补充内容 当我们修改文件内容的时候&#xff0c;有可能会修改文件的属性。比如&#xff1a;可能会更改文件的大小属性。 我们在通过指令查看文件的时间相关属性时会往往观察到这样的现象&#xff1a;Access(访问时间&#xff0c;之前有具体讲过)没有及…

C++ string的简单应用

C语言的字符串 C的字符串 头文件&#xff1a; #include<string.h> //c #include<string> //C #include<cstring> //C 比较string的大小 两个string对象相加 使用字符串对象来存放字符串 两个string对象相加 string str "Hello,"; st…

求取平面参数

平面方程AXBYCZD0 变换一下-> A/DX B/DYC/DZ -1 该方程满足Axb 其中A为, x为,b为-1单位阵 求解代码如下: /* comment plane equation: Ax By Cz D 0 convert to: A/D*x B/D*y C/D*z -1 solve: A0*x0 b0 where A0_i [x_i, y_i, z_i], x0 [A/D, B/D, C/D]^T,…

逆向汇编与反汇编——基本数据类型

-1&#xff1a;0xFFFFFFFF 为什么内存使用补码来存储数据&#xff1f; 》因为CPU的设计只有加法器&#xff0c;没有减法&#xff0c;需要使用补码来实现减法 大端&#xff1a;数值的高位放到内存的低字节 小端模式验证&#xff1a;78 78 浮点型&#xff1a;单精度float和双精…

创建类构造器

类的创建 构造器 作用&#xff1a;给类赋值 类实际可分为&#xff1a;构造器属性方法 构造器的重载 重载&#xff1a;方法名相同&#xff0c;参数类型不同 一定要有空构造器&#xff01;&#xff01;&#xff01; TIP&#xff1a;this.指代当前创建对象

数据结构与算法系列之希尔排序

&#x1f497; &#x1f497; 博客:小怡同学 &#x1f497; &#x1f497; 个人简介:编程小萌新 &#x1f497; &#x1f497; 如果博客对大家有用的话&#xff0c;请点赞关注再收藏 &#x1f31e; 希尔排序 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选…

Python读写mat文件(使用scipy.io)

在matlab中&#xff0c;数据可保存为mat文件&#xff0c;使用save和load命令可进行读写操作。而在Python中&#xff0c;也可以对mat文件进行读写。 一、由matlab向Python传数据&#xff08;Python读取mat文件&#xff09; 第一步&#xff1a;使用matlab创建变量并保存至mat文…

某程序员——我应届毕业,年薪23万...

马士兵教育线下训练营第1期 已经圆满结束啦~ 不了解训练营的伙伴 有的在观望、有的在好奇 训练营真的能学到东西吗&#xff1f; 出去了之后能找到工作吗&#xff1f; 不如看看那些参加过的人是怎么说的 或许&#xff0c;你会对我们、对训练营 会有更深入的了解...... 0…

计算机视觉:转置卷积

转置卷积 文章目录 转置卷积基本操作填充、步幅和多通道性质 转置卷积&#xff08;Transposed Convolution&#xff09;&#xff0c;也称为反卷积&#xff08;Deconvolution&#xff09;&#xff0c;是卷积神经网络&#xff08;CNN&#xff09;中的一种操作&#xff0c;它可以将…

排他网关-部署流程定义

类&#xff1a;com.roy.ActivitiGatewayExclusive /*** 部署流程定义*/Testpublic void testDeployment(){ // 1、创建ProcessEngineProcessEngine processEngine ProcessEngines.getDefaultProcessEngine(); // 2、得到RepositoryService实例RepositoryService…

剑指offer刷题笔记--题目11-20

1-旋转数组的最小数字&#xff08;11&#xff09; 主要思路&#xff1a; 一次旋转将最后一个元素移动最前面&#xff0c;由于数组最开始是升序的&#xff0c;因此数组的大部分元素都应该保持升序的状态&#xff08;n1<n2<...<n3>n4<n5<...<n6&#xff09;…

JAVA练习小游戏——贪吃蛇小游戏 PLUS版

目录 基础版本 新增内容 1.添加START开始界面 2.新增背景音乐 3.添加SCORE计分 4.新增游戏机制 代码实现 实机演示 基础版本 JAVA练习小游戏——贪吃蛇小游戏_timberman666的博客-CSDN博客https://blog.csdn.net/timberman666/article/details/131046742?spm1001.201…

xshell使用技巧小节

文章目录 1. 输出日志文件2. 快捷键设置3. 使用ctrlv按键4. 快速命令 1. 输出日志文件 需求&#xff1a;我们使用xshell时会经常需要把xshell中的内容打印到文件中&#xff0c;或者因为内容过多&#xff0c;xshell界面无法显示先显示出的内容&#xff0c;或者需要明确记录文件…

AlterNET Studio v9.0 Crack

AlterNET Studio v9.0 改进了代码编辑器、表单设计器和 Python LSP 解析器。 2023 年 6 月 5 日 - 11:22新版本 特征 代码编辑器 编辑器中添加了 Microsoft Visual Studio 主题。现在包括一个放大镜区域&#xff0c;可以更轻松地浏览文档的内容。带有 alpha 通道的图像现在用于…

汽车电子AUTOSAR之EcuM模块

目录 前言 正文 EcuM模块总体介绍 主要功能 总状态机&#xff08;Flexible 与 Fixed&#xff09; Startup Sequence STARTUP I STARTUP II RUN Sequence RUN II RUN III ShutDown Sequence ShutDown Target Go Sleep Go OFF I Go OFF II Sleep Sequence Sleep…

如何从平面图或蓝图为 ROS 创建地图

如何从平面图或蓝图为 ROS 创建地图 在本教程中&#xff0c;我将向您展示如何从平面图或蓝图为 RViz&#xff08;ROS 的 3D 可视化程序&#xff09;创建地图。为 RViz 创建地图是使机器人能够在环境中自主导航的重要步骤。 我们经常使用机器人的激光雷达来构建地图。这很好&am…

【openeuler】Yocto embedded sig例会 (2023-01-12)

Yocto & embedded sig例会 (2023-01-12)_哔哩哔哩_bilibili

群智能算法-模拟退火

一.基本理念 模拟退火算法(Simulated Annealing,简称SA) 的思想最早是由Metropolis等提出的.其出发点就是基于物理中固体物质的退火过程与一般的组合优化问题之间的相似性。模拟退火法是一种通用的优化算法&#xff0c;其物理退火过程由以下三部分组成。 加温过程&#xff1a;我…