HTTP编码杂谈

一  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.mfbz.cn/a/27539.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flask开发简易网站疑难点梳理

文章目录 整体总结创建项目独立的python环境windows下python独立环境目录结构linux下python独立环境目录结构 大概需要安装的第三方库使用websockt实现python代码与html界面的通讯界面F12中看到提示连接成功后立马连接关闭。 linux下数据库查询异常初次登录web的时候背景图片和…

智能指针(2)

智能指针&#xff08;2&#xff09; shared_ptr(共享型智能指针)基础知识特点引用计数器共享型智能指针结构理解 shared_ptr仿写删除器类计数器类shared_ptr类使用以及仿写代码的理解 循环引用_Weaks 初始化智能指针的方法 shared_ptr(共享型智能指针) 基础知识 在java中有一…

Hive | 报错锦集

知识目录 一、写在前面✨二、Hive启动hiveserver2报错&#x1f525;三、HiveServer2启动方式✨四、Hive执行SQL语句报一大堆日志&#x1f349;五、Hive使用Load加载数据报错&#x1f36d;六、Hive执行含Count的SQL语句报错&#x1f349;七、Hive执行SQL语句报/bin/java&#x1…

openGauss5.0之学习环境 Docker安装

文章目录 0.前言1. 准备软硬件安装环境1.1 软硬件环境要求1.2 修改操作系统配置1.2.1 关闭操作系统防火墙 1.3 设置字符集参数1.4 设置时区和时间&#xff08;可选&#xff09;关闭swap交换内存1.5 关闭RemoveIPC1.6 关闭HISTORY记录 2. 容器安装2. 1支持的架构和操作系统版本2…

ChatGPT+小红书的8种高级玩法

掌握了这套万能命令&#xff0c;让你快速做出小红书爆款文案! 一、用ChatGPT做定位 我是一个大龄的普通人&#xff0c;没有什么特殊的技能&#xff0c;接下来&#xff0c;请你作为一位小红书的账号定位专家&#xff0c;通过与我对话的方式&#xff0c;为我找到我的小红书账号定…

记录一个Invalid bound statement (not found)问题

SpringBootMyBatisPlus项目&#xff0c;非常简单&#xff0c;没有任何业务逻辑&#xff1a; 1. pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.…

Java8 Stream详解及结束操作方法使用示例(三)

结束操作是指结束 Stream 该如何处理的操作&#xff0c;并且会触发 Stream 的执行。下面是一些常用的结束操作方法。结束操作会对数据源进行遍历&#xff0c;因此是及早求值的。 Java8 Stream详解及中间操作方法使用示例&#xff08;一&#xff09; ​​​​​​​Java8 Strea…

java生成、识别条形码和二维码

一、概述 使用 zxing 开源库 Zxing主要是Google出品的&#xff0c;用于识别一维码和二维码的第三方库主要类:BitMatrix 位图矩阵MultiFormatWriter 位图编写器MatrixToImageWriter 写入图片 可以生成、识别条形码和二维码 内置三种尺寸&#xff1a;enum Size {SMALL, MIDDLE, …

华为OD机试真题 JavaScript 实现【求符合要求的结对方式】【2023Q1 100分】,附详细解题思路

一、题目描述 用一个数组A代表程序员的工作能力&#xff0c;公司想通过结对编程的方式提高员工的能力&#xff0c;假设结对后的能力为两个员工的能力之和&#xff0c;求一共有多少种结对方式使结对后能力为N。 二、输入描述 6 2 3 3 4 5 1 6 第一行为员工的总人数&#xff…

计算机视觉-目标检测(一):从 R-CNN 到 Faster R-CNN

文章目录 1. 概要2. 区域卷积卷积神经网络R-CNN2.1 模型结构2.2 Selective Search2.3 warp2.4 R-CNN训练2.5 R-CNN推理2.6 R-CNN性能评价2.7 R-CNN的缺点 3. SPP-Net3.1 SPP-Net对RCNN的改进3.2 SPP-Net网络结构3.3 SPP-Net训练过程3.4 SPP-Net的问题 4. Fast R-CNN4.1 Fast R-…

河北沃克HEGERLS仓储货架生产厂家|夹抱式伸缩货叉四向穿梭车新型物流机器人

众所周知仓库作业主要是围绕存取、搬运、拣选、输送分拣而进行的&#xff0c;而随着物流作业的多样化、复杂化&#xff0c;四向穿梭车作为新的存储技术&#xff0c;以其灵活、柔性等特点而备受瞩目。河北沃克在成功研发四向穿梭车的基础上又对其进行了产品的横向发展。目前&…

微服务_fegin

Feign服务调用 是客户端组件 ruoyi系统中Log\Auth\User用了远程服务调用&#xff0c;用工厂模式给他的报错加了层工厂类&#xff0c;return错误的时候重写了以下方法。 在ruoyi-common-core模块中引入依赖 <!-- SpringCloud Openfeign --><dependency><group…

python语法-数据可视化(全球GDP动态柱状图开发)

python数据可视化&#xff08;全球GDP动态柱状图开发&#xff09; 开发工具&#xff1a;pycharm、pyecharts模块 &#xff08;项目数据见文末参考内容&#xff09; """ 演示GDP动态柱状图开发 """from pyecharts.charts import Bar,Timeline fr…

ExtractOfficeContent: 提取Office文件中文本、表格和图像

引言 最近有空写了一下这个库&#xff0c;用来提取Office文件中的文本和图像内容&#xff0c;用作后续整理训练语料使用。最新更新请移步&#xff1a;Github Extract Office Content Use Installextract_office_content$ pip install extract_office_contentRun by CLI. Ext…

数据可视化大屏人员停留系统的开发实录(默认加载条件筛选、单击加载、自动刷新加载、异步加载数据)

项目需求 录入进入房间的相关数据&#xff1b;从进入时间开始计时&#xff0c;计算滞留房间的时间&#xff1b;定时刷新数据&#xff0c;超过30分钟的人数&#xff0c;进行红色告警&#xff1b; 实现流程 为了完整地实现上述需求&#xff0c;我们可以按照以下步骤开发&#…

JAVA面向对象(三)

第三章 封装与继承 目录 第三章 封装与继承 1.1.封装 1.2.包 1.3.访问权限控制 1.4.static修饰符 1.4.1.成员变量 1.4.2.成员方法 1.4.3.代码块 总结 内容仅供学习交流&#xff0c;如有问题请留言或私信&#xff01;&#xff01;&#xff01;&#xff01;&#xff0…

【计算机组成与体系结构Ⅰ】知识点整理

第一章 计算机系统概论 1.1 从源文件到可执行文件 .c源程序、.i源程序、.s汇编语言程序、.o可重定位目标程序、可执行目标程序&#xff1b;后两个为二进制&#xff0c;前面为文本 1.2 可执行文件的启动和执行 冯诺依曼结构计算机模型的5大基本部件&#xff1a;运算器、控制…

技巧:win10的另一种美化字体的方式,使用noMeiryoUI

目录 1. 前提2. 字体选择3. 查看已经安装的字体并查看效果4. 安装软件修改系统字体5. 修改浏览器字体 1. 前提 21年的时候写了一篇文章&#xff0c;《Windows10下美化字体&#xff0c;达到类似mac的效果》&#xff0c;当时还很迷恋macType这个软件的使用&#xff0c;觉得好牛逼…

java异常 | 处理规范、全局异常、Error处理

文章目录 &#x1f683;异常类型&#x1f3a0;显示声明异常&#xff1a;①&#xff1a;try-catch②方法签名 &#x1f683;异常处理规范⚓️异常包装⚓️异常传递⚓️异常日志记录⚓️异常处理的最佳实践 &#x1f683;全局异常处理⛵️优点&#xff1a;⛵️代码示例&#xff1…

YOLOv7训练自定义数据集

使用YOLOv7做对比实验&#xff0c;需要重新部署一下YOLO环境&#xff0c;并将COCO格式数据集转换为YOLO格式 博主的COCO数据集是由WiderPerson数据集转换来的&#xff0c;并且做了一些处理。 环境 Ubuntu18.0 CUDA11.2 NVIDIA T4 项目部署 下载项目&#xff1a; git clone…