HTTP协议

200 阅读6分钟

HTTP 协议

HTTP协议是应用层协议,是在Web浏览器和Web服务器之间使用的。
HTTP协议是基于TCP协议出现的,对TCP协议来说,TCP协议是一条双向的通讯通道,HTTP在TCP的基础上,规定了Request-Response的模式。这个模式决定了通讯必定是由浏览器端发起的。

HTTP协议格式

HTTP协议大概可以划分如下部分。

sdf.jpg

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 状态码

常见的状态码

  1. 1xx 临时回应,表示客户端请继续。
  2. 2xx 请求成功
    200 请求成功
  3. 3xx 请求目标有变化,希望客户端进一步处理。
    301 & 302 : 永久性与临时性跳转
    304: 客户端缓存没有更新
  4. 4xx 客户端请求错误
    304:没有权限
    404:表示请求的页面不存在。
    405:请求方式错误,(比如应该是GET请求,用了POST请求)
    418:这是个彩蛋,来自一个愚人节玩笑
  5. 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 区别?

  1. 安全性:GET 请求的传输参数都是在 URL 地址里面的,可以直接看到,而POST 方法参数则是被包含在请求体中,相对更加安全。
  2. 参数长度:GET方法的参数一般放在URL中,而URL长度是有限制的(通常为2048个字符),如果传输的参数过多,就会导致URL过长,容易引起浏览器或服务器的限制;而POST方法的参数放在请求体中,因此可以传输更多的参数。
  3. 缓存:GET方法请求可以被浏览器缓存,因此多个相同的请求可以被重复用,提高效率;POST方法的请求则不会被缓存。

https 的握手过程?

xxx不想写了

http2 的特点?

HTTP/2是HTTP协议的第二个版本,它带来了以下几个主要特点:

  1. 多路复用(Multiplexing):HTTP/2允许在同一连接上同时发送多个请求和响应,而不必像HTTP/1.x那样建立多个TCP连接。这意味着客户端和服务器之间的并行请求和响应可以更加高效,从而提高了页面的加载速度和性能。
  2. 二进制协议:HTTP/2使用二进制格式传输数据,而不是HTTP/1.x中的文本格式,它能够更快地解析和传输数据,同时也更容易进行压缩和解压缩。
  3. 首部压缩(Header Compression):HTTP/2使用HPACK算法对首部信息进行压缩,从而减少了在网络上传输的数据量,节省了带宽和响应时间。
  4. 服务器推送(Server Push):HTTP/2允许服务器在客户端请求之前就将相关资源发送给客户端,从而减少了客户端的请求次数和等待时间,提高了页面的加载速度。
  5. 流量控制(Flow Control):HTTP/2可以对每个流进行流量控制,从而避免了因为一个流的阻塞而导致其他流被阻塞的情况。
  6. 安全性:HTTP/2默认使用TLS加密,从而提高了通信的安全性。

综上所述,HTTP/2通过多路复用、二进制协议、首部压缩、服务器推送、流量控制等特性,优化了HTTP/1.x中存在的一些问题,提高了页面的加载速度和性能,同时也提高了通信的安全性。