浏览器向服务器发送请求时,需要分别注意请求的三要素:

  • 请求地址(URL)
  • 请求方式(POST/GET)
  • 请求参数

POST/GET请求方式的区别:

  1. POST/GET请求方式采用的都是HTTP协议,而HTTP则依赖于其下层网络TCP/IP协议。因此在运输层之下,两者实际上是等同的,都是由TCP连接传递报文段进行数据通信。
  2. POST和GET最明显的区别是,GET方式会将请求参数置于浏览器地址值栏后以?拼接在URL之后(多个请求参数之间使用&连接,只允许ASCII字符),而POST方式则会将请求参数包裹在请求体(Request body)中。但这个不是绝对的,使用GET方式时也可以在请求体中放请求参数,使用POST方式也可以将请求参数拼接在URL之后,但不推荐这么做。
    注:在tomcat服务器中,请求URL中的请求参数数据由tomcat服务器自动读取,默认读取编码为UTF-8,而在请求体中的数据则由ServletResponse对象读取,默认采用编码为“ISO-8859-1”。
  3. 基于上一条,由于大多数浏览器对请求的URL长度有所限制(如不能超过2K字节),(大多数)服务器最多处理64K大小的url,因此GET请求方式所能够携带的参数是有限的。POST方式将请求参数包裹在请求体中,因此相对没有限制。
  4. 对于有些客户端来说,POST在发送TCP报文段时,会先发送包含HTTP Header的一个数据包,等到收到来自服务器的100 continue后,再将数据生成另一个数据包发送,因此产生了两个数据包,而GET则是一次性将HTTP Header和data全部发送,因此只产生一个数据包。
  5. GET请求方式的请求参数可以被浏览器主动缓存,同时也可以被存储在浏览器的历史记录中,而POST请求方式的请求参数要缓存的话需要手动设置,也不可以被存储在浏览器的历史记录中,
  6. 基于前两条,GET请求方式会比POST请求方式的处理速度更快。还有其他的原因如POST不能采用管道传输等
  7. GET方式刷新无害。而POST方式刷新会再次提交数据。
  8. POST方式提交的页面不可用被存为书签:比如订单等,存入书签没有意义。