Get/Post请求

Get/Post是最常用的两种HTTP请求方法

1.Get请求:

参考W3School

  1. Get请求的数据通过域名后缀(key / value)URL发送,用户可见,如今很多服务器、代理服务器会将用户请求的URL记录到日志文件中存在某个地方,这样就不太安全。
  2. GET是从服务器上获取数据
  3. Get请求传参长度有限制,应该注意的是限制Get请求传参最大长度的不是HTTP协议。而是web服务器限制了URL的长度。一般传递大数据量都不使用get
  4. Get请求可以被缓存。使用ajax采用get方法请求静态数据的时候,如果两次传输的数据都相同,那么第二次获取所消耗的时间会很短。例如我们访问魅族官网,抓包图如下显式,部分静态文件被自动缓存下来。

2. Post请求

  1. Post请求的参数是在HTTP消息的主体中发送的,对于用户来说都是不可见的,相对于Get更为安全可靠。
  2. Post请求不会被缓存。Post请求没有被限制长度,因此常用的文件上传功能都是使用Post请求。
  3. Post在真正接收数据之前先会将请求头发送给服务器进行确认,然后才真正发送数据。

Post请求过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回100 Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应

Get请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回200 OK响应

另外,在提交Get后点击后退按钮可以正常后退,但是Post在提交后点击后退数据会被重新提交(通常浏览器会提示)

转发与重定向的区别

1.转发是服务器行为,重定向是客户端行为。

转发的过程:客户浏览器发送HTTP请求 ----》web服务器接收请求 ----》 调用内部的方法在内部完成请求处理和转发
----》将目标资源发送到客户端。其中转发的URL必须是同一个web容器下的URL,并且地址栏的地址是不会改变的,并且request中的参数也会传递过去。

重定向的过程: 客户浏览器发送HTTP请求 ----》web服务器接收请求后发送302状态码和新的URL地址给客户浏览器 ----》
客户浏览器发现是302状态码响应,则重新发出一个HTTP请求,请求的URL就是服务器返回的新URL。在重定向中地址可以重定向到任意的URL,浏览器重新发出了请求那么request中的东西也是不再传递了,最明显的是地址栏的地址发生了改变。

记录一个细节:

使用Get/Post请求会将参数封装到HTTP的Request请求中,那么在页面转发后Request也被传递了,所以可以利用Post请求来在页面中传递参数!

例如:在jsp页面中设定隐藏的input标签,在标签的value中设置值。如下图所示,我们将selected 的value设置为true。

java post请求的重定向 post请求能重定向吗_服务器


下面进行一次请求转发,通过Struts2的调试页面可以看到,在Request域中参数被传递了。

java post请求的重定向 post请求能重定向吗_HTTP_02