1.请求方法的本质
在网络请求中,HTTP请求报文包含请求头、请求行、请求体,其中请求方法是请求行中的第一个单词,它向服务器描述了客户端发出请求的动作类型,在HTTP协议中,不同的请求方法只是包含了不同的语义,但服务器和浏览器的一些约定俗成的行为造成了它们具体的区别。
fetch('https://www.baidu.com',{
method:'heiheihei', // 告诉百度,我这次请求是heiheihei
}
在网络请求中,我们其实也可以自定义请求方法,如heiheihei,虽然百度服务器无法理解这样的请求在干什么,但这样的请求是可以正常发送到百度服务器的
2.请求方法共识
- GET
- 表示向服务器获取资源,业务数据在请求行中,无需请求体
- POST
- 表示向服务器提交数据,业务数据在请求体中
- PUT
- 表示希望修改服务器的数据,业务数据在请求体中
- DELETE
- 表示希望删除服务器的数据,业务数据在请求行中,无需请求体
- OPTIONS
- 可以用来查询服务器支持哪些请求(get、post等),常用来进行预检跨域请求
- CONNECT
- 用于建立连接管道,通常用于代理场景中使用,网页中很少使用
- TRACE
- 用于回显服务器收到的请求步骤,主要用于测试和诊断
3.POST和GET请求的区别
从 http 协议的角度来说,GET 和 POST 它们都只是请求行中的第一个单词,除了语义不同,其实没有本质的区别。 之所以在实际开发中会产生各种区别,主要是因为浏览器的默认行为造成的。 受浏览器的影响,在实际开发中,GET 和 POST 有以下区别:
- 发送GET请求时,不会携带请求体
- GET请求传递信息有限,适合少量数据;POST请求传递信息没有限制,适合大量数据传输
- GET请求只能传递ASCII数据,遇到非ASCII数据时需要进行编码(encodeURIComponent方法进行编码,decodeURIComponent方法进行解码)
- GET请求传递的信息在url上,能够通过分享url重现页面,但存在暴漏风险,故敏感数据不适合用GET请求
- 刷新页面时,若当前页面是通过POST请求得到的,则浏览器会提示用户是否重新提交,若GET请求得到的则没有提示
- GET请求的地址可以被保存为浏览器书签,而POST不可以