1、Get 和 Post 请求的区别
Get | Post | |
---|---|---|
应用场景 | 对服务器资源不会产生影响 | 对服务器资源会产生影响 |
是否缓存 | 是 | 否,(除非有中间代理服务器实现缓存) |
发送报文的格式 | 报文中实体部分为空 | 报文中实体部分一般为向服务器发送的数据 |
安全性 | 不安全 | 安全 |
长度限制 | 有(HTTP 规范没有对 URL 长度限制,时浏览器、代理服务器的读取限制) | 无 |
参数类型 | 支持更多的数据类型 |
2、URL 组成部分
【】协议部分 // 域名部分 : 端口部分 / 虚拟目录部分 / 文件民部分 ?参数部分 # 锚部分
【】其中 「协议部分 // 域名部分」 是必须的内容
3、TCP 与 UDP
【】TCP是一个面向连接的传输层协议。是可靠的、基于字节流的;TCP还具有超时重传、拥塞控制的机制
【】UDP是一个无连接的传输层协议。是不可靠的、面向报文的
【】可靠性指 TCP 具有确认应答 ACK 和序列号来实现可靠传输
【】TCP 三次握手:
- 第一步:客户端发送SYN报文到服务端发起握手
- 第二步:服务端收到SYN报文之后回复SYN和ACK报文给客户端
- 第三步:客户端收到SYN和ACK,向服务端发送一个ACK报文
4、HTTP 1.0 和 HTTP 1.1 之间的区别
【】连接方面,1.0默认使用非持久连接,1.1默认使用持久连接,通过重复使用同一个TCP连接,减少多次建立连接带来的时延
【】资源请求方面,1.0存在浪费带宽的现象,不能支持断点续传功能等;1.1请求头引入 range 头域,允许只请求资源的某个部分
【】缓存方面,1.1 引入了更多的缓存控制策略
- HTTP1.0 只使用 header 中的Last-Modified、If-Modified-Since(协商缓存) 和 Expires(强缓存) 作为缓存失效的标准
- HTTP 1.1 中新增加了 E-tag、If-None-Match、Cache-Control 等缓存控制标头来控制缓存失效
【】http1.1 中新增了 host 字段,用来指定服务器的域名,可以将请求发往到同一台服务器上的不同网站
【】1.1 相对于 1.0 新增了很多请求方法
- HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法
- HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT
5、HTTP 1.1 和 HTTP 2.0 之间的区别
【】2.0是一个二进制协议,头信息和数据体都是二进制,但是1.1的头信息是文本(ASCII编码)。二进制统称为帧,可以分为头信息帧和数据帧。帧的概念是实现多路复用的基础
【】2.0实现了多路复用,在同一个TCP连接中客户端和服务端可以同时发送多个请求与回应,而且不需要按照顺序一一发送,避免“队头堵塞”问题
【】数据流,2.0使用数据流概念,即数据包
【】2.0实现了头信息压缩
【】服务器推送,2.0允许服务器未经请求,主动向客户端发送资源(静态资源)。使用服务器推送提前给客户端推送必要的资源,这样浏览器就不用发起后续请求去获取一些资源,相对减少一些延迟时间
6、HTTP 3.0
【】基于 UDP 协议的 QUIC 协议
【】出现的原因:TCP 需要三次握手进行连接;TCP 的队头阻塞问题仍然存在,多个请求跑在一个 TCP 连接中,当时出现丢包时,整个 TCP 都要开始等待重传,就会阻塞该 TCP 连接中的所有请求
【】QUIC 优点:
- 实现了快速握手功能
- 实现了类似 TCP 的可靠传输,在 UDP 基础上增加了一层,使用的 ACK 模式
- 集成了 TLS 加密功能
- 实现了多路复用,提供了拥塞控制机制
7、HTTP 和 HTTPS 协议的区别
【】HTTPS协议需要CA证书,费用较高;而HTTP协议不需要
【】HTTP协议是超文本传输协议,信息是明文传输的,HTTPS则是具有安全性的SSL加密传输协议
【】使用不同的连接方式,端口也不同,HTTP协议端口是80,HTTPS协议端口是443
【】HTTP协议连接很简单,是无状态的;HTTPS协议是有SSL和HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP更加安全
8、HTTP 协议的缺点
【】无状态:HTTP 是一个无状态的协议,HTTP 服务器不会保存关于客户的任何信息
【】明文传输: 协议中的报文使用的是文本形式,这就直接暴露给外界,不安全
【】不安全:明文传输可能被窃听,缺少身份认证也可能遭遇伪装,还有缺少报文完整性验证可能遭到篡改
【】队头阻塞:开启长连接时,只建立一个 TCP 连接,同一时刻只能处理一个请求,那么当请求耗时过长时,其他请求就只能阻塞状态
9、HTTP 状态码
【】1XX:接受的请求正在处理。 2XX:请求正常处理完毕。 3XX:需要进行附加操作完成求。 4XX:服务器无法处理请求。 5XX:服务器处理请求出错
101 | 在HTTP升级为WebSocket的时候,如果服务器同意变更,就会发送状态码 101 | 103 | 客户端应在服务端返回HTML前开始预加载资源 |
---|---|---|---|
200 | 请求被服务器端正常处理 | 204 | 请求已经在服务器端正常处理了,但是没有返回的内容 |
206 | 客户端进行了范围请求 | 301 | 永久重定向 |
302 | 临时重定向 | 303 | 请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源 |
304 | 浏览器缓存相关 | 307 | 临时重定向,不允许浏览器将原本为 POST 的请求重定向到 GET 请求上 |
400 | 请求报文中存在语法错误 | 401 | 发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息 |
403 | 请求资源的访问被服务器拒绝 | 404 | 服务器上无法找到请求的资源 |
405 | 客户端请求的方法虽然能被服务器识别,但是服务器禁止使用该方法 | 500 | 服务器端在执行请求时发生了错误 |
502 | 扮演网关或代理角色的服务器,从上游服务器中接收到的响应是无效的 | 503 | 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求 |
504 | 网关或者代理的服务器无法在规定的时间内获得想要的响应 |
10、常见的请求头
【】通用标头
- Date:可以出现在请求标头和响应标头中,表示的是格林威治标准时间
- Cache-Control:可以出现在请求标头和响应标头中,控制缓存的行为
- Connection:决定当前的事物完成后是否关闭网络连接。持久连接:keep-alive。 非持久连接:close
【】实体标头:描述消息正文内容的HTTP标头
Content-Encoding | 实体主体适应的编码方式 | Content-Language | 实体主体的自然语言 |
---|---|---|---|
Content-Length | 实体主体的大小(字节) | Content-Location | 替代对应资源的URL |
Content-Range | 实体主体的位置范围 | Content-Type | 实体主体的媒体类型 |
【】请求标头
User-Agent | HTTP客户端程序的信息 | Referer | 对请求中URL的原始获取方 |
---|---|---|---|
If-Modified-Since | 比较更新时间 | Host | 请求资源服务器 |
Accept | 用户代理可以处理的媒体类型 | Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 | Accept-Language | 优先的语言 |
【】响应标头
- Keep-Alive:设置超时时长和最大请求数,需要将 Connection 首部的值设置为 “keep-alive” 这个首部才有意义
- Set-Cookie:用于服务器向客户端发送 sessionID
- Location:令客户端重定向至指定URL