之前提到我最近完成了一个 API Integration 相关的模块,功能正式上线了,也到了总结知识的时候啦~
因为涉及到的知识点比较多,我会分几篇文章先讲理论部分,然后再总结一下我需要完成的需求,以及实现过程中踩过的一些坑。
今天我们先来聊聊 HTTP。
HTTP 是 HyperText Transfer Protocol 的简称,中文名是「超文本传输协议」。
顾名思义,它就是一个协议。
协议的双方(假设是两台电脑)都需要用 HTTP 规定的方式来说话,这样两边就能听懂对方在说什么了(就好比你跟别人沟通要讲同一种语言一样)。
HTTP 是专门为互联网系统之间的沟通而设计的一种协议,属于 Application Layer (应用层)协议,5 层网络模型中的最上层。
5 层网络模型本文不展开讲解。
HTTP 是一种 client-server protocol,采用的是 client-server model(客户端/服务器架构,又名 C/S 架构、主从式架构)。
PS: Email 和互联网(World Wide Web)采用的也是 client-server model。
Client-server model 是一种 distributed application structure(分布式应用架构),属于 Distributed Computing 分布式计算这个领域。
Parallel Computing System(并行计算系统)- 多个处理器,共享内存;
Distributed Computing System(分布式计算系统)- 多个处理器,通过通信网络连接。
可以简单的理解为,并行计算是 1 台电脑内部的多线程处理,分布式计算是多台电脑连在一起完成多线程处理。
如果前面的部分没有理解,没关系;只要记住 HTTP 这个协议里面有两个重要的成员:
Client 和 Server 通常来说是通过网络进行信息交换的,Client 和 Server 都是应用程序,它们可以位于不同的电脑里,也可以住在同一台电脑里面。
Client 的作用是主动找 Server 聊天,获取资源。
Server 的作用是向 Client 提供它所想要的信息/资源,但从来不会主动找 Client 说话。
那么问题来了,Client 和 Server 之间是怎么沟通的呢?
答:它们要通过 HTTP Message 来交流。
Message 分两种:request message(请求)和 response message(响应)。
区别在于:Client 发出去的 Message 是 request message;而 Server 回复的信息是 response message。
好,现在把基本的概念搞清楚了,我们来深入聊聊这些 Message 到底长啥样。
每条 message 都包括以下 4 个部分:
例如: GET /shoppingcart/items HTTP/1.1
包含三部分:
HTTP Request Method 下面会单独讲。
例如: HTTP/1.1 200 OK
包含三个部分:
一般来说,response 都是有 message body 的(代表着你请求的资源)。
HTTP 请求方法总共有 9 种,常用的有以下 4 个,对应我们之前在数据里面讲过的【增改查删】需求。
HTTP methods 就是 Client 与服务器之间交换信息的方式。
每个 HTTP 请求都必须有一个 URL 地址(URL 等下会详细说)。
除了增查改删这四种常见的 HTTP method 之外,还有这些 Method 大家也可以了解一下:
每个 Message 的 First Line 后面,就是以 name:value
为形式的 Header 部分,结构如下:
|
|
并不是所有的请求都有 body 的,比如 GET,就是为了获取资源,没有必要传输其他信息过去。
而 POST 这样的请求往往是有 body 的,因为你要给 Server 发信息嘛。
Body 分两种:
Content-Type
and Content-Length
.Response 也有可能没 body,比如 Client 想在 Server 上加一个资源(POST),那么 Server 收到这个请求之后就吭哧吭哧地加上去了,然后通过状态码回复一句:加好了(204)。
像 GET 这样的请求,Server 收到之后就会根据 URL 来找资源,找到了,ok,通过 Body 发回给 Client 。
在 Server 的 Response Start Line 里面,我们讲过,其中一部分就是 3 位数字的状态码(Status Code)。接下来的这一部分,我们具体来聊聊状态码。
状态码的作用是告诉 Client,你这个 http request 到底完成了没,你的请求结果是什么。
计算机领域一个非常重要的思维方式就是:输入(input)和输出(output)。
请求,就是我们输入的信息;而状态码,就是请求的输出结果。
状态码有 5 种,数值区间是 [100 - 599]
。
1 开头的:Informational responses - 这种状态码是一个中间状态,就是告知你一下,现在还没有最终完成请求,需要等一会儿。
2 开头的:Successful responses - 成功啦!Server 接收到了你的请求,也成功处理了你的请求,一切顺利。
3 开头的:Redirects - 你这个请求的资源地址好像不对啊。。没事,我帮你带个路,你去找另外一个资源就行了。
4 开头的:Client errors - 你这个请求有问题啊,自己反省一下。
5 开头的:Server errors - 额……你没问题,但是服务器没法处理你这个请求。
打开任意一个网站,打开浏览器自带的开发者工具,Chrome 按 F12 即可,打开网络这个 Tab,然后刷新网页,你就可以看到很多的 HTTP request。
比如第一个是 B 站的网站,我们可以直接查看 Request 和 Response 相关的信息。
这篇文章里面我们讲了:
希望对大家有所帮助~