目录
  1. 1. HTTP 协议
  2. 2. HTTP 主要特点
  3. 3. HTTP 报文
    1. 3.1. 请求报文
    2. 3.2. 响应报文
  4. 4. HTTP 方法
    1. 4.1. GET 和 POST 的区别
  5. 5. HTTP 状态码
    1. 5.1. 状态码分类
    2. 5.2. 常见状态码
  6. 6. HTTP 持久连接
  7. 7. HTTP 管线化
网页开发 HTTP 协议入门 - 前端随笔

HTTP 协议

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是万维网的数据通信的基础。

HTTP 是一个客户端(用户)和服务端(网站)之间请求和应答的标准,通常使用 TCP 协议。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个 HTTP 请求到服务器上指定端口(默认端口为 80)。

通常,由 HTTP 客户端发起一个请求,创建一个到服务器指定端口的 TCP 连接。HTTP 服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如”HTTP/1.1 200 OK”,以及返回的内容,如请求的文件、错误消息、或者其它信息。

HTTP协议

HTTP 主要特点

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
  • 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由 Content-Type(Content-Type 是 HTTP 包中用来表示内容类型的标识)加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  • 无状态:HTTP 协议是无状态协议。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP 报文

HTTP 报文由 请求报文响应报文 组成。

请求报文

请求报文有如下四个组成部分:

  • 请求行:包含请求类型、请求地址、请求协议
  • 请求头:由键/值对组成,典型请求头如下
    • Host:请求的主机名,允许多个域名同处一个 IP 地址,即虚拟主机。
    • User-Agent:请求的浏览器类型。
    • Accept:客户端可识别的内容类型列表。
  • 空行:请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
  • 请求体:请求数据不在 GET 方法中使用,而是在 POST 方法中使用。与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length。
HTTP 请求头

响应报文

响应报文有如下四个组成部分:

  • 状态行:包含协议、状态码、状态码提示;
  • 响应头:由键/值对组成,典型响应头有
    • Date: 响应日期时间;
    • Content-Type: 响应内容类型;
    • Content-Length: 响应内容长度;
    • Last-Modified: 源头服务器认定的资源做出修改的日期及时间。
  • 空行:同上;
  • 响应体:响应内容;
HTTP 响应头

HTTP 方法

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

  • GET - 获取资源。
  • POST - 传输资源。
  • HEAD - 获取报文首部。
  • PUT - 更新资源。
  • DELETE - 删除资源。
  • CONNECT - HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
  • OPTIONS - 允许客户端查看服务器的性能。
  • TRACE - 回显服务器收到的请求,主要用于测试或诊断。
  • PATCH - 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

GET 和 POST 的区别

# GET POST
1 参数长度有限制,过长会被截断 无限制
2 请求会被浏览器主动缓存 不会主动缓存,可手动设置
3 参数通过 URL 传递,一般不用来传递敏感信息 参数放在请求体中
4 同上,请求参数会被保留来浏览器历史记录中 不会
5 浏览器回退时无害,不会二次提交 浏览器回退会再次提交请求
6 只支持 URL 编码 支持多种编码格式
7 参数类型只接收 ASCII 字符 无限制

HTTP 状态码

状态码分类

分类 描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

常见状态码

# 提示 描述
200 OK 请求正常处理完毕
204 No Content 请求成功处理,没有实体的主体返回
301 Permanently 永久重定向
302 Found 临时重定向
304 Not Modified 客户端有缓存可用
400 Bad Request 客户端错误,表示请求报文存在语法错误或参数错误
403 Forbidden 服务器接收到请求,但请求被拒绝
404 Not Found 无法找到请求资源
500 Internal Server Error 服务器故障
503 Service Unavailable 服务器超负载或停机维护

HTTP 持久连接

在 HTTP 主要特点之一就是无连接,请求完成后即断开连接,这种方式可以节省传输时间。

但在 HTTP/1.1 开始支持持久连接,使用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。这样请求时连接就不会中断,而是保持连接,当客户端发送另一个请求时,它会使用同一个连接。这一直继续到客户端或服务器端认为会话已经结束,其中一方中断连接。

在 HTTP 1.1 中 所有的连接默认都是持续连接,除非特殊声明不支持。

报文表现为Connection: keep-alive


HTTP 管线化

HTTP 管线化 是将多个 HTTP 请求整批提交的技术,而在发送过程中不需先等待服务器的回应。

HTTP 管线化可以克服同域并行请求限制带来的阻塞,它是建立在持久连接之上,是把所有请求一并发给服务器,但是服务器需要按照顺序一个一个响应,而不是等到一个响应回来才能发下一个请求,这样就节省了很多请求到服务器的时间。不过,HTTP 管线化仍旧有阻塞的问题,若上一响应迟迟不回,后面的响应都会被阻塞到。

HTTP 管线化

简单来讲就是将请求-响应从这样:

请求 1->响应 1->请求 2->响应 2->请求 3->响应 3

变成这样:

请求 1->请求 2->请求 3->响应 1->响应 2->响应 3


参考文档:

文章作者: Vincent F0ng
文章链接: https://vincef0ng.cn/post/http-finance/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Vincent F0ng
请喝奶茶
  • 微信
  • 支付宝
领红包

评论(支持Markdown)