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。
在这里插入图片描述
下面进行一次请求转发,通过Struts2的调试页面可以看到,在Request域中参数被传递了。
在这里插入图片描述

Get/Post请求Get/Post是最常用的两种HTTP请求方法1.Get请求:参考W3SchoolGet请求的数据通过域名后缀(key / value)URL发送,用户可见,如今很多服务器、代理服务器会将用户请求的URL记录到日志文件中存在某个地方,这样就不太安全。GET是从服务器上获取数据Get请求传参长度有限制,应该注意的是限制Get请求传参最大长度的不是HTTP协议。而... 是什么使它与众不同? 有诸如ABP之类的阻止程序,它们通过URL阻止请求。 请求X可以做更多的事情,通过方法和URL阻止请求。 例如,有时我们需要通过 GET请求 显示数据,但是不想通过 POST 请求进行修改,因此我们仅阻止 POST 请求并保留 GET请求 。 import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; devServe:{ setup: (app) => { //解决 post 没响应的问题 app. post ('/goform/**', function(req, res) { res.redirect(req.originalUrl); // 重定向 到对应路径 @webpack3.0以后的版本setup需要改成before 支持便捷的url键,因此在指定选项时url.parse在url上使用url.parse 与npm软件包完美结合,可提供Cookie,代理,表单数据和OAuth等功能 所有这一切都在<100行代码中。 npm install simple-get 注意,所有这些示例也可以在带有的浏览器中使用。 简单的 GET请求 没有比这更容易的了: const get = requir
HTTP1.0在介绍302时说,如果客户端发出 POST 请求后,收到服务端的302状态码,那么不能自动的向新的URI发送重复请求,必须跟用户确认是否该重发,因为第二次 POST 时,环境可能已经发生变化(嗯, POST 方法不是幂等的), POST 操作会不符合用户预期。但是,很多浏览器(user agent我描述为浏览器以方便介绍)在这种情况下都会把 POST 请求变为 GET请求 。 HTTP1.1在介绍302时...
GET 用于获取资源, POST 用于传输实体主体。 GET 的参数放在 url 中, POST 的参数放在实体主体中。 GET 不会改变服务器端的数据,是安全的。 POST 会更新服务器端的数据,是不安全的。 GET 是幂等的,连续调用多次,客户端接收到的结果是一样的; POST 不是幂等的,如果调用多次,会增加多行记录。 对于 GET 方式的请求,浏览器会把请求头和请求体一并发送出去;而 POST 先发请求头,再发请求体,实际上是两次请求。 转发 重定向 的区别 转发 是服务器行
private string Http Post (string Url, string post DataStr) HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url); request.Method = POST ; request.ContentType = application/x-www-form-urlencoded; request.ContentLength = Encoding.UTF8.GetByteCount( post DataStr);
为了实现这个功能。在网上寻找的获取 重定向 的方法,出现了两个问题,摸索了半天。 1、获取的返回code为200.原因为, get请求 为自动 重定向 ,设置了取消。如下设置取消取消 重定向 。                                HttpClient client = new DefaultHttpClient(); HttpParams params = client.ge
String response = null; Post Method post = new Post Method(url); HttpClient client = new HttpClient();
在Java中,你可以使用Servlet来处理HTTP请求。如果你想将一个 POST 请求处理完后 转发 GET请求 ,可以按照以下步骤进行操作: 1. 在处理 POST 请求的Servlet中,获取 POST 请求的参数,并处理请求。 2. 在处理完 POST 请求后,使用request对象的setAttribute()方法将需要传递给 GET请求 的参数设置到request对象中。 3. 使用response对象的sendRedirect()方法将请求 重定向 GET请求 的Servlet。 4. 在处理 GET请求 的Servlet中,使用request对象的getAttribute()方法获取从 POST 请求中传递过来的参数,并处理请求。 以下是一个示例代码: 在处理 POST 请求的Servlet中: protected void do Post (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取 POST 请求的参数,并处理请求 String param1 = request.getParameter("param1"); String param2 = request.getParameter("param2"); // 处理请求... // 将需要传递给 GET请求 的参数设置到request对象中 request.setAttribute("param3", "value3"); request.setAttribute("param4", "value4"); // 将请求 重定向 GET请求 的Servlet response.sendRedirect("getServlet"); 在处理 GET请求 的Servlet中: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 使用request对象的getAttribute()方法获取从 POST 请求中传递过来的参数 String param3 = (String) request.getAttribute("param3"); String param4 = (String) request.getAttribute("param4"); // 处理请求... 在上面的示例中,我们首先在处理 POST 请求的Servlet中获取 POST 请求的参数,并处理请求。然后,我们将需要传递给 GET请求 的参数设置到request对象中,并使用sendRedirect()方法将请求 重定向 GET请求 的Servlet。在处理 GET请求 的Servlet中,我们使用getAttribute()方法获取从 POST 请求中传递过来的参数,并处理请求。