Servlet中get请求和post请求在浏览器和服务器中的编解码问题

  1. (解决请求乱码)浏览器编码,服务器解码

    请求由请求行、请求头、请求体三部分组成

    无论是get请求还是post请求,浏览器按照页面编码对参数进行编码并发送给服务器(如果页面不指定编码默认为操作系统编码gb2312),

    get请求参数通过请求行Request URL发送服务器接收参数按照tomcat默认编码解码 ,tomcat的server.xml配置文件中有URIEncoding属性(我的tomcat为8.5版本所以没有发生乱码,8.0之后的tomcat默认编码为utf-88.0之前的tomcat默认编码为iso8859-1所以会乱码)

    <Service name="Catalina">
        <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1"  
               redirectPort="8443"  URIEncoding="utf-8"/>
    </Service>
    

    post请求参数通过请求体Request Body发送tomcat中设置的默认编码只能解决请求行(即URL)上的中文参数服务器对请求体中的参数解码需要通过request.setCharacterEncoding(“utf-8”)告诉服务器用utf-8的编码形式对请求体进行解码(服务器对请求体的默认解码编码格式为iso8859-1),

默认编码格式:

  • 浏览器对请求体的默认编码为iso8859-1,若页面指定编码格式,则浏览器以指定的页面编码格式对请求体编码(请求行参数同理)
  • 服务器对请求参数的解码分两种情况。
    第一种是对get请求的请求行参数解码,若tomcat在8.0以上版本的话,默认解码编码格式为utf-8;若tomcat在8.0以下版本的话,默认解码编码格式为iso8859-1。
    第二种是对post请求的请求体参数解码,tomcat默认对请求体解码编码格式为iso8859-1
  1. (解决响应乱码)服务器编码,浏览器解码

    响应由响应行、响应头、响应体三部分组成

    无论get请求响应还是post请求响应,都是在服务器处理好数据之后响应浏览器,如果服务器端不指定响应编码,那么服务器端对响应体的默认编码为iso8859-1,服务器通过response.setContentType(“text/html;charset=utf-8”)将响应体中的内容用utf-8编码,同时告诉浏览器用utf-8对响应体进行解码

  2. 在浏览器上如何查看页面编码格式
    答:F12打开开发者工具,console控制台上输入下面两个命令

    1. document.charset
    2. document.characterSet
发布了18 篇原创文章 · 获赞 9 · 访问量 2913

猜你喜欢

转载自blog.csdn.net/weixin_43575868/article/details/103981469