首页 > 其他分享 >关于HTTP GET请求的url中文参数编码

关于HTTP GET请求的url中文参数编码

时间:2023-01-04 16:11:06浏览次数:38  
标签:编码 中文 utf Tomcat GET url URL HTTP

场景:前端用JS构造了一个GET请求,携带了一个中文的参数,通过Spring MVC传到后台以后解析中文是乱码。

1. 发送请求,从浏览器中捕获到http的请求内容如下:

1 Remote Address:[::1]:8080
2 Request URL:http://localhost:8080/fax/downloadFax?fname=%e6%8e%88%e6%9d%832.png
3 Request Method:GET
4 Status Code:201 Created

2. 第一时间认为是URL编解码的问题,所以学习了一下相关的转换方法:

1 //将utf-8格式的中文转换成URL编码
2 encodeStr = URLEncoder.encode(fname, "utf-8"); 
3 //将URL编码的字符串转换成utf-8格式的中文
4 decodeFName = URLDecoder.decode(encodeStr, "utf-8");

测试结果,没有达到预期,再仔细看看,笑了,上面不是做了一次A->B->A的无效转码吗?!

3.乱码是怎么回事呢?

我的页面设置的utf-8格式,我的Spring MVC框架的编码filter也配置了utf-8,现在的乱码是怎么回事呢?

4. 原因找到了:

Spring MVC 是基于Servlet,在Http请求到达Servlet解析之前,GET过来的URL已经被Tomcat先做了一次URLDecode。

Tomcat对GET方式默认的URL解码结果是iso-8859-1而不是UTF-8!

5. 解决办法:

decodeFName = new String(fName.getBytes("iso-8859-1"),"utf-8");

由于上述原因,在构造HTTP响应消息时,需要把中文字符再转成iso-8859-1。

6.还有一种办法,就是配置Tomcat:

在Tomcat的conf目录下的server.xml中配置Connector的URIEconding=“UTF-8"属性即可,没有这个参数可以手动加上。

标签:编码,中文,utf,Tomcat,GET,url,URL,HTTP
From: https://www.cnblogs.com/kn-zheng/p/17025159.html

相关文章

  • 解析URL中的携带的参数到Map
    手动解析URL字符串中的参数,写了一个工具类。1finalintMIN_ARRAY_LEN=2;2finalintDIVIDE_INTO_PAIRS=2;34publicMap<String,String>p......
  • 一些 NuGet 程序包是使用不同于当前目标框架的目标框架安装的,可能需要重新安装
    何时重新安装包包还原后的损坏引用:如果已打开项目并还原了NuGet包,但仍看见了损坏的引用,请尝试重新安装每个包。项目因删除文件损坏:NuGet不会阻止删除从包添加的项,因......
  • Okhttp常用方法示例
    这是我用到的一个util类1publicclassHttpBaseService{23privateOkHttpClientclient=newOkHttpClient();4privatestaticfinalMediaTypeJ......
  • nginx: the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf
    Nginx如果未开启SSL模块,配置Https时将提示如题错误原因:nginx缺少http_ssl_module模块,编译安装的时候带上--with-http_ssl_module配置就行了,但是现在的情况是我的nginx已经......
  • urllib基本使用
    urllib基本使用​ 官方文档:https://docs.python.org/zh-cn/3/library/urllib.html​ Pythonurllib库用于操作网页URL,并对网页的内容进行抓取处理,包含4个模块:request、......
  • Visual Studio 修改NuGet 包路径
    目的:通过NuGet安装包时,NuGet先将包下载至一个统一的目录,默认路径是:C:\Users\{用户名}\.nuget\packages。现在需要将其迁移到目录E:\nuget\packages步骤1、在......
  • HTTP请求 状态码405 错误出现的原因
    405错误一般指请求 methodnotallowed 错误请求行中指定的请求方法不能被用于请求相应的资源。 出现该错误的原因可能是:1.GET,POST,DELETE,PUT等方法类型不一致2.......
  • Visual studio NuGet Error NU1202
    VisualstudioNuGetErrorNU1202报这个错,说明报错的库支持的.netSDK,你当前编译环境没有安装,导致编译不过,仅此而已。解决办法:装对应版本的库,或者装库支持的sdk版本,......
  • OKHTTP
    @Testpublicvoidtest1(){try{OkHttpClientok=newOkHttpClient();RequestBodyrequestBody=newFormBody.Builder().add("......
  • tomcat添加TLSv1.2https证书访问
    打开conf下的 server.xml,从中找到如下注释信息。<!--DefineaSSL/TLSHTTP/1.1Connectoronport8443ThisconnectorusestheNIOimplementation.Thedefault......