- 作者:老汪软件技巧
- 发表时间:2024-08-29 07:02
- 浏览量:
get请求和post请求的区别,不一定详细,但是粗略。
哈喽哈喽,我是小帅。今天小帅也是勤勤恳恳的搬砖。相信写过后台管理的小伙伴们都遇到过导出表格为xmls文件,前端的工作其实特别的简单,就是传递参数给后端,写一个好看的按钮,甚至都不要写按钮,antd,element-ui都有现成的按钮,那很简单我们需要做的就是调接口,把参数传递给后端,然后就会弹出浏览器的下载任务。但是呢,小帅发现了,在给后端发送请求的时候用的是window.open()这个api。
了解一下window.open()
Window接口的open() 方法,是用指定的名称将指定的资源加载到新的或已存在的浏览上下文(标签、窗口或iframe)中。
语法:
可以看出来它有三个参数
url:一个字符串,表示要加载的资源的 URL 或路径。如果指定空字符串("")或省略此参数,则会在目标浏览上下文中打开一个空白页。
target: 一个不含空格的字符串,用于指定加载资源的浏览上下文的名称。如果该名称无法识别现有的上下文,则会创建一个新的上下文,并赋予指定的名称。还可以使用特殊的:_self、_blank、_parent和_top。
windowFeatures: 一个字符串,包含以逗号分隔的窗口特性列表,形式为name=value,布尔特性则仅为name。这些特性包括窗口的默认大小和位置、是否打开最小弹出窗口等选项。支持以下选项: 如果启用此特性,则要求使用最小弹出窗口。弹出窗口中包含的用户界面功能将由浏览器自动决定,一般只包括地址栏。如果未启用popup,也没有声明窗口特性,则新的浏览上下文将是一个标签
重点来了,为什么我们要使用window.openf发请求。两个原因,因为它能请求url,也就是发接口请求,但是它只能发get请求,对没错,get请求,不是get请求我们还不要。还有一个就是它的target参数里面有一个_blank。这很重要,对于导出表格来说。
听不懂了是吧,我来浅浅的解释一下吧。你看我们点导出文件是不是先向后端请求资源,请求到资源后触发浏览器的下载任务,浏览器处理这些事情的时候是不是要一个页面,你不希望你现在的页面跳转到请求到的url哪个地址吧。_blank参数就是打开一个新的窗口。你看请求url地址,打开一个新窗口,获取到资源之后触发下载的任务,然后关闭这个窗口,顺理成章这是其一。
其二 为什么一定要get请求,post请求行不行。好问题,这就涉及到get请求和post请求的区别。回想一下我们用post请求一般传递的参数是什么样的,以及它的返回数据是什么样的。没错,是json数据流。而我们的下载要流式传输,展示下载的进度嘛,所以在这个地方我们要用get而不用post请求。但是用get请求有一个很难受的点就是,它的参数是拼接在url地址栏,所以安全性不高,而且由于地址栏有限,所以参数也有限,不能传递过长的参数。
这就是用get的后果,无限拼接url。记得拼接的时候做一下保证参数存在再拼接的处理。
post请求和get请求
作用:
安全性:
误区:从表面上看好像post请求更安全一点,因为参数不会像get请求一样直接暴露在url地址栏。但是其实都不安全,我也可以在request里面看到post传递的参数,而且我们对接口的时候不是经常看嘛。从传输的角度来说,他们都是不安全的,因为 HTTP 在网络上是明文传输的。像不懂技术的人,他也不会去看url地址栏携带的参数呀,会技术的人你又防不住,所以不能单单说哪种请求安全性更高。
url的长度限制:
参数的数据类型:
是否被浏览器缓存:
总结
其实请求方式还有很多,它们能做到的很多相同的事情,只不过有一些差别。所以在选择哪种请求的时候要根据实际情况去选择。有这么多种请求也是为了语义化,不如get用于请求,post用于发送,其实都可以。好了,先粗略的了解一下吧,有时间再详细的了解一下这些请求,给大家详细的总结一下。