HTTP的简介
- HTTP是超文本传输协议
- 是Web应用的应用层协议
- HTTP是一个双向协议
- 由于HTTP服务器不会保存客户的任何信息,所以HTTP称为无状态协议
- HTTP基于传输层的TCP传输报文
HTTP与HTTPS的区别
- HTTP 的端?号是 80,HTTPS 的端?号是 443。
- HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
- HTTPS=HTTP+SSL/TLS
- HTTP 是超?本传输协议,信息是明?传输,存在安全?险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP ?络层之间加?了 SSL/TLS 安全协议,使得报?能够加密传输。
- HTTP 连接建?相对简单, TCP 三次握?之后便可进? HTTP 的报?传输。? HTTPS 在 TCP 三次握?之后,还需进? SSL/TLS 的握?过程,才可进?加密报?传输。
HTTP常见状态码
1xx
含义:提示信息,是协议处理中的一种中间状态,实际接触比较少
2xx(常见的3种)
含义:提示成功的状态码,表示客户端发送给服务器的请求被成功处理
- 【200 OK】:
服务器成功处理了客户端的请求 ,在用postman做接口测试时可以经常看到 - 【204 NoContent】:也是常?的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
- 【206 PartialContent】:表示
客户端进行了范围请求 ,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。
3xx(常见的5种)
含义:表示重定向,客户端请求的资源发送了变动,需要客户端?新的URL新发送请求获取资源。
- 【301 Moved Permanently】:
永久重定向 ,说明请求的资源已经不存在了,需改?新的 URL 再次访问。 - 【302 Found】:
临时重定向 ,说明请求的资源还在,但暂时需要?另?个 URL 来访问。
301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)
- 【303 See Other】:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;
302与303的区别:后者明确表示客户端应当采用GET方式获取资源
- 【304 Not Modified】:不具有跳转的含义,表示资源未修改,重定向已存在的缓冲?件,
也称缓存重定向,?于缓存控制 。 - 【307 Temporary Redirect】:
临时重定向,与303有着相同的含义 ,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况);
4xx(常见的4种)
含义:表示客户端发送的请求有错,服务器?法处理
- 【400 Bad Request】:表示客户端请求的报?有错误
- 【401 Unauthorized】:
没有权限,未经允许 ,需要通过HTTP认证,Token无效或过期。 - 【403 Forbidden】:服务器拒绝客户端访问,并不代表是客户端的请求有错
- 【404 Not Found】
表示在服务器上无法找到请求的资源 ,所以?法提供给客户端。
5xx(常见3种)
含义:表示服务器错误
- 【500 Internal Server Error】:
服务器发?了错误 ,具体什么错误,我们并不知道。 - 【502 Bad Gateway】:Web 服务器作为网关或代理服务器时,从上游服务器收到了无效响应。此类错误一般与服务器本身有关(与请求无关)。
- 【503 Service Unavailable】:
表示服务器当前繁忙 ,暂时?法响应服务器。
HTTP的演变【部分知识点】
HTTP0.9
- 发布于1991年
- 初衷是为了获取简单的HTML对象
- 只支持Get方法,没有定义任何首部
- 不支持媒体内容的MIME类型和协议版本
HTTP1.0
- 非持久连接(也就是短连接)
- 相对于HTTP0.9,增加了协议版本号,各种首部行,额外的方法以及多媒体对象的支持
- 是web页面增添了生动的多媒体内容以及表单,增加了交互能力
HTTP1.1
- 默认为流水方式持久连接( Keep-Alive,也叫短连接),改善了HTTP1.0的性能开销
- 支持更多的请求方法,扩展了一些首部
- 增加了响应状态码
- 改进了对缓存的支持
- 重点是校正了HTTP设计中的结构缺陷,明确了语义,引入了重要的性能优化措施,并删除了一些不良特征。
HTTP/1.1 相? HTTP/1.0 性能上的改进:
- 使? TCP ?连接的?式改善了 HTTP/1.0 短连接造成的性能开销。
- ?持管道(pipeline)?络传输,只要第?个请求发出去了,不必等其回来,就可以发第?个请求出去,可以 减少整体的响应时间。
HTTP/2
- 兼容HTTP1.1
- 对于常?的 HTTP 头部通过静态表和 Huffman 编码的?式,将体积压缩了近?半,?且针对后续的请求 头部,还可以建?动态表,将体积压缩近 90%,??提?了编码效率,同时节约了带宽资源。
- HTTP/2 实现了 Stream 并发,多个 Stream 只需复? 1 个 TCP 连接,节约了 TCP 和 TLS 握?时间,以 及减少了 TCP 慢启动阶段对流?的影响。不同的 Stream ID 才可以并发,即时乱序发送帧也没问题,但是同?个 Stream ?的帧必须严格有序。
- 服务器?持主动推送资源,??提升了消息的传输性能,服务器推送资源时,会先发送 PUSH_PROMISE 帧,告诉客户端接下来在哪个 Stream 发送资源,然后?偶数号 Stream 发送资源给客户端。
- HTTP/2 通过 Stream 的并发能?,解决了 HTTP/1 队头阻塞的问题
HTTP典型的请求方法
- GET请求:从服务器上读取URL所标识的信息,是最常见的方法。
- POST请求:给服务器添加信息,比如新增一个用户。
- DELETE:从服务器删除内容
HTTP拓展知识点
HTTP的Keep-Alive和TCP的Keepalive分别是什么意思?
- HTTP 的 Keep-Alive 也叫 HTTP 长连接,该功能是由「应用程序」实现的,可以使得用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,减少了 HTTP 短连接带来的多次 TCP 连接建立和释放的开销。
- TCP 的 Keepalive 也叫 TCP 保活机制,该功能是由「内核」实现的,当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接。
Get和Post方法都是安全和幂等的吗?
安全和幂等的概念:
- 在HTTP协议里,所谓的“安全”是指请求方法不会“破坏”服务器上的资源
- 幂等:意思是多次执行操作,结果都是相同的
通过以上很明显Get方法是安全且幂等的 ,因为get只是一个获取资源做“只读”的操作,无论操作多少次,服务器上的数据都是安全的,且每一次返回的结果都是相同。
Post因为是“提交数据”的操作,会修改服务器上的资源,所以是不安全的 ,且多次提交数据就会创建多个资源,所以Psot方法是不安全不幂等的
RTT:从客户端进程发送的连接请求,到收到服务器的连接确认,用时为一个往返时间(Round Trip Time,RTT)
|