http传输字符编码与转义(深度好文)

2023-11-11


一、引言


        最近陆陆续续看了好多关于字节、字符、字符编码、字符转义的文章,终于对这个过程有了比较清晰深刻的认识。和后台开发相结合知道了乱码出现的理论具体原因,和前台开发结合知道了get与post请求的过程。这里分析下供大家学习分享。(字符转义指字符与字符之间转换,url编码;字符编码指字符与二进制的对应,ascii)



二、字符编码的发展


      首先要明白字符集与字符编码的概念,字符集就是能表示的字符的集合(中文、英文、蒙古文),字符编码是字符与二进制的对应关系(如“我”存为001,”你“存为002)。不过一般字符集与字符编码容易统称,一般一对一,但也有一对多(如utf-8,utf-16)。


       发展:英文字符集:ascii编码————不同国家文字字符集:ANSI编码(GBK、JIS等)————全世界统一字符集:UNICODE编码(UTF—8,UTF—16等),如下图(稍微展示的多了些):







二、http请求过程


        整体流程图如下图所示:






1、字符转义:浏览器对汉字的通过某种编码方式进行url编码转义,转译成为ascii以便下一步。这里就是get post请求涉及到的地方,get肯定url编码转义,post中的urlencode与之类似,formdata猜测应该未转义,json猜测应该url编码;


2、字符编码:浏览器将上一步骤转义的字符按照ascii编码为字节;


3、字符解码:服务器将传输过来的字节按照ascii解码为字符,此步骤web server内部已经帮我们实现;


4、字符反转义:服务器将字符按照utf-8或某种编码方式进行url编码反转义为汉字,此过程中开发常用到request可以自定义字符转义解码方式;


5、字符转义:服务器将响应头字符按照某种编码方式url编码转义,此过程中开发常用response定义url编码,框架中一般默认会自动选择utf-8进行url编码,请求体见步骤6;


6、字符编码:服务器对url编码转义后的响应头,与响应体进行二进制编码,webserver内部实现;

7、字符解码:浏览器对响应头与响应体按照ascii解码为字符;


8、字符反转义:浏览器响应头进行url编码反转义,对响应体查看content-type来进行html解析或者图片解析;





三、总结


  • 开发中遇到编码的乱码问题;
  • 字符集与字符编码发展;
  • http中的编码、解码,编码转义、编码反转义详细过程说明;
  • http编码过程中前端开发与后台开发相关过程定位;


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

http传输字符编码与转义(深度好文) 的相关文章

  • 如何访问 NFL 的 API?

    我一直在尝试访问或设法访问 NFL com 的数据 但尚未找到 这些网站上有公开文档 https api nfl com docs identity oauth2 index html 但这些文档不会告诉您如何获取客户端 ID 或客户端密钥
  • .htaccess 路由到服务器上的子目录?性能/加载时间

    我想知道是否可以使用 htaccess 文件将我的域直接路由到服务器上的子目录 我从常规虚拟主机提供商处购买了虚拟主机软件包 其中我的domain com 连接到我的服务器的根目录 我想知道是否可以以某种方式将 htaccess 文件上传到
  • DefaultHttpClient GET 和 POST 命令 Java Android

    好的 这是我的应用程序 一个 Android 应用程序 允许我从移动应用程序 而不是从网站 将 CokeZone 代码提交到 CokeZone co uk 所以我编写了这部分代码来执行登录后命令 然后检查我是否登录后 问题是 发送 post
  • 如何通过 HTTP POST 发送充满对象的 NSArray?

    我在 iPhone 端有一个产品 购物清单 由具有名称 product id 等的产品对象组成 我希望将此列表发送到服务器 在那里我将服务器上的列表与 iphone 中的列表进行比较 以合并所做的更改并将合并的列表发送回 iphone 如何
  • Angular4如何使用flatMap链接forkJoin

    我所处的情况是 我需要进行 5 个可以并行执行的 http 调用 在这五个调用之后需要执行另一个 http 调用 我在前 5 个中使用了 forkJoin 但我不知道如何链接 flatMap 或其他函数 forkJoin firstObse
  • 如何使我的网站兼容移动设备和平板电脑? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想让我现有的网站在手机 平板电脑上查看时自动调整 甚至在您在桌面上调整屏幕时自动调整 如果失败的话 如果太难 你有什么建议 我基本上
  • 直接从 Javascript 代码访问 SVG 文件

    我有这个 HTML 代码 它调用我的 javascript 代码 该代码用于仪表 在 javascript 代码中 我尝试访问 SVG 文件 并修改 仪表的 指针以显示所需的值 该代码运行良好 但是 我不想在 HTML 中调用 对象 id
  • 开发工具在表达式上中断

    当给定的 Javascript 表达式为 true 时 我想暂停一切 我见过条件断点 但这对我不起作用 因为这需要首先在某处设置断点 或者首先基于某个标准 然后向其添加附加条件 相反 我想要的是能够在给定表达式为真时中断 无论在哪里 在 D
  • 外部依赖错误的 HTTP 状态代码

    当服务器与外部 API 通信出现问题时 返回的正确 HTTP 状态代码是什么 假设客户端向我的服务器 A 发送有效请求 然后 A 查询服务器 B 的 API 以便执行某些操作 然而 B 的 API 当前抛出 500 错误或因某种原因无法访问
  • 在处理程序之后访问 HTTP 请求上下文

    在我的日志记录中间件 链中的第一个 中 我需要访问一些在链下游的某些身份验证中间件中编写的上下文 并且仅在处理程序本身执行之后 旁注 需要首先调用日志记录中间件 因为我需要记录请求的持续时间 包括在中间件中花费的时间 此外 当权限不足时 身
  • 由于浏览器设置的标头,Safari 拒绝重定向的 CORS 请求

    Summary Safari 拒绝一些涉及重定向的 CORS 请求 声称某些标头是不允许的 但该标头从来不是由脚本请求的 而是由浏览器添加的 所以我认为这应该不重要 Safari 的行为是一个错误吗 规格有问题吗 或者 事情变成这样是有原因
  • HTTP代理服务器

    我开始研究一个用 C 编写的非常基本的 HTTP 代理服务器 Edit 只是转发我的请求的东西 此时我很难理解如何继续 任何帮助都会有益的 看一眼micro proxy http acme com software micro proxy
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 有没有办法使用 ASP.NET 在用户离开页面时始终运行某些服务器端代码?

    我想知道当用户离开 ASP NET 中的页面时是否有任何方法可以始终运行一些服务器端代码 页面卸载事件不好 因为如果有人单击链接 则不会调用该事件 理想情况下 即使用户关闭浏览器 我也希望代码能够运行 我怀疑我所问的问题是不可能的 但问一下
  • 使用 Http Post 发送图像

    我想使用 Http Post 将图像从 android 客户端发送到 Django 服务器 该图像是从图库中选择的 目前 我正在使用列表值名称 Pairs 将必要的数据发送到服务器并接收来自 Django 的 JSON 响应 是否可以对图像
  • 使用其他聚合中的数据检查命令的有效性

    我目前正在开发我的第一个更大的 DDD 应用程序 目前来说 它运行得很好 但我们从早期就陷入了一个让我无法停止思考的问题 在我们的一些聚合中 我们保留对另一个聚合根的引用 这对于整个应用程序非常重要 基于它们的 ID 因此不存在硬引用 删除
  • 如何在 PHP 中使用 file_get_contents 获取图像的 MIME 类型

    我需要获取图像的 MIME 类型 但我只有图像的正文file get contents 是否有可能获取 MIME 类型 是的 你可以这样得到它 file info new finfo FILEINFO MIME TYPE mime type
  • Javascript正则表达式用于字母字符和空格? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要一个
  • 动态img(或视频)标签根本不加载资源,HTTP请求处于“待处理”状态

    我尝试使用以下方法在 Web 应用程序上加载资源时遇到一些问题img or videoHTML 标签 我在我的应用程序中使用 Angular 并动态设置src的参数img标签 使用ng src src 指示 没有那么多图像和资源需要加载 在
  • 如何在 Laravel 中使用 PUT http 动词提交表单

    我知道这个问题可能已经提出 但我就是无法让它发挥作用 如果有人可以帮助我 我将非常感激 我安装了 colletive form 但答案也可以是 html 表单标签 现在列出我的表格 我的路线和我的例外情况 Form model array

随机推荐

  • 第三方jar包引入项目,发布到本地和远程仓库

    在开发过程中 往往会遇到对接其他公司的系统 然后对接公司会提供API对接方式 就是给一个jar包 我们只需要把jar包引入到项目中直接用即可 本地引用jar的话可以有两种方式 第一种就是本地包引用 如下将包放下工程下 然后maven指定 但
  • 关于Pytorch中的向量拼接

    torch cat A torch ones 2 4 print A B 2 torch ones 2 4 print B C torch cat A B 0 print C D torch cat A B 1 print D A的输出 t
  • 改变linux命令行中的颜色

    黑色背景 白色字体虽然是最经典的 但是有时候太多白花花的英文在一起也会变得乱 下面是我的改变字体的办法 目前我只实现了让root目录下的字体变为绿色 如下图 这个只是最简单的改变颜色的 虽然对大牛们来说很简单 但对我这个初学者来说 真是费了
  • 144项ppt制作技术

    1 两幅图片同时动作 PowerPoint的动画效果比较多 但图片只能一幅一幅地动作 如果你有两幅图片要一左一右或一上一下地向中间同时动作 可就麻烦了 其实办法还是有的 先安置好两幅图片的位置 选中它们 将之组合起来 成为 一张图片 接下来
  • 用Python建立可进可退的多级菜单系统

    coding utf 8 功能 可进可退的多级菜单系统 作者 XxLyle 日期 2021 12 16 def add record print 添加记录功能模块尚待开发 def find record print 查询记录功能模块尚待开发
  • Photoshop cs6 如何让图层渐变透明

    点击图层面板下方的蒙板工具 再选择左侧工具栏的渐变填充 选择黑 白渐变色 在图层上拖动 1 点击面板下方蒙板工具 在需要处理的图层上添加蒙板 2 选择渐变工具 快捷键G 选择黑白渐变 然后按住shift拖动鼠标拉个渐变就出来了 3 另外可以
  • 小程序的父子之间的传值调用

    前言 我们在小程序中父子组件之间的传值方法 目录 父传子 properties 步骤 1 在父组件 index wxml里面给调用子组件的地方绑定一个字段map 2 在父组件 index js中定义字段map 并用this setData改
  • Hbase批量查询-scan介绍

    1 scan原理 HBase的查询实现只提供两种方式 1 按指定RowKey 获取唯一一条记录 get方法 org apache hadoop hbase client Get Get 的方法处理分两种 设置了ClosestRowBefor
  • 桌面软件自动化测试小记

    什么是软件自动化测试 如何学习软件自动化及几个例子 Py UiAutomation
  • Swagger的使用详细教程

    Swagger的使用详细教程 Swagger是一款开源的API文档工具 它提供了一种简单且强大的方式来描述 展示和测试RESTful风格的Web服务接口 本文将详细介绍Swagger的使用方法 包括安装配置和使用示例 步骤 1 添加Swag
  • 基于Python的机器学习实践(portein)

    目录 数据集 简介 代码 1 数据的读入 2 数据理解 3 数据规整化处理 数据准备 4 数据建模 5 查看模型 6 模型预测 7 结果输出 数据集 https download csdn net download llf000000 86
  • JMeter使用命令行模式生成HTML测试报告

    自动生成html图形化报告 win r 输入 cmd 说明 jmeter n t Jmx脚本位置 l 结果文件result jtl存放的位置 e o 生成HTML报告指定文件夹 n 表示non gui mode 就是非图形化模式 t 指定J
  • 怎么更改dns_ESHOP连不上?SWITCH最新实用DNS地址分享

    虽然任天堂Switch采用的是不锁区的方式 但是由于各种虚拟墙的存在已经网络延迟等问题 经常导致玩家连不上eshop 买不了游戏 更新个游戏显示都要好几万小时 当然这个可以使用各种加速器等方式来解决 但是好的加速器需要付费 免费的又会经常抽
  • Receive port always be disabled.

    I configured a receive port in FILE to a local folder Biztalk administration console keep show that port is disables I f
  • 支付宝个人收款解决方案之支付宝签约方案

    关键词 签约支付 签约收款 支付宝收款 个人签约收款 背景 有做网赚或者在网上售卖个人小产品小服务的 需要进行收款 如果零星个别的收款可能直接走个人转账然后手动发货即可 但是一旦流程标准下来 量走起来之后 付款发货就需要自动化了 以提高人效
  • TCP实现socket通信(python)

    socket简介 UDP实现socket通信 python TCP实现socket通信 python 1 套接字工作流程 服务器端先初始化Socket 建立一个套接字 与端口绑定 bind 用 bind 函数来绑定一个端口号和 IP 地址
  • Java开发中的23种设计模式详解

    设计模式 Design Patterns 可复用面向对象软件的基础 设计模式 Design pattern 是一套被反复使用 多数人知晓的 经过分类编目的 代码设计经验的总结 使用设计模式是为了可重用代码 让代码更容易被他人理解 保证代码可
  • Hibernate Validator的使用以及自定义

    Hibernate Validator的英文官方文档 https hibernate org validator documentation Hibernate Validator的作用 Hibernate Validator是一个校验框架
  • Java五子棋的实现(附源码)

    学习目的 熟悉java中swing类与java基础知识的巩固 文末有源代码文件和打包的jar文件 效果图 思路 1 首先构建一个Frame框架 来设置菜单选项与按钮点击事件 MyFrame java文件代码如下 package StartG
  • http传输字符编码与转义(深度好文)

    一 引言 最近陆陆续续看了好多关于字节 字符 字符编码 字符转义的文章 终于对这个过程有了比较清晰深刻的认识 和后台开发相结合知道了乱码出现的理论具体原因 和前台开发结合知道了get与post请求的过程 这里分析下供大家学习分享 字符转义指