小白的初识http协议之旅|青训营

108 阅读6分钟

作为一名前端小白学习http协议的笔记和感想分享! 因为没有什么这方面的基础前置知识,所以记录下笔记全当了解一下了......为以后的系统学习打下基础!

一、初识HTTP

1.http协议是什么

从搜索栏中输入字符串,到浏览器向服务器发送请求,读取后台发来的信息,再到前端渲染页面,这些过程是和http协议无法分开的。

(1)http全称是’超文本传输协议‘(可能类似于串口收发,I2C协议这样?)

理解一下:’超文本‘即指包含了图片、连接、视频等的扩大范围了的文本。’传输‘指''发送请求''和响应请求时的信息交互,’协议‘指通信时收发信息的行为规范。

(2)http协议的特点:

  • 主要内容:发送请求、相应

  • 简单可拓展

  • 无状态,每一个请求都是孤立的

2.发展历程

从最原始的只有html相应的0.9版本,到协议拓展化后更加丰富的

1.1版本(1.1版本是使用最久的版本),再到性能更加优异的2版本,目前3版本也正处在草案研究阶段。

http1.1在目前也以帧为最小单位通信有应用,但大部分大厂以及切换到了2版本。

http2是如何实现更快更稳定的通信的呢?以下为它的一些新特性

  • 传输方式:1.1版本是传输文本,而2则是以帧为单位传输,每个帧都至少包含一个帧头,并以二进制传输(二进制传输效率要高于文本),形成一条条字节流 。这些帧是交错发送的,不需要按照逻辑顺序来传输,因为帧中的标记信息可以让接收方在接收无序的字节流后重新组织起来。

  • 永久连接:连接只需建立一次,便可以永久使用,具有很强的复用性。

  • 智能流控:例如一个长视频暂停后,服务器资源便不再会优先缓存之后的视频,而是会将资源分配到其他地方。

  • 服务器推送:例如服务器返回html时,发现其中引入的其他文件在服务器上,那么便会智能推送这些引用的文件,提高请求效率。

3.请求method

常见的值有GET,POST,PUT,DELETE,OPTIONS等

  • 不会修改服务器的数据的方法称为安全的方法,如get等。

  • 所有安全的方法都是幂等的(执行一次与多次,执行效果和服务器的状态都是一样的)。

4.状态码

是一些指示信息,是以1-5开头的三位码。例如:

  • 200表示客户端请求成功,302表示临时跳转
@RESTful API

客户端借助请求,可以对服务器资源进行操作,实现’表现层状态转化‘。

5.请求头

  1. 常用请求头:
  • Accept:表示接受资源的类型

  • Content-Type:说明发送实体内容的类型,如JSON等

  • Expires,Max-age,If-None-Match:与缓存相关的请求头

  • Cookie:使请求带上一些状态,如用户是否登录等(虽然HTTP是无状态的,但许多时候前端开发者希望获取信息能带有一些状态)

    2.常用响应头:

  • Content-Type:服务器返回实体内容的类型

  • Cache-Control:指定缓存机制

  • Set-Cookie:设置一些Cookie并传给客户端

  • Server:服务器的一些相关信息

    @协议分析:缓存协议

    缓存分为强缓存和协商缓存。强缓存指资源就在本地,可以直接用;协商缓存指客户端和服务器协商后确定本地缓存的资源是否可用。这两种缓存方式都有自己的协议头字段,来确认一些和缓存相关的信息。

在处理缓存时,这些请求之间是要有先后顺序的:先强缓存,再协商缓存。(我觉得有些类似于cpu和缓存之间的信息收发吧?)image-20230817123931293转存失败,建议直接上传图片文件

6.https

https是将数据在传输过程中进行加密传输。加密分为对称加密和非对称加密。https应用的则是两种方式混用,以提高安全性。加密传输前要先验证浏览器和服务器的证书是否合法,才会生成随机数进行加密和传输。

二、http协议的应用场景

根据老师的指引,进入进入头条网站,在Network中查看请求。

1.状态码200

在css请求中看到了状态码200。

即便抓到了200的状态码,查看协议信息,可以看到相应是从本地缓存拿来的,而非服务器。这是因为该网站设置的缓存策略是’强缓存‘。

2.ontent-type

能注意到content-type是一个css文件。

3.静态资源部署方案

注意到网页的静态资源部署方案:缓存(最优先的)+CDN(Content Dilivery Network,是一种遵从就近原则的网络分发策略,能从近的节点将资源发送给客户端)+文件名hash。

但是缓存是有缺点的:设置的缓存期限为1年,那么一年内若配置网站的文件发送变化,用户将无法拿到最新网站内容。解决的方式是:给文件名添加哈希,当文件内容改变时,文件名会发送变化,以区分缓存文件是否为最新。这就是文件名hash.

三、总结

曾经在学校学习fpga时,了解了I2C协议和串口通信协议。在学习http协议时充分感受到了这三者的共通之处。

通过查阅一些资料,我了解到网络协议也是分层的,从底层至顶层分为:物理层、链路层、网络层、传输层、应用层。这和计算机这门学科本身也是极为相似的,计算机本身也是一个分为不同层面的学科,从硬件到软件、从物理层面到数学层面,范围非常广阔,因此在大学阶段学习的知识都不用担心无用武之地。从专业课到课外阅读,了解的越多,学习时便更会融会贯通,一灵百灵,这是我在自学前端时深刻感受到的。因此不必技术焦虑,沉浸到学习的过程中去,人类智慧的结晶就展现在我们眼前。