HTTP协议

145 阅读3分钟

这是我参与11月更文挑战的第26天, 活动详情查看:2021最后一次更文挑战

http有哪些方法
  • HTTP1.0定义了三种请求⽅法: GET, POST 和 HEAD⽅法
  • HTTP1.1新增了五种请求⽅法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
这些⽅法的具体作⽤是什么
  • GET: 通常⽤于请求服务器发送某些资源
  • HEAD: 请求资源的头部信息, 并且这些头部与 HTTP GET ⽅法请求时返回的⼀致. 该请求⽅法的⼀个使⽤场景是在
  • 下载⼀个⼤⽂件前先获取其⼤⼩再决定是否要下载, 以此可以节约带宽资源
  • OPTIONS: ⽤于获取⽬的资源所⽀持的通信选项
  • POST: 发送数据给服务器
  • PUT: ⽤于新增资源或者使⽤请求中的有效负载替换⽬标资源的表现形式
  • DELETE: ⽤于删除指定的资源
  • PATCH: ⽤于对资源进⾏部分修改
  • CONNECT: HTTP/1.1协议中预留给能够将连接改为管道⽅式的代理服务器
  • TRACE: 回显服务器收到的请求,主要⽤于测试或诊断
GET和POST有什么区别
  • 数据传输⽅式不同:GET请求通过URL传输数据,⽽POST的数据通过请求体传输。
  • 安全性不同:POST的数据因为在请求主体内,所以有⼀定的安全性保证,⽽GET的数据在URL中,通过历史记录,缓存很容易查到数据信息。
  • 数据类型不同:GET只允许 ASCII 字符,⽽POST⽆限制
  • GET⽆害: 刷新、后退等浏览器操作GET请求是⽆害的,POST可能重复提交表单
  • 特性不同:GET是安全(这⾥的安全是指只读特性,就是使⽤这个⽅法不会引起服务器状态变化)且幂等(幂等的概念是指同⼀个请求⽅法执⾏多次和仅执⾏⼀次的效果完全相同),⽽POST是⾮安全⾮幂等
PUT和POST都是给服务器发送新增资源,有什么区别?
  • PUT 和POST⽅法的区别是,PUT⽅法是幂等的:连续调⽤⼀次或者多次的效果相同(⽆副作⽤),⽽POST⽅法是⾮幂等的。
  • 除此之外还有⼀个区别,通常情况下,PUT的URI指向是具体单⼀资源,⽽POST可以指向资源集合。

举个例⼦,我们在开发⼀个博客系统,当我们要创建⼀篇⽂章的时候往往⽤ POST www.jianshu.com/articles , 这个请求的语义是,在articles的资源集合下创建⼀篇新的⽂章,如果我们多次提交这个请求会创建多个⽂章,这是⾮幂等的。

⽽ PUT www.jianshu.com/articles/12… 的语义是更新对应⽂章下的资源(⽐如修改作者名称等),这个URI指向的就是单⼀资源,⽽且是幂等的,⽐如你把『张三』修改成『李四』,提交多少次都是修改成『李斯』

注意: 『POST表示创建资源,PUT表示更新资源』这种说法是错误的,两个都能创建资源,根本区别就在于幂等性

PUT和PATCH都是给服务器发送修改资源,有什么区别?
  • PUT和PATCH都是更新资源,⽽PATCH⽤来对已知资源进⾏局部更新。

⽐如我们有⼀篇⽂章的地址 www.jianshu.com/articles/82… ,这篇⽂章的可以表示为:

article = {
    author: 'ddys',
    creationDate: '2021-11-26',
    content: '是的,我写的!',
    id: 123456
}

当我们要修改⽂章的作者时,我们可以直接发送 PUT www.jianshu.com/articles/12… ,这个时候的数据应该是:

{
    author: 'ddys',
    creationDate: '2021-11-26',
    content: '是的,我写的!',
    id: 123456
}