# HTTP
# 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
方法是非幂等的.
『
POST
表示创建资源,PUT表示更新资源』这种说法是错误的,两个都能创建资源,根本区别就在于幂等性
# PUT和PATCH都是给服务器发送修改资源,有什么区别?
PUT
和PATCH
都是更新资源,而PATCH
用来对已知资源进行局部更新.
# http的请求报文是什么样的?
请求报文有4部分组成:
请求行 请求方法字段、
URL
字段、HTTP
协议版本字段.它们用空格分隔.例如,GET /index.html HTTP/1.1
.请求头部 请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号“:”分隔 1.
User-Agent
:产生请求的浏览器类型. 2.Accept
:客户端可识别的内容类型列表. 3.Host
:请求的主机名,允许多个域名同处一个IP
地址,即虚拟主机.空行
请求体 post put等请求携带的数据
# http的响应报文是什么样的?
请求报文有4部分组成:
- 响应行
由协议版本,状态码和状态码的原因短语组成,例如
HTTP/1.1 200 OK
. - 响应头 响应部首组成
- 空行
- 响应体 服务器响应的数据
# 同样是重定向307,303,302的区别?
302
是http1.0的协议状态码,在http1.1
版本的时候为了细化302状态码又出来了两个303
和307
.
303
明确表示客户端应当采用get
方法获取资源,他会把POST
请求变为GET
请求进行重定向.
307
会遵照浏览器标准,不会从post
变为get
.
# HTTP的keep-alive是干什么的?
在早期的HTTP/1.0
中,每次http
请求都要创建一个连接,而创建连接的过程需要消耗资源和时间,为了减少资源消耗,缩短响应时间,就需要重用连接.在后来的HTTP/1.0
中以及HTTP/1.1
中,引入了重用连接的机制,就是在http
请求头中加入Connection: keep-alive
来告诉对方这个请求响应完成后不要关闭,下一次咱们还用这个请求继续交流.协议规定HTTP/1.0
如果想要保持长连接,需要在请求头中加上Connection: keep-alive
.
keep-alive
的优点:
- 较少的
CPU
和内存的使用(由于同时打开的连接的减少了) - 允许请求和应答的
HTTP
管线化 - 降低拥塞控制 (
TCP
连接减少了) - 减少了后续请求的延迟(无需再进行握手)
- 报告错误无需关闭
TCP
连
# 为什么有了HTTP为什么还要HTTPS?
https
是安全版的http
,因为http
协议的数据都是明文进行传输的,所以对于一些敏感信息的传输就很不安全,HTTPS
就是为了解决HTTP
的不安全而生的.