UN4L1——HTTP工作原理

HTTP

HTTP(HyperText Transfer Protocol)超文本传输协议,是因特网上应用最为广泛的一种网络传输协议
最初设计HTTP的目的是为了提供一种发布和接收由文本文件组成的HTML页面的方法,
后来发展到除了文本数据外,还可以传输图片、音频、视频、压缩文件以及各种程序文件等。
HTTP主要用于超文本传输,因此相对FTP显得更简单一些,目前常见的HTTP标准是HTTP/1.1.

说人话:HTTP超文本传输协议就是一个在网络中上传下载文件的一套规则

  1. HTTP是什么

    HTTP超文本传输协议就是一个在网络中上传下载文件的一套规则

  2. HTTP工作原理(短连接)

    HTTP超文本传输协议的本质是TCP通信,连接—>请求—>响应—>断开

  3. HTTP协议的请求类型和响应状态码

    • 请求方法:GET和POST
    • 响应状态码:1xx消息、2xx成功、3xx重定向、4xx请求错误、5xx服务器错误
  4. 我们如何学习FTP

    C#中的类WebRequest​、HttpWebRequest​、HttpWebResponse​等
    Unity中的类UnityWebRequest​、WWW​、WWWFrom​等

    • 搭建HTTP服务器
    • 获取HTTP服务器上内容
    • 上传内容到HTTP服务器

HTTP的工作原理

HTTP的工作原理主要有以下三个特点

  1. HTTP是以TCP方式工作:连接—>请求—>响应—>断开(目前的HTTP/1.1支持长久连接)
  2. HTTP是无状态的:客户端要什么来什么,想要多少来多少,服务端不会因为你要过了而不给你
  3. HTTP使用元信息作为标头:主要数据前添加一部分额外信息(元信息),包含传送的对象属于哪种类型,采用的是哪种编码等等

划重点:HTTP的本质也是TCP通信
HTTP定义了Web客户端(一般指浏览器)如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP客户端首先与服务器建立TCP连接,然后客户端通过套接字发送HTTP请求,并通过套接字接收HTTP响应
由于HTTP采用TCP传输数据,因此不会丢包、不会乱序。

HTTP的工作原理主要有以下三个特点:

  1. HTTP是以TCP方式工作
  2. HTTP是无状态的
  3. HTTP使用元信息作为标头

我们依次来认识这三个特点

HTTP是以TCP方式工作

在HTTP/1.0中,客户端和服务器建立TCP连接后,发送一个请求到服务器,
服务器发送一个应答给客户端,然后立即断开TCP连接,他们的主要步骤为:

  1. 客户端与服务端建立TCP连接
  2. 客户端向服务端发出请求
  3. 若服务端接受请求,则回送响应码和所需的信息
  4. 客户端与服务端断开TCP连接

需要注意,HTTP/1.1 支持持久连接
即客户端和服务端建立连接后,可以发送请求和接收应答,然后迅速地发送另一个请求和接收另一个应答。
持久连接也使得在得到上一个请求的应答之前能够发送多个请求,这就是HTTP/1.1与HTTP/1.0的明显不同之处,
除此之外,HTTP/1.1可以发送的请求类型也比HTTP/1.0多。
目前市面上的Web服务器软件和浏览器软件基本都是支持HTTP/1.1版本的,目前使用的基本上都是HTTP/1.1版本

HTTP是无状态的

无状态指:
客户端发送一次请求后,服务端并没有存储关于该客户端的任何状态信息
即使客户端再次请求同一个对象,服务端仍会重新发送这个对象,不会在意之前是否已经向客户端发送过这个对象

说人话:HTTP通信就是客户端要什么来什么,想要多少来多少,服务端不会因为你要过了而不给你,不会记录你要过的状态

HTTP使用元信息作为标头

HTTP通过添加标头(header)的方式向服务端提供本次HTTP请求的相关信息,
即在主要数据前添加一部分额外信息,称为元信息(metainformation)
元信息里主要包含:传送的对象属于哪种类型,采用的是哪种编码等等

说人话:
HTTP的元信息标头,类似我们讲解Socket通信时用于区分消息类型、处理分包黏包时,在消息体前方加的自定义信息。
在HTTP协议中,它也定义了类似的规则,在头部包含了一些额外信息

HTTP协议的请求类型和响应状态码

  • 请求类型:

    • HTTP/1.0中:GET、POST、HEAD
    • HTTP/1.1中:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT
  • 响应状态码:1xx、2xx、3xx、4xx、5xx

常用的如下:

  • 请求类型:我们主要使用GET和POST方法来获取或者上传数据

  • 响应状态码:我们主要了解常用状态码代表的含义即可

    • 200:代表一切正常
    • 404:代表资源不存在或者找不到
    • 405:你使用了服务器没有处理的不支持的请求方法
    • 501:服务器处理你的请求的时候出现报错了

HTTP协议的请求类型

我们之后的学习中主要学习:GET、POST,用于获取和上传数据

请求方法名 说明
GET 请求获取特定的资源,比如请求一个Web页面或请求获取一个资源
POST 请求提交数据进行处理,比如请求上传一个文件
HEAD 请求获取和GET一致的内容,但是不会返回具体内容,只会返回消息头
PUT 向指定位置上传最新内容
DELETE 删除指定资源
OPTIONS 返回服务器针对特定资源支持的HTTP请求方法
TRACE 回显服务端收到的请求
CONNECT 预留给能够将连接改为管道方式的代理服务器

每一种请求方法,其实就是在HTTP请求的头部信息包含的内容不同而已,内容发送的格式为:

image​​image

HTTP协议的响应状态码

客户端向服务端发送请求后,服务端会返回HTTP响应,HTTP响应的一般格式为:

image

相对HTTP请求的格式,只有第一部分不同,由请求行变成了状态行

状态行中主要内容有:

  1. HTTP版本号

  2. 3位数字组成的状态码

    • 1xx消息:请求已被服务端接收,继续处理
    • 2xx成功:请求已成功被服务端理解并接收
    • 3xx重定向:需要后续操作才能完成这一请求
    • 4xx请求错误:请求含有语法错误或者无法被执行
    • 5xx服务器错误:服务端在处理某个正确请求时发生错误

HTTP的常用状态码:

编号
状态码 说明
200 OK 找到资源,一切正常
304 NOT MODIFIED 资源在上次请求后没有任何修改(常用语缓存机制)
401 UNAUTHORIZED 客户端无权访问该资源,通常需要输入用户名和密码
403 FORBIDDEN 客户端未授权,通常是401后输入了错误用户名密码
404 NOT FOUND 指定位置不存在申请的资源
405 Method Not Allowed 不支持请求的方法
501 Not Implemented 服务器不能识别请求或者没有实现指定的请求

如何学习HTTP

在实际学习过程中,我们并不需要利用HTTP原理来实现HTTP通信,HTTP工作原理相关知识点,主要做了解

C#中实现了HTTP通信需要用到的相关类:WebRequest​、HttpWebRequest​、HttpWebResponse​等
Unity当中也实现了HTTP通信需要用到的相关类:UnityWebRequest​、WWW​、WWWFrom​等
我们的主要学习的内容就是围绕这几个类来实现:

  1. 搭建HTTP服务器
  2. 获取HTTP服务器上内容
  3. 上传内容到HTTP服务器