HTTP协议相关知识 | 青训营

132 阅读6分钟

导语:我是一个刚接触go语言的小白,而且还是非科班的,在本次青训营之前都没有完整的学习过计算机网络,在完成抖音后端项目的开发任务的过程中,接触到了很多和HTTP协议有关的东西,特对HTTP协议进行了学习,并在此对所学内容进行简单的记录,如内容有误,还请大家多多海涵!

一、HTTP协议简述

对于每天离不开网络的我们来说,http其实非常常见,特别是当我们每次在浏览器的搜索栏输入网址的时候。

1.1 HTTP的定义

HTTP 协议一般指 HTTP(超文本传输协议),是应用层的协议之一。

超文本传输协议(英语:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议,是因特网上应用最为广泛的一种网络传输协议,所有的 WWW 文件都必须遵守这个标准。

HTTP 是为 Web 浏览器与 Web 服务器之间的通信而设计的,但也可以用于其他目的。

HTTP 是基于TCP/IP 通信协议来传递数据的(HTML 文件、图片文件、查询结果等)。

HHTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。

HTTPS:HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性

HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443

1.2 HTTP的发展

协议版本解决的核心问题解决方式
0.9HTML文件传输确立了客户端请求、服务端响应的通信流程
1.0不同类型文件传输设立头部字段
1.1创建/断开 TCP 连接开销大建立长连接进行复用
2.0并发数有限二进制分帧
3.0TCP 丢包阻塞采用 UDP 协议

主要特点:

  • HTTP 1.0: GET + 请求的文件路径,服务端收到请求后返回一个以 ASCII 字符流编码的 HTML 文档。
  • HTTP 1.0:支持最基本的 GET、POST 方法、引入 header、传输的数据不局限于纯文本
  • HTTP 1.1:增减缓存策略、支持长连接、支持断点续传,状态码 206、支持新的方法 PUT,DELETE 等,可用于 Restful API
  • HTTP 2.0:数据通过二进制协议传输、支持压缩 header,减少体积、多路复用,一次 TCP 连接中可以多个 HTTP 并行请求、服务端推送

现在主要使用 HTTP1.0 和 HTTP3.0协议。

二、HTTP工作原理

image.png

1.一个服务器的进程会不断的监听TCP的端口80

2.一旦服务器监听到了连接建立请求并和客户端建立好了TCP连接之后

3.浏览器就会开始向万维网服务器发出浏览界面的请求,也就是开始发送HTTP的请求报文来请求相关的文档

4.服务器接收到请求报文之后,就会把请求资源以文档的形式放入HTTP响应报文当中,返回给客户端

5.最后释放TCP连接,并且在客户机的界面上显示出来

2.1 用户浏览页面过程详解

用户浏览页面的方法:

1.输入URL

2.点击超链接

之后发生的具体过程:

1.浏览器分析URL

⒉.浏览器向DNS请求解析IP地址

3.DNS解析出IP地址

4.浏览器与服务器建立TCP连接

5.浏览器发出取文件命令

6.服务器响应

7.释放TCP连接

8.浏览器显示

浏览器可以先只下载文本资源,如果需要图片、音频、视频等资源,可以点击页面上响应的图标再重复上述1-8的过程对相应资源进行下载

2.2 HTTP协议特点

  • HTTP协议是无状态的、无记忆的。

在手机和电脑访问同一个网站时,服务器的响应是相同的。不太客服访问同一个网站,服务器的响应也是相同的

但是在实际工作中,一些万维网站点常常希望能够识别用户。例如淘宝购物车,所以淘宝服务器需要记住用户身份。因此诞生了cookie

cookie:Cookie是存储在用户主机中的文本文件,记录一段时间内某用户(使用识别码识别,如“123456”)的访问记录。由此可以提供个性化服务

  • HTTP采用TCP作为运输层协议,但HTTP协议本身是无连接的(通信双方在交换HTTP报文之前不需要先建立HTTP连接。

HTTP的连接方式:持久连接(keep-alive)、非持久连接(close)。持久连接又分为非流水线式的和流水线式的。

三、HTTP请求报文格式

HTTP报文是面向文本的,因此在报文中的每一个字段都是一些ASCIlI码串。

image.png

包含三个部分:

  • 请求行

也叫做开始行,用以区分是请求报文还是响应报文。

  • 首部行

说明浏览器、服务器和报文主体的一些信息

  • 实体主体

---例子---

GET /index.html HTTP/1.1
Host:www.test.edu.cn
Connection:Close
Cookie:123456

GET:请求读取/index.html标识的信息

index.html:URL

Host:请求的html是存放在www.test.edu.cn这个网址之上

Connection:连接方式

Close:非持续的连接

Cookie:用户的识别码是123456,说明用户之前访问过www.test.edu.cn才会有Cookie这个字段

四、HTTP响应报文格式

image.png

包含三个部分:

  • 状态行

也叫做开始行,用以区分是请求报文还是响应报文。

状态码由3个数字构成,一共有5种类型,具体来讲有33种状态码,状态码和短语的结合说明了响应报文的特点

  • 首部行

  • 实体主体

五、状态码

5.1 状态码分类

  • 1xx表示通知信息的,如请求收到了或正在处理。
  • 2xx表示成功,如接受或知道了。
  • 3xx表示重定向,如要完成请求还必须采取进一步的行动。
  • 4xx表示客户的差错,如请求中有错误的语法或不能完成。
  • 5xx表示服务器的差错,如服务器失效无法完成请求。

5.2 常见状态码和短语的组合:

状态码短语中文描述
100Continue继续。客户端应继续其请求
200OK请求成功。一般用于GET与POST请求
202Accepted表示接受,已经接受请求,但未处理完成
305Use Proxy使用代理。所请求的资源必须通过代理访问
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
404Not Found表示网页找不到了,可能是请求中有错误的语法
500Internal Server Error服务器内部错误,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应

六、学习心得

HTTP协议是非常重要的,我对于HTTP协议的学习还不够深入,之后还需要进一步的学习,不仅要学习HTTP协议的理论知识,还需要学习HTTP协议的编程。