POST与GET
面试如果被问到这个问题,相信很多人都是会心一笑,答案随口而来:
1.GET在浏览器回退时是无害的,而POST会再次提交请求。
2.GET请求会被浏览器主动cache,而POST不会,除非手动设置。
3.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
4.GET请求在URL中传送的参数是有长度限制的,而POST没有。
5.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
6.GET参数通过URL传递,POST放在Request body中。
等等各种答案。其实这些答案都是基于“外表”的。
GET和POST是HTTP协议中的两种发送请求的方法,而HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议,HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,
GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。如果给GET加上request body,给POST带上url参数,技术上是完全行的通的,但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。浏览器通常都会限制url长度在2K个字节,而大多数服务器最多处理64K大小的url。超过的部分,不予处理。如果你用GET服务,在request body加了数据,不同服务器的处理方式也是不同的,有些服务器会读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到。
GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据;
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据,但并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
随机推荐
- MVC和三层架构
从最开始写程序到现在,一路上听到架构这个词已经无数次了,在工作和圈子里也不停听到大家在讨论它,但是很多时候发现不少人对这个概念的理解都是很模糊的,无意间在知道上看到一个朋友的回答,感觉很不错,特转帖到 ...
- Angular.js之指令学习笔记
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- 每天一个linux命令(46)--rcp命令
rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝,第二种格式用于文件或目录拷贝到另一个目录中. 1. ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM
写在前面的话 承接前文<Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven>,本篇所讲述的是如何使用maven与原ssm项目整合,使得一个普 ...
- iOS 注册密码加密 添加了时间戳 遇到的问题...
今天项目 遇到一个事故,我本想用 一个形容这个事故的adj 算了 既然 叫事故 已经能表达我们处于的一种状态, 是这样的: 有小部分用户反应 app无法注册 总提示密码错误的情况 实际 该步骤 已经 ...
- java异常详解
java异常需要弄清楚如下几个问题: 1.java异常的层次结构 2.搞清楚问题:java中异常抛出后代码还会继续执行吗? 答:该问题可以参考该博文,完美的回答了我的疑惑:http://www.cnb ...
- Archlinux 升级 pacman 时遇到的问题及其解决
这是 Archlinux 升级时经常碰到的老问题.提示如下 问题来了 # yaourt -Syua ==> 警告:使用 root 用户构建软件包存在风险. 请使用非特权用户运行 yaourt . ...
- Servlet中的过滤器Filter详解
加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...
- java Pattern和Matcher详解
结论:Pattern与Matcher一起合作.Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持. 单独用Pattern只能使用Pattern.matcher(String ...
- eclipse一直报An internal error occurred during: "Building workspace". GC overhead limit exceeded
最近导入到eclipse里的工程挺大的,每次eclipse启动之后都回update workspace,然后就一直报: An internal error occurred during: " ...