一、Http协议详解,http请求方式,http状态码
- Http协议详解:
全称Hyper Text Transfer Protocol,即超文本传输协议,是互联网上应用最为广泛的一种网络传输协议。
是一个无状态的应用层协议,即不会保存客户端与服务器之间的历史记录,每个请求都是独立的。其主要特点如下:
- 基于请求响应模式
- 基于文本传输
- 支持多媒体传输
- 无连接
- http请求方式:
get、post,常用的
- http状态码:
1xx(信息性状态码):表示请求已经被接收,继续处理。
2xx(成功状态码):表示请求已经被成功接收、理解和处理。
3xx(重定向状态码):表示需要进行额外操作才能完成请求。
4xx(客户端错误状态码):表示客户端发送的请求有误,服务器无法处理。
5xx(服务器错误状态码):表示服务器在处理请求时发生了错误。
常用的状态码:
200,OK,表示请求成功;
400,Bad Request,表示客户端发送的请求有语法错误;
401,Unauthorized,表示请求需要用户进行身份验证;
403,Forbidden,表示服务器拒绝请求,没有权限访问;
404,Not Found,表示请求的资源不存在;
500,Internal Server Error,表示服务器内部错误;
502,Bad Gateway,表示服务器作为网关或代理,从上游服务器接收到无效的响应;
503,Service Unavailable,表示服务器当前无法处理请求,一般是由于过载或者维护导致;
其他常用状态码:
100,Continue,表示服务器已经接收到请求的头部,并且客户端应该继续发送请求的主体部分;
101,Switching Protocols,表示服务器已经理解了客户端的请求,并且将切换到不用的协议来完成请求;
201,Created,表示请求已成功,并且服务器创建了新的资源;
202,Accepted,表示服务器已接受请求,单尚未处理完成;
204,No Content,表示请求已成功,但服务器没有返回任何内容;
301,Moved Permanently,表示请求的资源已临时移动到新的URL;
302,Found,表示请求的资源已临时移动到新的URL;
304,Not Modified,表示请求的资源未被修改,可以直接使用缓存的版本;
二、Http常见请求方式
- GET 方法,请求一个指定资源的表示形式. 使用GET的请求应该只被用于获取数据;
- POST 方法,用于将实体提交到指定的资源,通常导致状态或服务器上的副作用的更改;
- HEAD 方法,请求一个与GET请求的响应相同的响应,只返回请求头,没有响应体,多数由 JavaScript 发起;
- PUT 方法,用请求有效载荷替换目标资源的所有当前表示;
- DELETE 方法,删除指定的资源;
- CONNECT 方法,建立一个到由目标资源标识的服务器的隧道,多用于 HTTPS 和 WebSocket ;
- OPTIONS 方法,预检,用于描述目标资源的通信选项。通过该请求来知道服务端是否允许跨域请求;
- TRACE 方法,沿着到目标资源的路径执行一个消息环回测试,多数线上服务都不支持;
- PATCH 方法,用于对资源应用部分修改。
三、Http协议与TCP协议的区别和联系
- OSI网络分层(7层)
全称Open System Interconnection 开放系统互联
TCP、UDP都是传输层协议;
- TCP建立连接需三次握手,断开连接需四次挥手
建立连接三次握手如下图:
断开连接四次挥手如下图:
- Http
http是建立在TCP上的应用层协议,超文本传输协议。
http最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
特点:
- 无状态:协议对客户端没有状态存储,对事物处理没有记忆能力,比如访问一下哎完整需要返回进行登录操作;
- 无连接:Http/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。
- 基于请求和响应:由客户端发起请求,服务端响应;
- 简单快速、灵活;
- 通信使用明文,请求和响应不会对通信方进行确认、无法保护数据的完整性。
- Http与TCP区别
- Http对应于应用层,TCP协议对应于传输层;
- Http协议是在TCP协议之上建立的,HTTP在发起请求时通过TCP协议建立起连接服务器的通道,请求结束后,立即断开TCP连接;
- Http是无状态的短连接,TCP是有状态的长连接;
- TCP是传输层协议,定义的是数据传输和连接方式的规范,HTTP是应用层协议,定义的是传输数据的内容的规范。
四、Http发展历史
http1.0 :客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接;
http1.1 :可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后就可以再发送一个新的请求;
http2.0 :支持多路复用,一个 TCP 可同时传输多个 http 请求,头部数据还做了压缩;
http3.0 :使用了 QUIC,开启多个 TCP 连接,在出现丢包的情况下,只有丢包的 TCP 等待重传,剩余的 TCP 连接还可以正常传输数据;
五、Http/2对比Http/1.1,特性是什么?是如何解决对头阻塞与压缩头部的?
Http/1.1是1997年发布。为了性能考虑,会引入雪碧图,将小图内联,使用多个域名等方式,但是还是有以下的关键点无法优化;
- Http/1.1协议的性能缺陷:
高延迟:页面访问速度下降
明文传输:不安全
无状态:头部巨大切重复
不支持服务器推送
Http/2是2015年发布。有如下特点:
- Http/2特点:
二进制传输
Header 压缩(HPACK)
多路复用
服务端 Push
提高安全性
- Http/2遗留问题:
存在队头阻塞问题,比如丢包
慢启动,建立连接时间长
六、说一下Http/3新特性,为什么选择UDP协议?
Http3是超文本传输协议的最新主要版本,其显著特点是放弃了传统的TCP协议作为传输层协议,转而采用基于UDP的QUIC协议,以下是其关键特性:
- 低延迟
- 多路复用
- 连接迁移
- 更快的错误恢复
- 安全设计
- 拥塞控制优化
为什么选择UDP协议?
说白了,其实是为了解决Http/1和Http/2在性能和效率上的问题。
引入UDP主要原因有两个:一是为了提高性能,二是为了实现更好的网络适应性。
在Http/3之前,Http传输协议使用的是TCP作为传输层协议。然后随着互联网的发展,TCP的性能瓶颈逐渐显现出来;TCP的性能瓶颈主要在于其握手过程和重传机制,而UDP的底层协议,就是大名鼎鼎的QUIC协议,一个运行在传输层的协议。QUIC通过改进这些机制,实现了更高的性能。此外,UDP在网络适应性上也有优势,因为他可以更好的处理网络波动和丢包问题。
QUIC协议之所以能提供更好的性能,其中一个重要的原因就是它实现了快速握手和连接迁移。
- 快速握手
在TCP中,建立连接需要三次握手;相比之下QUIC协议中需要一次握手就可以建立连接。
在QUIC中,客户端发送一个包含客户端初始信息的包给服务器,服务器收到后,会立即回复一个包含服务器初始信息的包。这样,QUIC连接就建立成功了。
- 连接迁移
在TCP中,如果客户端想要从一个服务器切换到另一个服务器,就需要先断开原来的连接,然后再重新建立一个新的连接。这个过程被称为“连接迁移”。
在QUIC中,客户端可以无缝的从一个服务器切换到另一个服务器,而不需要断开原来的连接。这个过程被称为“连接迁移”。QUIC的连接迁移是通过在客户端和服务器之间维护一个全局的状态来实现的。当客户端想要切换到另一个服务器时,它会向新的服务器发送一个包含当前连接状态信息的包,新的服务器收到后,就可以立即开始处理客户端的请求。
七、有关HTTP缓存的首部字段说一下
常见的HTTP缓存首部字段有:
Expires:响应头,代表该资源的过期时间
Cache-Control:请求/响应头,缓存控制字段,精确控制缓存策略
If-Modified-Since:请求头,资源最近修改时间,由浏览器告诉服务器
Last-Modified:响应头,资源最近修改时间,由服务器告诉浏览器
Etag:响应头,资源标识,由服务器告诉浏览器
If-None-Match:请求头,缓存资源标识,由浏览器告诉服务器