post请求与get请求的差别
幂等的概念
在理解这两者的区别前需要先了解的概念:
幂等性
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
简单的说就是,浏览器发起一次请求和多次请求,不会改变目标资源的状态,也可以说是:浏览器进行了缓存。
post与get的差别
这是在网上找到的post请求与get请求的差别对比图:
但个人认为post和get差别最核心的一点是:
缓存机制的不同(能否被浏览器缓存)
缓存机制
这里我们用到了开头所讲的幂等性概念。由于网络的不可靠,使得等幂性显得特别重要,因此get、head、put、delete一定要设计成等幂的:如果一次请求,服务器收到处理以后,客户端没有收到相应,客户端会再次请求,如果没有等幂性保障,就会发生意想不到的问题。
post是不等幂的,例如在segmentfault上两次提交相同的文章,则会产生两个资源。
通常HTTP 缓存只适用于 idempotent request(幂等的请求),对于其他类型的响应则无能为力。
get请求的缓存过程
- 第一次请求时,返回数据。
返回数据,在http头部中包含last-modified(最后修改的时间) Etag(指示资源的状态的唯一标识)Expires(指示资源在浏览器缓存中的过期时间) - 然后浏览器会将请求回的文件放在Cache目录下,并保存上述信息
- 发起第二次请求。
浏览器会先检查Cache目录中是否有该文件,并且是否过期。同时满足这两个条件,则浏览器不会在向服务器发送请求,而是直接使用缓存中的文件。
否则,浏览器会发送请求服务器 ,并在头部添加If-Modified-Since 和 If-None-Match。
如果文件从上次访问至今都没有被修改过或Etag信息没有变化,则直接返回一个304的状态,表明服务器端允许请求访问资源,但不满足条件,返回不包含任何响应的主体部分。
post请求与get请求的差别的更多相关文章
- ASP.NET Core应用针对静态文件请求的处理[2]: 条件请求与区间请求
通过调用ApplicationBuilder的扩展方法UseStaticFiles注册的StaticFileMiddleware中间件帮助我们处理针对文件的请求.对于StaticFileMiddlew ...
- Java Web中请求转发和请求包含
1.都是在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在AServle中setAttribute()保存数据在BServlet中由getAtt ...
- Ajax中Get请求与Post请求的区别
Get请求和Post请求的区别 1.使用Get请求时,参数在URL中显示,而使用Post方式,则不会显示出来 2.使用Get请求发送数据量小,Post请求发送数据量大 例子 页面的HTML代码: &l ...
- WebApi系列~基于单请求封装多请求的设计
回到目录 怎么说,单请求封装多请求,这句话确实有点绕了,但还是要看清楚,想明白这到底是怎么一回事,单请求即一次请求(get,post,put,delete),封闭多请求,即在客户端发送的一个请求中可能 ...
- 详细解读XMLHttpRequest(一)同步请求和异步请求
本文主要参考:MDN XMLHttpRequest 让发送一个HTTP请求变得非常容易.你只需要简单的创建一个请求对象实例,打开一个URL,然后发送这个请求.当传输完毕后,结果的HTTP状态以及返回的 ...
- 【读书笔记】iOS网络-同步请求,队列式异步请求,异步请求的区别
一,同步请求的最佳实践. 1,只在后台过程中使用同步请求,除非确定访问的是本地文件资源,否则请不要在主线程上使用. 2,只有在知道返回的数据不会超出应用的内存时才使用同步请求.记住,整个响应体都会位于 ...
- iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range
一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...
- request获取请求头和请求数据
package cn.itcast.request; import java.io.IOException; import java.io.InputStream; import java.io.Pr ...
- Ajax的get请求向服务器请求数据五步骤?
如下: ①创建ajax对象 ②建立http请求 ③发送http请求 ④设置ajax对象状态改变的回调函数 ⑤判断ajax状态是否等于4,做相应的业务逻辑
随机推荐
- pip 通过pqi切换源到国内镜像
pip install pqipqi lspqi use aliyun # pqi use tuna 清华
- LeetCode No.139,140,141
No.139 WordBreak 单词拆分 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词. 说明: 拆分时可 ...
- Java类的三大特征
1.三大特征是封装.继承和多态 2.封装 特点: 需要修改属性的访问控制符为private: 创建getter/setter方法用于属性的读写: 在getter/setter方法中加入属性控制语句,用 ...
- Mysql 和 Java对比异同
1.求两个时间的差(天数) mysql : to_days 距离公元0年的天数 select TO_DAYS('2017-10-18 00:00:00'),TO_DAYS(NOW()), (TO_DA ...
- 5-6 学生CPP成绩计算
给出下面的人员基类框架: class Person { protected: string name; int age; public: Person(); Person (string p_name ...
- VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能调用的API封装库
API函数很强大,但是声明的时候比较繁琐. 我开发的封装库,包括窗口.键盘.鼠标.消息等常用功能.用户不需要添加API函数的声明,就可以用到API的功能. 在VBA.VB6的引用对话框中引用API.t ...
- php获取mysql大小
查看指定数据库大小: SELECT sum(DATA_LENGTH)+sum(INDEX_LENGTH) FROM information_schema.TABLES where TABL ...
- PostgreSQL中实现更新默认值(二)
今天我们用表继承+触发器的方案,来实现表中的更新默认值.这也许是PostgreSQL里最佳的解决方案. 一. 创建一张表,作为父表 create table basic_update( t_updat ...
- UMLet的使用与类图的设计
本实验是为后续实验做准备的.在本书中,各个程序实例都要画类图,所以读者必须掌握用某种UML建模工具来画类图,本书选择 UMLet 作为 UML 的建模工具.实验目的本实验的主要目的如下. 理解类的基本 ...
- 吴裕雄--天生自然HTML学习笔记:HTML <head>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...