如何对 HTTP 请求中的字符编码进行正确的处理

如何对 HTTP 请求中的字符编码进行正确的处理,第1张

1 什么是URL编码。

URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。

2 URL编码规则。

每对name/value由&分开,每对来自表单的name/value用=分开。如果用户没有输入值的那个name依旧会出现不过就是没有值。

URL编码是在字符ASCII码的十六进制数的前面加上%。例如\(她的十六进制数表示为5c)的URL编码就是%5c。

3 简单介绍乱码和http请求

其实做web开发乱码问题是经常出现的,有了上面编码的基础之后下面来看看乱码。

1) 乱码问题是web开发过程中经常遇到的问题,主要原因就是URL中使用了非ASCII码造成服务器后台程序解析出现乱码的问题。

2) URL中最容易出现中文的地方就是在QueryString的参数值还有Servletpath中。

3) 简单用一个图来说明一下http请求的流程:

第一步:浏览器把URL经过编码送给服务器;

第二步:服务器把这些请求解码处理完毕之后将显示的内容进行编码发送给客户端浏览器;

第三步:浏览器按照指定的编码显示网页

4) 详细剖析GET提交如何编码以及服务器如何解码以及乱码解决方案

对于GET方式,我们知道它的提交是将请求数据附加到URL后面作为参数,这样依赖乱码就会很容易出现,因为数据name和value很有可能就是传递的为非ASCII码。

当URL拼接后,浏览器对其进行encode,然后发送到服务器。具体规则见URL编码规则。

这里详细说一下encode的过程中容易出现的问题,在这个过程中我们要明白需要URL encode的字符一般都是非ASCII码字符,所以我们就能知道出现乱码主要是URL中附加了中文或特殊字符做成的,另一个要知道URL encode到底是以什么样的编码方式对字符进行编码的,其实这个编码方式是由浏览器决定的,不同的浏览器和同一浏览器的不同设置影响了URL的编码,所以为了避免我们不需要的编码,我们可以通过java代码或javaspcript代码统一进行控制。

完成了URL encode之后URL就成了ASCII范围内的字符了,然后就以iso-8859-1的编码方式转换为二进制随着请求头一起发送出去。

到了服务器之后,首先服务器会先用iso-8859-1进行解码,服务器获取的数据都是ASCII范围内的请求头字符,其中请求URL里面带有参数数据,如果是中卫或特殊字符,那么encode后的%XY(编码规则中的十六进制数)通过requestsetCharacterEncoding()是不管用的。这时候我们就能发现出现乱码的根本原因就是客户端一般是通过用UTF-8或GBK等对数据进行encode的,到了服务器却用iso-8859-1方式decoder显然不行。

这里的解决方式有两种,

一种:是通过String类的getBytes方法进行编码转换,具体java代码是:

new String(requestgetParameter(“name”)getBytes(“iso-8859-1”),“客户端编码方式”)

第二种:在服务器xml代码中改配置信息:

<Connector port="8080"protocol="HTTP/11" maxThreads="150" connectionTimeout="20000"

redirectPort="8443"URIEncoding="客户端编码"/>

5) 详细剖析POST提交如何编码以及服务器如何解码以及乱码解决方案

对于POST方式,表单中的参数值对是通过request包发送给服务器,此时浏览器会根据网页的ContentType("text/html; charset=GBK")中指定的编码进行对表单中的数据进行编码,然后发给服务器。

在服务器端的程序中我们可以通过

RequestsetCharacterEncoding()设置编码,然后通过

requestgetParameter获得正确的数据。

这里出现乱码可以通过RequestsetCharacterEncoding()直接解决。

检查当前数据库编码。

  使用语句:

  show variables like ‘%character%’;

  show variables like’%collation%’;

  

  如果不是以上情况,需要将mysql编码设置为utf-8。具体步骤如下:

  如果安装mysql时安装了“MySql Sever Instance Configuration Wizard”,则只需要启动该程序进行相应设置即可。如下面截图中所描述,需要将默认编码设置为utf8

  如果没有该程序,需要手动修改mysql编码。

  1、 编辑MySql的配置文件

  MySql的配置文件Windows下一般在系统目录下或者在MySql的安装目录下名字叫myini,可以搜索,Linux下一般是 /etc/mycnf

  

  --在 [mysqld] 标签下加上以下内容:

  default-character-set = utf8

  character_set_server = utf8

  注意:如果此标签下已经存在“default-character-set=GBK”类似的内容,只需修改即可。

  --在 [mysql] 标签下加上一行

  default-character-set = utf8

  

  --在 [mysqlserver]标签下加上一行

  default-character-set = utf8

  

  --在 [mysqld_safe]标签下加上一行

  default-character-set = utf8

  

  --在 [client]标签下加上一行

  default-character-set = utf8

  

  2、 重新启动MySql服务

  Windows可在服务管理器中操作,也可使用命令行:

  net stop mysql 回车

  net start mysql 回车

  服务名可能不一定为mysql,请按自己的设置

  

  Linux下面可是用 service mysql restart

  

  如果出现启动失败,请检查配置文件有没有设置错误

  

  3、 查看设置结果

登录MySql命令行客户端:打开命令行

  mysql –uroot –p 回车

  输入密码

  进入mysql后 执行 :show variables like "% character %";

  

  另外:

  

  建立数据库时可以使用以下命令:

  create database app_relation character set utf8;

  use app_relation;

  source app_relationsql;

  修改数据库编码的命令为:

  alter database app_relation character set utf8;

搜狗高速浏览器不仅是一款浏览器,更是您高效、安全网络浏览的得力助手。这款双核浏览器融合了高性能优化技术和极速的网页加载能力,为您提供了前所未有的流畅体验。搭载先进的安全防护系统,搜狗高速浏览器为您的网络生活提供全方位保护。访问https://sogou37moyucom/,立即下载体验。

  摘要:存储服务器是属于会携带一大堆的特殊服务,包括存储管理软件、保证高灵活性的额外硬件、RAID配置类型,以及确保更多桌面使用者与之连接的额外网络连接等功能的服务器。下面为您介绍存储服务器的作用和存储服务器配置步骤。

存储服务器存储服务器的作用 存储服务器配置步

  存储服务器的作用和功能

  1文件共享功能

  文件共享(即文件服务器)是网络存储器最基本的应用。我们可以在"网上邻居"中找到网络存储器设备,并在它的共享目录中存储公用文件。此外,部分NAS也内置了文件服务器功能,我们可以通过浏览器访问和管理NAS中的文件,并以HTTP方式上传和下载文件,就像访问软件下载网站一样方便。

  2数据备份功能

  NAS网络存储器的另一项重要功能是备份。大多数NAS都具有多种备份功能,包括本地备份(将电脑上的数据通过局域网备份到NAS中)、异地备份和NAS间备份等等。部分NAS还具有一键备份功能,将USB存储设备(如闪盘和外置硬盘)插入NAS上特定USB接口,按一下备份按钮就能把USB存储设备上的文件备份到NAS中。

  3网络打印功能

  网络打印机共享也是家庭用户常用的功能,将普通打印机通过USB接口与NAS相连,开启NAS网络存储器的网络打印机功能,我们就能在局域网中共同使用这台打印机。

  4多媒体文件共享

  只要把照片和录像存放在NAS网络存储器的指定目录中,就能通过浏览器登陆NAS的Web网站进行观看。

  5媒体服务器

  NAS网络存储器产品普遍具有UPnP-AV功能(或称流媒体功能),在网络中可以被Windows MCE系统、Xbox360和PS3等设备发现,无须额外的操作就能播放存储在NAS中的多媒体文件。该功能让NAS变成了一台媒体服务器,供网络中的各种客户端使用。

  6Web 服务器

  不少NAS网络存储器还具有Web服务器功能,支持PHP、ASP程序和SQLite、MySQL数据库,我们可以用它来搭建中小型网站,也就是把它当作网站服务器来使用,构建个人网站。

  7FTP服务器

  我们还可以用NAS网络存储器搭建FTP服务器,供大家上传/下载文件,绝大多数下载软件均支持FTP,所以使用起来很方便。

  8iTunes服务器

  我们可以用NAS网络存储器搭建iTunes服务器,让iTunes软件和iPod等设备从NAS上获得音乐和视频。

  9动态DNS

  有了动态DNS功能,我们就能把NAS网络存储器的Web服务、FTP服务等发布到互联网上,让每个人都能访问得到。

  10下载服务器

  部分网络存储器还具有下载功能,通过浏览器或专用下载软件在NAS中开启HTTP、FTP和BT下载任务,就可以关闭电脑,让NAS自行下载。我们还可以结合动态DNS功能,在异地通过互联网控制NAS网络存储器进行下载,回到家时NAS就已经下载完毕了,多方便呀。

  存储服务器配置步骤

  在配置存储服务器录像之前请先确认4200客户端和存储服务器都已经安装,即有 电脑 上有两个图标生成安装软件时,勾选安装存储服务器,与软件iVMS4200安装在同一层目录下。双击桌面快捷方式图标或进入安装目录默认为:IVM S-4200 NiVM S-4200 Storage ) , 打开存储服务器。在电脑右下角任务栏中显示,表示服务器启动成功。

  第一步:监控点的添加,在编码设备选择添加设备如选择IP/domain方式输入地址,用户名和密码(设备的用户名和密码)。

  第二步:存储服务器启用后,设备管理-添加设备类型,选择存储服务器。

  添加完成之后,服务器列表里面会出现存储服务器,选中存储服务器,在线设备 里面点击选中电脑的P,点击添加至客户端,别名自定义,用户名adm nin密码12345。 存储服务器添加完成,后点击远程配置,存储-常用将硬盘选中,点 击格式化,将电脑盘剩余空间做预分配,此操作不影响电脑硬盘原有的数据,格 式化完成之后,按照提示重启存储服务器(此操作不能遗漏)。

  第三步控制面板, 录像计划选择要录像的监控点,勾选存储服务器录 像,选择存储服务器的别名,配置下录像模板,点击保存即可保存录像计划。

  第四步:如果有多个监控点需要录像的(目前一个存储服务器最多支持64 个监控点)点击右上角的复制到,可以复制到其他的监控点,录像计划和存储 服务器录像计划打钩,所需要录像的监控点打钩,确定保存。

  第五步:在远程回放,选择监控点,日历表上选择时间,如果录像成功,则 在对应日期上有橙色三角形,搜索到录像,表示录像成功。

  

选择搜狗高速浏览器,让您的网络生活更加便捷、高效。这款双核浏览器不仅提供了闪电般的页面加载速度,还具备全面的安全防护特性,确保您在享受快速浏览的同时,免受网络威胁的侵扰。不要等待,立即访问https://sogou37moyucom/ 下载搜狗高速浏览器,体验网络浏览的新境界。

云服务器的配置规格影响价格,也直接决定了它的计算能力和特点,是在采购时要重点考虑的问题。

选云服务器配置,看这三个维度

云服务器的配置规格主要取决于类型、代别、实例大小三个最重要的维度。

维度一:类型

云服务器的“类型”或“系列”,是指具有同一类设计目的或性能特点的云服务器类别。

通常来说,云厂商会提供通用均衡型、计算密集型、内存优化型、图形计算型等常见的云服务器类型。这些类型对应着硬件资源的某种合理配比或针对性强化,方便你在面向不同场景时,选择最合适的那个型号。

vCPU 数和内存大小(按GB计算)的比例,是决定和区分云服务器类型的重要依据之一。

通用均衡型的比例通常是1:4,如 2核8G,这是一个经典搭配,可用于建站、应用服务等各种常见负载,比如作为官网和企业应用程序的后端服务器等。

如果 vCPU 和内存比是1:2,甚至1:1,那就是计算密集型的范畴,它可以用于进行科学计算、视频编码、代码编译等计算密集型负载。

比例为1:8及以上,就被归入内存优化型,比如8核64G的搭配,它在数据库、缓存服务、大数据分析等应用场景较为常见。

图形计算型是带有GPU能力的虚拟机,一般用于机器学习和深度学习模型的训练和推理。随着 AI的火热,这类机器也越来越多地出现在各种研发和生产环境中。

在主流云计算平台上,常常使用字母缩写来表达云服务器的系列。比如,AWS 的通用型是M系列,阿里云的内存优化型为R系列,Azure的计算优化型为F系列。

维度二:代别

云服务器的“代”(Generation),用来标识这是该系列下第几代的机型。

数据中心硬件和虚拟化技术是在不断发展的,云厂商需要不断地将最新的技术和能力推向市场,所以即便是同一系列的机型,不同的代别之间也会有不小的区别。

同类型云服务器的更新换代,往往会先带来相应硬件CPU的换代提升。由于CPU在不断更新,所以云服务器的单核性能未必相同。有时,虽然两个云服务器的核数一致,但由于底层芯片的架构和频率原因,性能上可能有较大的差别。

新一代的型号,往往对应着全新的特制底层物理服务器和虚拟化设施,能够提供更高的性能价格比。

维度三:实例大小

云服务器的实例大小(Size),指的是硬件计算资源的规模。

在选定的机器类型和代别下,我们能够自由选择不同的实例大小,以应对不同的计算负载。在描述实例大小时,业界常常使用medium、large、xlarge 等字眼来进行命名区分,这样的描述基本已经成为事实标准,包括AWS、阿里云、腾讯云在内的多家主流厂商都在使用。

大致可以这样记忆:标准large对应的是2vCPU的配备,xlarge则代表4个vCPU,而更高配置一般用nxlarge来表达,其中n与xlarge代表的4vCPU 是乘法关系。比如,8xlarge 就说明这是一台84=32vCPU的机器。

如若要更严谨的表述配置,则使用vCPU而非核数(Core)来描述云服务器处理器的数量。因为超线程(HyperThreading)技术的普遍存在,常常一个核心能够虚拟出两个vCPU的算力,但也有些处理器不支持超线程,所以 vCPU是更合适的表达方式,不容易引起混淆和误解。

在某些场景下,你可能还会看到“metal”或者“bare metal”这样的描述规格的字眼,中文称为“裸金属”。它们就是云服务商尽最大可能将物理裸机以云产品方式暴露出来的实例,主要用于一些追求极致性能,或是需要在非虚拟化环境下运行软件的场景。

云服务器的命名规则

云服务器的型号名称一般由类型、代别、实例大小这几项的缩写组合而成,有时还会带有补充后缀。AWS的命名规则最具代表性(阿里云采用的也是非常类似的格式):

当你理解了云服务器的命名规则后,今后看到某个具体型号,便能够很快明白背后的含义,晦涩的字符串立刻变得清晰。

比如,分解r54xlarge这个型号,这首先是一个R类型第5代的内存型机器,它应该有4×4=16个vCPU,内存大小则是16×8=128G(内存型机器的CPU内存比一般为1:8)。

当然,并非所有的云都一定是采用类似 AWS 的命名规则,微软Azure就用了一个略有不同的命名体系,大致可以总结为:

比如“E4v3”,就代表了微软Azure上4核32G的第三代内存型机器。掌握了Azure的格式特征后,你同样能够很快地解读标识的具体含义。

在命名公式中,还有一个称之为“后缀”的可选部分,在许多的型号命名中都能看到它。它一般是作为型号硬件信息的一个重要补充,这种型号与不带此后缀的标准版本相比,有一些显著的区别或特点。比如阿里云,表达“网络增强”含义的后缀是“ne”。

如何验证机型配置与期望相匹配?

在Linux环境下,可以使用lscpu命令来了解云服务器的CPU信息,并与机器的具体型号名称进行对照。下图是在一台AWS的m5axlarge机型上运行的结果,可以看到芯片提供商AMD及双核四线程等关键信息,与机型命名的含义相符:

 

 https://wwwwycn/computing/wcloud/allutm_source=wemedia

硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同。 

硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,尽管可以使用调试器或十六进制编辑器在内存或磁盘上进行更改。 

硬编码的数据通常表示不变的信息,例如物理常量,版本号和静态文本元素。 另一方面,软编码数据对用户输入,HTTP服务器响应或配置文件等任意信息进行编码,并在运行时确定。

它和普通编码的区别是:

1、编码方式不同:

普通编码:使用CPU进行编码。

硬编码:使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等。

2、使用方式不同:

普通编码:实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点

硬编码:性能高,低码率下通常质量低于软编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码

3、复杂程度不同:

普通编码比硬编码要复杂一些,对以后的考虑要周到一些。普通编码是一种设计,而硬编码不过是一种具体的实现。软件开发不只是需要一个软件的实现,更需要软件能够很好的修改,方便得扩展,所以需要一些设计技巧在里面。

扩展资料:

在许多情况下,单个硬编码值(例如数组大小)可能会在程序的源代码中出现多次。这将是一个神奇的数字。如果值的某些外观被修改,这可能通常会导致程序错误,但不是全部。这样的错误很难找到,并且可能会长时间保留在程序中。

如果相同的硬编码值用于多于一个参数值,例如,可能会出现类似的问题。一个由6个元素组成的数组,最小输入字符串长度为6。

程序员可能会错误地更改值的所有实例(通常使用编辑器的搜索和替换工具),而无需检查代码以查看每个实例的使用方式。通过定义将名称与值相关联的常量并在代码中使用每个外观的常量名称,可以避免这两种情况。

-硬编码

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何对 HTTP 请求中的字符编码进行正确的处理

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情