HTTP请求⽅法
1. GET
:申请获取资源,不对服务器产⽣影响
2. POST
:
POST
请求通常⽤于发送数据,例如提交表单数据、上传⽂件等,会影响服务器,服务器可能动态创建新的资源或更新原有资源。
3. HEAD
:类似
GET
,仅要求服务器返回头部信息,不返回实际的资源内容。
4. PUT
:⽤于更新服务器上的资源或创建新资源。
5. DELETE
:请求服务器删除指定的资源。
6. TRACE
:⽤于测试。要求⽬标服务器返回原始的
HTTP
请求内容
7. PATCH
: ⽤于对资源进⾏部分更新。
8. CONNECT
:⽤于代理服务器
9. OPTIONS
:⽤于获取服务器⽀持的
HTTP
⽅法列表,以及针对指定资源⽀持的⽅法
GET和POST请求的区别
概念
GET
和
POST
都是
HTTP
请求⽅法
1
、
GET
申请获取资源,不对服务器产⽣影响
2
、
POST
客户端向服务器提交数据,会影响服务器,服务器可能动态创建新的资源或更新原有资源
请求数据:若为
GET
,则请求数据为空;其主要是在
POST
中进⾏使⽤,使⽤于需要填表单
(Form)
场景
参数传递
HTTP
协议没有
Body
和
URL
的⻓度限制,对
URL
限制的⼤多是浏览器和服务器的原因。
GET
请求的参数⼀般写在
URL
中,所以
GET
传送的数据量较⼩,不能⼤于
2KB
,且只接受
ASCII
字符
POST
请求参数⼀般放在请求体中,所以其请求信息没有⻓度限制, 对于数据类型也没有限制
安全和幂等
安全:
HTTP
协议中,安全是指请求⽅法不会破坏服务器上的资源
幂等:多次执⾏相同的操作,结果都相同
GET
为安全幂等的,因为它为只读操作,⽆论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的
POST
因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是
不安全
的,且多次提交数据就会创建多个资源,所以不是幂等
的。
缓存机制
GET
请求会被浏览器主动
cache
,如果下⼀次传输的数据相同,那么就返回缓存中的内容,以求更快的展示数据,⽽ POST
不会,除⾮⼿动设置。
GET
请求参数会被完整保留在浏览器历史记录⾥,⽽
POST
中的参数不会被保留。
GET
产⽣的
URL
地址可以被 保存为书签,⽽
POST
不可以。
GET
在浏览器回退时是⽆害的,⽽
POST
会再次提交请求。
时间消耗
GET
产⽣⼀个
TCP
数据包:浏览器会把
header
和
data
⼀并发送出去,服务器响应
200
(返回数据)
POST
产⽣两个
TCP
数据包,对于
POST
,浏览器先发送
Header
,服务器响应
100 continue
,浏览器再发送 data,服务器响应
200 ok
(返回数据)
编码⽅式
GET
请求只能进⾏
URL
编码
application/x-www-form-urlencoded
POST
⽀持多种编码⽅式
application/x-www-form-urlencoded
或
multipart/form-data
。为⼆进制数据使⽤多种编码。)
实际上本质都是⼀样的,并⽆区别
1.
都是
HTTP
请求协议的请求⽅法,⽽
HTTP
⼜是基于
TCP/IP
的关于数据如何在万维⽹中如何通信的协议,所以GET/POST实际上都是
TCP
链接
2.
由于
HTTP
的规定以及浏览器
/
服务器的限制,导致它们在应⽤过程中可能会有所不同
HTTP状态码
200
:客户端请求成功
206
:
partial content
服务器已经正确处理部分
GET
请求,实现断点续传或同时分⽚下载,该请求必须包含
Range 请求头来指示客户端期望得到的范围
301
(永久重定向):该资源已被永久移动到新位置,将来任何对该资源的访问都要使⽤本响应返回的若⼲个
URL之⼀
302
(临时重定向):请求的资源现在临时从不同的
URI
中获得
304
:如果客户端发送⼀个待条件的
GET
请求并且该请求以经被允许,⽽⽂档内容未被改变,则返回
304,
该响应不包含包体(即可直接使⽤缓存)
400
:请求报⽂语法有误,服务器⽆法识别
401
:请求需要认证
403
:请求的对应资源禁⽌被访问
404
:服务器⽆法找到对应资源
500
:服务器内部错误
503
:服务器正忙
HTTP缓存有⼏种
将资源(如⽹⻚、图像、脚本等)的副本存储在客户端或中间代理服务器上,以便将来的请求可以直接从缓存中获取,⽽不必重新从服务器下载资源。这有助于减少⽹络延迟,提⾼⻚⾯加载速度,并减轻服务器的负担。
缓存可以解决什么问题
减少不必要的⽹络传输,节约带宽
更快的加载⻚⾯
减少服务器负载,避免服务过载的情况出现
强制缓存
强缓存:浏览器判断请求的⽬标资源是否有效命中强缓存,如果命中,则可以直接从内存中读取⽬标资源,⽆需与服务器做任何通讯。
Expires
强缓存
:设置⼀个强缓存时间,此时间范围内,从内存中读取缓存并返回。
Cache-Control
强缓存
:
http1.1
中增加该字段,使⽤
max-age
指令,可以设置资源在缓存中的最⻓有效时间,单位为秒。例如, Cache-Control: max-age=3600
表示资源在缓存中保留
3600
秒
协商缓存
与强制缓存不同,协商缓存依赖于客户端和服务器之间的交互,在协商缓存中,服务器在响应中提供了资源的⼀些标识信息,客户端在后续请求中通过这些信息来判断资源是否发⽣了变化,进⽽判断是否需要重新传输资源。
下⾯是常⽤于协商缓存的⼀些头部字段
ETag
和
If-None-Match
:
ETag
是服务器为资源⽣成的唯⼀标识符,可以是根据⽂件内容计算出的哈希值。
客户端在请求头部的
If-None-Match
字段中携带上次响应的
ETag
值。
服务器⽐较请求中的
If-None-Match
值与当前资源的
ETag
值,如果匹配,表示资源未发⽣变化,返回状态码 304 Not Modified
。
Last-Modified
和
If-Modified-Since
:
Last-Modified
是资源的最后修改时间,服务器在响应头部中返回。
客户端在请求头部的
If-Modified-Since
字段中携带上次响应的
Last-Modified
时间。
服务器⽐较请求中的
If-Modified-Since
值与当前资源的
Last-Modified
值,如果请求时间早于资源的最后修改时间,表示资源未发⽣变化,返回状态码 304 Not Modified
。