2

序言

在学习Http的时候,走了不少弯路,开始以为是简单的百度出来,看看别人的博客就行了,结果发现基本上都是第三手、第四手资源,里面讲的东西还是停留于几年前,这让我这个小白无从下手,最终直接去了MDN官网翻翻东西。

Http简介

Http又称超文本传输协议,是用于传输例如HTML的超媒体文档的应用层协议,主要用于浏览器与web服务器之间的通信。HTTP是无状态协议,即服务器不会在两次请求之间保留任何数据,但使用Cookies可以创建有状态的会话。。

Http协议流程图
客户端和服务端通过交换各自的消息(与数据流正好相反)进行交互。由像浏览器这样的客户端发出的消息叫做 requests,被服务端回应的消息叫做 responses。

TCP/IP 三次握手

HTTP 的传输协议是 TCP/IP 协议,该协议连接是需要进行三次握手的。
大白话
TCP/IP三次握手

那么为什么需要三次握手?这里引用知乎上的一个回答:

这个问题的本质是, 信道不可靠, 但是通信双发需要就某个问题达成一致. 而要解决这个问题, 无论你在消息中包含什么信息, 三次通信 是理论上的最小值. 所以三次握手不是TCP本身的要求, 而是为了满足"在不可靠信道上可靠地传输信息"这一需求所导致的. 请注意这里的本质需求,信道不可靠, 数据传输要可靠. 三次达到了, 那后面你想接着握手也好, 发数据也好, 跟进行可靠信息传输的需求就没关系了. 因此,如果信道是可靠的, 即无论什么时候发出消息, 对方一定能收到, 或者你不关心是否要保证对方收到你的消息, 那就能像UDP那样直接发送消息就可以了.

官方语言上的三次握手步骤:

  • 客户端发送 SYN 报文给服务器端,进入 SYN_SEND 状态。 —— 客户端向服务器端发送消息,请求它的回应。
  • 服务器收到 SYN 报文,回应一个 SYN ACK 报文,进入 SYN_RECV 状态。 —— 服务器端收到消息,采取回应行为,回复消息告诉客户端收到了。
  • 客户端收到服务器 SYN 报文,回应一个 ACK 报文,进入连接状态。 —— 客户端收到消息,这时客户端收到响应,表明发送的数据有回信了。但是服务器端发送了回应却还不知道客户端有没有收到。这时客户端需要再次发送消息告诉服务器我收到了。服务器收到消息后,客户端和服务器都知道对方已准备好通讯,然后就开始连接通讯了。

Http的request和response

  1. request
    请求为客户端发送给服务器的数据。具体有如下数据:

    • 请求方法:如 GET、 POST 这类请求方法。
    • 要获取的资源路径。
    • HTTP协议版本号。
    • Headers:传递附加信息。
    • body:如果想 POST 请求,就会传递 body 资源数据给服务器。

Http请求

  1. response
    响应为服务器收到客户端发送数据返回的数据,具体有如下数据:

    • HTTP协议版本号。
    • 状态码(status code)。
    • 状态消息(status message)。
    • Headers:传递附加信息。
    • body: 响应返回的资源存在body中。一般返回图片、HTML等资源。
      Http请求
  2. Headers 头文件
    头文件允许客户端和服务器通过请求和响应传递附加信息。
    下面列出一些常用的消息头及其用法:

    • Date 信息来源的日期时间
    • Content-Type 指定服务器文档的MIME类型,帮助用户代理去处理接收到的数据。
    • Content-Length 表示 body 的字节长度。
    • Host 服务器的域名。
    • User-Agent 可以用来识别发送请求的浏览器,是产品标记符和注释的清单。
    • Accept 用户代理期望的MIME类型列表
    • Accept-Encoding 列出用户代理支持的压缩方法
    • Accept-Ranges 期望范围。参数:byte、none。
    • Assess-Control-Allow-Origin 允许组织连接控制 。
    • Age 对象在代理缓存中的时间
    • Cache-Control 指定缓存机制
    • Connection 是否保持网络连接打开状态。参数:keep-alive、close。
    • ETag 特定版本资源标识符
    • Expires 过期时间日期
    • Server 服务器信息,如JSP、Apache等。
    • Referer 可用于识别用户访问位置

Https

  1. Http与Https的区别
    Https在传输的信息上是经过了加密的,而Http是明文传输。
  2. Https运行机制

    • 客户端发起 HTTPS 请求
    • 服务端获取数字证书CA —— 服务器向数字证书认证机构申请获取数字证书 CA 表明服务器是合法的、无害的。
    • 传送数字证书 —— 将数字证书传给客户端
    • 客户端解析证书 —— 客户端向数字证书认证机构查询,验证服务器合法性。
    • 客户端传输加密后的信息给服务端
    • 服务端解密信息
    • 服务端传输加密后的信息给客户端
    • 客户端解密信息

参考链接:

  1. Http|MDN https://developer.mozilla.org...
  2. 通俗大白话来理解TCP协议的三次握手和四次分手 https://github.com/jawil/blog...
  3. HTTP 协议学习笔记(扫盲文)https://www.jianshu.com/p/e0a...

Winer
458 声望202 粉丝

一入前端深似海


« 上一篇
web语义化
下一篇 »
vue踩坑