前端面试-网络-常见的请求方法

204 阅读2分钟

1.请求方法的本质

在网络请求中,HTTP请求报文包含请求头、请求行、请求体,其中请求方法是请求行中的第一个单词,它向服务器描述了客户端发出请求的动作类型,在HTTP协议中,不同的请求方法只是包含了不同的语义,但服务器和浏览器的一些约定俗成的行为造成了它们具体的区别。

image.png

fetch('https://www.baidu.com',{
    method:'heiheihei', // 告诉百度,我这次请求是heiheihei
}

在网络请求中,我们其实也可以自定义请求方法,如heiheihei,虽然百度服务器无法理解这样的请求在干什么,但这样的请求是可以正常发送到百度服务器的

image.png

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不可以

image.png