极易混淆,究极辨析:1) get请求与post请求 及 2) 转发与重定向

    科技2025-10-23  10

    一、GET & POST

    相同

    都是HTTP请求方式

    差异

    1、安全性

    get 请求数据会以键值对的形式被 “?” 或 “&” 符号键隔开,且直接追加URL显示在地址栏,安全性差,还有可能造成Cross-site request frogery攻击,同时URL编码格式采用ASCII码,而非uniclde,即所有的非ASCII字符都要编码之后再传输;

    post 请求数据不直接展示在地址栏,会把请求的数据放置在HTTP请求包的包体中,但也不是绝对安全,在浏览器调试工具 - 网络 仍可以看见解析度请求数据

    2、传输大小

    在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。

    但是在实际开发过程中,对于 get 请求,特定的浏览器和服务器对URL的长度有限制

    post 请求由于不是URL传值,理论上不会受限,但实际各服务器会规定对其提交的数据大小进行限制,Apache、IIS都有各自的配置。

    补充

    1) 设置编码格式

    get:1、String s=new String(变量名.getBytes("ISO-8859-1"),"UTF-8");( 不常用 ) 2、在 tomcat8.0 后自动设置 \conf\server.xml 的 <Connection / > 标签 URIEncoding 属性

    post:在接收数据前,设置req.setCharacterEncoding("utf-8");

    【tips】 后续通过过滤器(Filter)设置所有请求的编码格式,在servlet执行前后都会进行过滤

    2) 数据提交方式

    get:表单提交 / <a>标签 / 地址栏直接拼接 / JS

    post:表单提交

    二、转发 (getRequestDispatcher) & 重定向 (setRedirect)

    转发

    由request 请求对象调用一次请求,一次响应,数据会保存可以获取到 request.setAttribute() 的数据地址栏不会改变,仍是发生请求的地址(若是表单提交,会变成action属性值)

    重定向

    由response 响应调用两次请求,两次响应,所以数据会丢失,即重定向的页面不会接收到原先页面传递的数据。采用JS的 location.href 强制跳转页面的方式传输数据,同样会丢失数据无法获取到 request.setAttribute() 的数据地址栏改变,为跳转到的页面地址

    三、补充

    参考:getParameter和getAttribute区别(超详细分析)

    两者都是 request 对象关于数据获取的方法,区别在于:

    getParameter()

    得到的是浏览器请求给服务器端的数据,像表单提交,按钮点击等不能获取 req.setAttribute() 数据(且没有setParameter() 方法)数据类型永远为字符串

    getAttribute()

    得到的是服务器内部传输的数据,像跳转页面等可获取 req.setAttribute() 的数据数据类型可以是任意类型
    Processed: 0.010, SQL: 8