关于 HTTP 常用 Methods

2

前言

对于 HTTP 请求方法,seaconch 一直是有很多疑惑,按照计划今天就来了解一下各个请求有何区别

概述

根据HTTP标准,HTTP请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET、POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

seaconch 今天只总结其中常见的几种方法

简单请求与预检请求

1.简单请求

HTTP 1.0 三个方法:HEAD、GET、POST 默认都属于简单请求 Simple Request

  • 没有自定义报头
  • MIME Type in text/plain、multipart/form-data、application/x-www-form-urlencoded

2.预检请求

预检请求 Priflight Request 即在请求之前需要首先由浏览器自发发送 Options 请求的请求

预检请求的范围

一般 HTTP1.1 中的方法请求默认都会触发预检请求

但是简单请求满足一下条件也可以触发 Options 请求

  • 带有自定义头信息
  • MIME Type Not in text/plain、multipart/form-data、application/x-www-form-urlencoded

GET

1.方法用途

GET 方法的首要目的是 获取资源

当然您也可以走野路子,不过在这里 seaconch 并不提倡哦

2.方法特点

a) 参数可见

GET 方法的参数是明文可见的包含在 URL 当中,所以说敏感信息不建议使用 GET 方法

不过也正是因此,所以 GET 方法允许被保存书签

b) 数据类型只允许 ASCII

GET 方法的数据类型只允许是 ASCII 字符,所以说传递 二进制 文件就不可以用 GET 方法了哦

c) 可以保存书签

当我们访问某一个网站的频率特别高的时候,肯定添加到书签,那其实书签就是依靠 GET 方法来保存的

d) 可以被缓存

GET 方法支持缓存,当本次请求允许被缓存时,会将资源存值本地 cache ,在未过期的情况下直接取本地 cache;缓存过期后视情况而定

e) 参数会保留在浏览器历史记录

比较直观的感受就是,我们可以在浏览器的历史记录中查看到曾经搜索过的关键字信息

f) 请求长度会受限于所使用的浏览器与服务器

不同的浏览器对于 GET 请求长度的限制也是不同的,注意这是 浏览器 / 服务器(IE、Chrome、Apache、IIS等) 对于长度的限制,而不是 HTTP 协议

POST

1.方法用途

POST 方法的首要目的是 提交,POST 方法一般用于添加资源

2.方法特点

a) 参数不可见,也不会被保存

所以说 POST 方法是不可以被保存书签的

b) 不能收藏为书签

理由如上

c) 不可以被缓存

我要提交的数据被缓存在本地 cache 中想想其实也是没道理的

d) 不会被保存在浏览器历史中

同样是因为参数不可见

e) 不限制请求长度

对于 POST 方法这种以 提交 为首要目的的方法,肯定是不可以限制请求长度的

f) 数据类型

不限,所以说 POST 是可以 提交文件 到服务器的

g) 请求方式

POST 请求与 GET 请求不同,他会首先提交 HEAD 信息,待得到 100 响应后,才会再次将 DATA 提交

HEAD

1.方法用途

HEAD 方法用于获取报头信息,例如检查 cache 是否被修改,是否过期?

2.方法特点

HEAD 方法与 GET 方法类似,但并不会返回响应主体

OPTIONS

1.方法用途

OPTIONS 方法的首要目的是 Priflight Request

2.方法特点

假如我现在有如下配置:

Access-Control-Allow-Methods:OPTIONS, PUT

那么当浏览器发起了 Priflight Request 后,只在包含在 被允许的 HTTP 方法中的请求会被通过(Simple Request除外),而没有被包含在内的请求,例如 DELETEOPTIONS 之后将不会被请求

PUT 与 PATCH

1.方法用途

PUT 与 PATCH 方法都是用于更新资源

2.方法特点

PUT 对后台来说 PUT 方法的参数是一个完整的资源对象,它包含了对象的所有字段

PATCH 对后台来说 PATCH 方法的参数只包含我们需要修改的资源对象的字段

DELETE

1.方法用途

DELETE 方法一般用于删除资源

方法与规范

其实虽然我们都说 POST(增) DELETE(删)PUT(改)GET(查),但其实真正我们是如何实现方法的是随意的,也就是你完全可以用 GET 删除资源,DELETE 增加资源,所以说还有些没想明白的同学到这里就可以释然了,毕竟规定是死的,人是活的,但是按照规定是好的,不按规定也是可以的。

晚安


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

Lennon · 2018年09月04日

看了你以前的文章,感觉你学的好多啊,又是前端,又是go和C#,厉害咯

回复

0

可是太抬举我了,只是在补课而已,谢谢你有看我的分享,希望不会误导啦你,共进~

bei6 作者 · 2018年09月05日
载入中...