GET通过uri获取资源
, POST用于添加新的内容
, PUT用于修改某个内容
,DELETE删除某个内容
,
CONNECT用于代理进行传输,例如使用ssl
, OPTIONS询问可以执行哪些方法
, PATCH部分文档修改
, PROFIND查看属性
,
COPY拷贝
, MOVE移动
, LOCK加锁
, UNLOCK解锁
, TRACE远程诊断服务器
,
HEAD类似get但不返回数据,用于检索数据, 返回数据元信息
URI 是统一资源标识符, URL 是统一资源定位符, URN 是统一资源名称
URI = URL + URN (范围)
三部分
请求方法 URI 版本
请求头
请求正文(数据, 一般POST数据在这里, GET请求这里是空的)
字段 | 意思 |
---|---|
Cache-Control | no-cache:客户端或者此数据不允许缓存 no-store:缓存应该尽快从存储器删除文档所有痕迹 max-age:缓存持续时间 min-fresh:至少在未来n秒内缓存保持新鲜 |
Connection | close: 完成此次传输后断开连接 keepalive: 表示完成后不要断开,等待后续请求 Keep-Alive: 表示持续连接时间 |
Date | 消息发送的时间 |
字段 | 意思 |
---|---|
Accept | 表示客户端可以接收的资源类型, text/image/html等几种常用类型 |
Accept-Charset | 指定浏览器可以显示的字符集 |
Accept-Encoding | 浏览器支持的编码类型, gzip或compress是常见的 |
Accept-Language | 客户端首选语言 |
Authorization | 客户端在访问受密码保护的网页时验证自己的身份 |
Connection | 表示客户端是否可以持久连接, 设置为keep-alive |
Content-Length | 只用于POST请求, 并提供POST数据大小 |
Cookie | 请求时带上客户端Cookie, 就是在这里 |
Host | 指定信息的URL和端口 |
If-Modified-Since | 在客户端保存的信息超过了服务器预设的过期时间, 设置这个属性, 如果服务端资源未更新, 则返回304, 当客户端访问页面时,服务器会将页面最后修改时间通过 Last-Modified 标识由服务器发往客户端,客户端记录修改时间,再次请求本地存在的cache页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的最后修改时间戳发送回去,服务器端通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担 |
User-Agent | 识别浏览器客户端以及其他客户端 |
字段 | 意思 |
---|---|
Age | 当代理服务器用自己缓存的实体去响应请求时,用该头部表明该实体从产生到现在经过多长时间了 |
Server | 服务端是什么服务器软件, 及版本信息 |
Accepts-Ranges | WEB服务器表明自己是否接受获取其某个实体的一部分(比如文件的一部分)的请求 bytes:表示接受,none:表示不接受 |
Vary | WEB服务器用该头部的内容告诉 Cache 服务器,在什么条件下才能用本响应所返回的对象响应后续的请求 |
http传输的数据都是未加密的, 也就是明文的, 所以 http 协议传输数据非常不安全, 于是网景公司设计了 SSL 用于对 http 请求进行加密, 从而诞生了 https 所以简单说 https 就是 http + SSL
CA 是浏览器和服务端同时信任的证书颁发机构,浏览器事先会安装多个证书
http和https主要区别如下:
- https协议需要到ca申请证书
- http是超文本协议,数据明文传输, https则是具有安全性的ssl加密传输协议
- http和https使用完全不同的连接方式, 连接端口也不一样, http是80, https是443
- http连接很简单无状态, https是使用ssl加密的连接, 比http安全
并非绝对安全
客户端在使用 https 向服务端发送请求时,分为以下几个步骤
- 客户端使用https的url访问web服务器,要求与服务器建立ssl连接
- web服务器收到客户端请求后, 会将网站的证书(包含公钥)传送一份给客户端
- 客户端收到网站证书后会检查证书的颁发机构以及过期时间, 如果没有问题就随机产生一个秘钥
- 客户端利用公钥将会话秘钥加密, 并传送给服务端, 服务端利用自己的私钥解密出会话秘钥
- 之后服务器与客户端使用秘钥加密传输
-
多路复用
理解帧和流, 帧中会标记出属于哪个流,
-
二进制传输
- HTTP/2 中所有加强性能的核心点在于此。在之前的 HTTP 版本中,我们是通过文本的方式传输数据。在 HTTP/2 中引入了新的编码机制,所有传输的数据都会被分割,并采用二进制格式编码。
-
Header压缩
-
服务端主动push
http2.0虽然很好, 但有一个致命问题, 这不是http协议的问题, 而是tcp的问题:
因为http2.0采取多路复用, 万一出现丢包问题, tcp就会等待重传, 导致后面数据都被阻塞, 反而不如1.1了
有人提议修改tcp——不可能了..存在太久, 修改的话整个体系都会重写
现在 谷歌大大 基于UDP 研究一个新的协议, 叫QUIC
多路复用: QUIC 原生就实现了这个功能,并且传输的单个数据流可以保证有序交付且不会影响其他的数据流,这样的技术就解决了之前 TCP 存在的问题。