UN4L1——HTTP工作原理
UN4L1——HTTP工作原理
HTTP
HTTP(HyperText Transfer Protocol)超文本传输协议,是因特网上应用最为广泛的一种网络传输协议。
最初设计HTTP的目的是为了提供一种发布和接收由文本文件组成的HTML页面的方法,
后来发展到除了文本数据外,还可以传输图片、音频、视频、压缩文件以及各种程序文件等。
HTTP主要用于超文本传输,因此相对FTP显得更简单一些,目前常见的HTTP标准是HTTP/1.1.
说人话:HTTP超文本传输协议就是一个在网络中上传下载文件的一套规则
-
HTTP是什么
HTTP超文本传输协议就是一个在网络中上传下载文件的一套规则
-
HTTP工作原理(短连接)
HTTP超文本传输协议的本质是TCP通信,连接—>请求—>响应—>断开
-
HTTP协议的请求类型和响应状态码
- 请求方法:GET和POST
- 响应状态码:1xx消息、2xx成功、3xx重定向、4xx请求错误、5xx服务器错误
-
我们如何学习FTP
C#中的类
WebRequest
、HttpWebRequest
、HttpWebResponse
等
Unity中的类UnityWebRequest
、WWW
、WWWFrom
等- 搭建HTTP服务器
- 获取HTTP服务器上内容
- 上传内容到HTTP服务器
HTTP的工作原理
HTTP的工作原理主要有以下三个特点
- HTTP是以TCP方式工作:连接—>请求—>响应—>断开(目前的HTTP/1.1支持长久连接)
- HTTP是无状态的:客户端要什么来什么,想要多少来多少,服务端不会因为你要过了而不给你
- HTTP使用元信息作为标头:主要数据前添加一部分额外信息(元信息),包含传送的对象属于哪种类型,采用的是哪种编码等等
划重点:HTTP的本质也是TCP通信
HTTP定义了Web客户端(一般指浏览器)如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。
HTTP客户端首先与服务器建立TCP连接,然后客户端通过套接字发送HTTP请求,并通过套接字接收HTTP响应
由于HTTP采用TCP传输数据,因此不会丢包、不会乱序。
HTTP的工作原理主要有以下三个特点:
- HTTP是以TCP方式工作
- HTTP是无状态的
- HTTP使用元信息作为标头
我们依次来认识这三个特点
HTTP是以TCP方式工作
在HTTP/1.0中,客户端和服务器建立TCP连接后,发送一个请求到服务器,
服务器发送一个应答给客户端,然后立即断开TCP连接,他们的主要步骤为:
- 客户端与服务端建立TCP连接
- 客户端向服务端发出请求
- 若服务端接受请求,则回送响应码和所需的信息
- 客户端与服务端断开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请求的头部信息包含的内容不同而已,内容发送的格式为:
HTTP协议的响应状态码
客户端向服务端发送请求后,服务端会返回HTTP响应,HTTP响应的一般格式为:
相对HTTP请求的格式,只有第一部分不同,由请求行变成了状态行
状态行中主要内容有:
-
HTTP版本号
-
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
等
我们的主要学习的内容就是围绕这几个类来实现:
- 搭建HTTP服务器
- 获取HTTP服务器上内容
- 上传内容到HTTP服务器