HTTP 协议
HTTP协议是应用层协议,是在Web浏览器和Web服务器之间使用的。
HTTP协议是基于TCP协议出现的,对TCP协议来说,TCP协议是一条双向的通讯通道,HTTP在TCP的基础上,规定了Request-Response的模式。这个模式决定了通讯必定是由浏览器端发起的。
HTTP协议格式
HTTP协议大概可以划分如下部分。
HTTP Method(方法)
先说一下 Request 里面的 request line 里面的 method。
GET、 POST、 HEAD、 PUT、 DELETE、 CONNECT、 OPTIONS、 TRACE
浏览器通过地址栏访问页面都是用GET方法。
表单提交用POST方法。
HEAD 则是跟 GET 类似,只返回响应头。
PUT 和 DELETE分别表示添加资源和删除资源,但是实际上这只是语义上的一种约定,并没有强制约束。
CONNECT 现在多用于 HTTPS 和 WebSocket。
OPTIONS和 TRACE一般用于调试,多数线上服务器都不支持。
HTTP Status code 状态码
常见的状态码
- 1xx 临时回应,表示客户端请继续。
- 2xx 请求成功
200 请求成功 - 3xx 请求目标有变化,希望客户端进一步处理。
301 & 302 : 永久性与临时性跳转
304: 客户端缓存没有更新 - 4xx 客户端请求错误
304:没有权限
404:表示请求的页面不存在。
405:请求方式错误,(比如应该是GET请求,用了POST请求)
418:这是个彩蛋,来自一个愚人节玩笑 - 5xx 服务器端请求错误
500:服务端错误
503:服务端暂时性错误,可以一会儿再试试。
对于前端来说 1xx 系列的状态码是非常陌生的,因为 1xx 的状态被浏览器 HTTP 库 直接处理掉了,不会让上层应用知晓。
HTTP Head (HTTP请求头)
HTTP头可以看作一个键值对。原则上,HTTP头也是一种数据。在HTTP规范中,规定了一些特殊的HTTP头。 看几个常见的 Request Header 请求头
- Accept 浏览器端接受的格式
- Accept-Encoding 浏览器接受的编码方式
- Accept-Language 浏览器接受的语言
- Cache-Control 控制缓存的时效
- Connection 连接方式
- Host HTTP访问的域名
- User-Agent 客户端标识
- Cookie 客户端存储的 Cookie 字符串
看几个常见的 Response Header 响应头
- Cache-Control 控制缓存
- Connection 连接类型
- Connection-Encoding 内容编码方式通常是gizp
- Connection-Type 内容类型 比如 text/html
- Connection-Length 内容长度
- Date 当前的服务器日期
- Server 服务端软件类型
- Keep-Alive 保持连接不断时需要的一些信息,
- Set-Cookie 设置 cookie
- Last-Modified 页面上次修改时间
HTTP Request Body
HTTP的请求 body 主要用于提交表单场景。HTTP请求的 body是比较自由的,只要浏览器端发送的body服务器端认可就可以了。一些常见的body格式是:
- application/json
- application/x-www-form-urlencoded
- multipart/form-data
- text/xml
我们使用 HTML 的 form 标签提交产生的 HTML 请求,默认会产生 application/x-www-form-urlencoded的数据格式。 当有文件上传时会使用 multipart/form-data。
HTTPS
在 HTTP协议的基础上,HTTPS和 HTTP2规定了更复杂的内容,但是它基本保持了HTTP的设计思想,即:使用的 Request-Response 模式。
HTTPS是使用加密通道来传输 HTTP的内容。但是 HTTPS首先与服务端建立一条 TLS 加密通道。TLS 的构建于 TCP协议之上,它实际上是对传输的内容做一次加密,所以从传输内容上看,HTTPS跟HTTP没有任何区别。
HHTP 2
HTTP2 是 HTTP 1.1的升级版本。可以看详情链接 datatracker.ietf.org/doc/html/rf… HTTP2 最大改进有两点,一是支持服务端推送,二是支持TCP连接复用。 TCP连接复用,使用同一个 TCP 连接来传输多个 HTTP 请求,避免了 TCP 连接建立时的三次握手开销,和初建立 TCP 连接时传输窗口小的问题。
问题
http 的 get 和 post 区别?
- 安全性:GET 请求的传输参数都是在 URL 地址里面的,可以直接看到,而POST 方法参数则是被包含在请求体中,相对更加安全。
- 参数长度:GET方法的参数一般放在URL中,而URL长度是有限制的(通常为2048个字符),如果传输的参数过多,就会导致URL过长,容易引起浏览器或服务器的限制;而POST方法的参数放在请求体中,因此可以传输更多的参数。
- 缓存:GET方法请求可以被浏览器缓存,因此多个相同的请求可以被重复用,提高效率;POST方法的请求则不会被缓存。
https 的握手过程?
xxx不想写了
http2 的特点?
HTTP/2是HTTP协议的第二个版本,它带来了以下几个主要特点:
- 多路复用(Multiplexing):HTTP/2允许在同一连接上同时发送多个请求和响应,而不必像HTTP/1.x那样建立多个TCP连接。这意味着客户端和服务器之间的并行请求和响应可以更加高效,从而提高了页面的加载速度和性能。
- 二进制协议:HTTP/2使用二进制格式传输数据,而不是HTTP/1.x中的文本格式,它能够更快地解析和传输数据,同时也更容易进行压缩和解压缩。
- 首部压缩(Header Compression):HTTP/2使用HPACK算法对首部信息进行压缩,从而减少了在网络上传输的数据量,节省了带宽和响应时间。
- 服务器推送(Server Push):HTTP/2允许服务器在客户端请求之前就将相关资源发送给客户端,从而减少了客户端的请求次数和等待时间,提高了页面的加载速度。
- 流量控制(Flow Control):HTTP/2可以对每个流进行流量控制,从而避免了因为一个流的阻塞而导致其他流被阻塞的情况。
- 安全性:HTTP/2默认使用TLS加密,从而提高了通信的安全性。
综上所述,HTTP/2通过多路复用、二进制协议、首部压缩、服务器推送、流量控制等特性,优化了HTTP/1.x中存在的一些问题,提高了页面的加载速度和性能,同时也提高了通信的安全性。