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 服务器