mirror of
https://github.com/ZSCNetSupportDept/website.git
synced 2025-10-28 17:05:03 +08:00
1
This commit is contained in:
@@ -29,36 +29,44 @@
|
||||
|
||||
HTTP协议,是`HyperText Transfer Protocol`的缩写,即"超文本传输协议"。是通过网络在电脑之间进行文件传输的默认协议。进行HTTP文件传输的双方,一个称之为”客户端“(Client),一个称之为"服务端"(Server)。
|
||||
|
||||
我们刚才就是在我们的电脑上部署了HTTP服务端,而浏览器就是我们通信中的客户端.一次完整的HTTP协议由客户端请求(Request)和服务端响应(Response)组成。**在HTTP协议中,总是由客户端先发起一次HTTP请求,然后由服务端返回这次请求的响应,这样才是一次完整的HTTP通信。**
|
||||
我们刚才就是在我们的电脑上部署了HTTP服务端,而浏览器就是我们通信中的客户端。浏览器首先对服务器发送信息(行话叫做"请求"),要求获取某个文件;然后服务器返回这个文件(行话叫做“响应”)。
|
||||
|
||||
一次完整的HTTP协议总是由客户端请求(Request)和服务端响应(Response)组成。在HTTP协议中,总是由客户端先发起一次HTTP请求,然后由服务端返回这次请求的响应,这样才是一次完整的HTTP通信。
|
||||
|
||||
实际上,HTTP协议中的“客户端”不仅仅是指浏览器,但我们通常用的浏览器确实就是最常见的HTTP客户端。但其实像curl这样的命令行工具,或者手机APP,或者是浏览器里的JavaScript代码,当它们向服务器请求数据时,也可以被称作客户端。
|
||||
|
||||

|
||||
|
||||
|
||||
HTTP协议不仅可以获取一个文件(就像我们所做的),也可以向服务端上传一个文件,或是修改服务端目录下某个文件的内容...
|
||||
实际上,HTTP协议不仅可以获取一个文件(就像我们所做的),也可以向服务端上传一个文件,或是修改服务端目录下某个文件的内容...
|
||||
|
||||
一次HTTP通信要进行什么操作(获取or上传等),由HTTP通信的“方法”指定,方法是请求头的一部分。
|
||||
一次HTTP通信要进行什么操作(获取or上传等),由HTTP请求中的“方法”指定,方法是"请求头"的一部分。
|
||||
|
||||
下面我们介绍HTTP协议的具体内容:
|
||||
"请求头"是什么?别着急,下面我们介绍HTTP协议的具体内容:
|
||||
|
||||
### 请求
|
||||
前面说了,HTTP通信总是以客户端发送请求开始,服务端是没法主动给客户端发信息的。
|
||||
|
||||
一个HTTP请求包含请求头(HTTP Request Header)和请求体(Request Body),请求头主要包含了:
|
||||
|
||||
- 协议版本:告诉服务器,这次交流,要使用哪个版本的HTTP协议
|
||||
- 目标:要访问哪个电脑,例如刚才的`123.45.67.89`
|
||||
- URI:要操作哪个文件,例如`example.docx`,IP地址或者网址后面的内容就是URI了
|
||||
- 方法:要对这个文件做什么,比如获取这个文件的内容还是在服务器上创建这个文件
|
||||
- User-Agent:说明客户端是什么(是一个浏览器,还是命令行工具,还是爬虫?)
|
||||
- 自定义参数:除了上面的需要传输的标准内容,客户端还可以发送一些自定义的内容给服务端,这些内容总是以`Key=Value`的形式存在。
|
||||
- 方法:要对这个文件做什么,比如获取这个文件的内容,还是在服务器上创建这个文件
|
||||
- 自定义参数:除了上面的信息,客户端还可以发送一些额外的内容给服务端,这些内容总是以`Key=Value`的形式存在。在正常的URI后有一个`?`,表示参数的开始,`&`表示不同参数之间的分隔。
|
||||
|
||||
举个例子,百度的搜索接口是`GET http://baidu.com/s`,要传递搜索内容到这个接口中,需要通过URL参数`wd`。如果你想用百度搜索东西,可以在地址栏里面输入`http://baidu.com/s?wd=你要搜的东西`,这就是URL参数的意义:向服务器传递一些自定义信息。
|
||||
例如:`http://123.45.67.89/example.docx?compressed=true&method=gzip`
|
||||
|
||||
参数的内容不是HTTP标准,也就是服务端如何理解参数完全靠程序员写的代码。比如谷歌的用户搜索接口就是`GET http://google.com/search?q=你要搜的东西`。
|
||||
这就是让服务器压缩发来的文件,使用gzip压缩。
|
||||
|
||||
|
||||
参数的内容不是HTTP标准,也就是服务端如何理解参数,完全靠程序员写的代码。如果程序员没有设置,那么参数就毫无用处。
|
||||
|
||||
#### HTTP方法
|
||||
HTTP方法定义了这个请求具体要对指定的文件做什么,其中:
|
||||
- `GET`:获取指定文件的内容。
|
||||
- `POST`:上传一个文件,内容放在请求体(下面会讲到)
|
||||
- `POST`:上传一个文件,内容放在请求体(下面会讲到)。
|
||||
- `DELETE`:删除某个文件。
|
||||
|
||||
其实这里还有一些方法的,我们以后讲。
|
||||
|
||||
@@ -69,7 +77,7 @@ HTTP方法定义了这个请求具体要对指定的文件做什么,其中:
|
||||
|
||||

|
||||
|
||||
##### 请求体
|
||||
#### 请求体
|
||||
|
||||
对于某些方法,需要在请求时向服务器夹带一些东西(比如POST需要你带上新文件的内容),请求体就是装载这些东西的.
|
||||
|
||||
@@ -79,11 +87,10 @@ HTTP方法定义了这个请求具体要对指定的文件做什么,其中:
|
||||
|
||||
浏览器虽然正常情况下没法做出GET外的请求,但是浏览器在控制台里是可以自定义请求的,以`Firefox`为例,在F12的`Network`一栏中点`New Request`(有一个加号)就可以发送自定义请求。`curl`等HTTP命令行工具也可以发送请求.
|
||||
|
||||
实际上,HTTP协议中的“客户端”不仅仅是指浏览器,我们通常用的浏览器就是最常见的客户端,但其实像curl这样的命令行工具,或者手机APP,或者是浏览器里的JavaScript代码,当它们向服务器请求数据时,也扮演着客户端的角色。
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
#### HTTP的响应
|
||||
### 响应
|
||||
回应也分为回应头和回应体,回应头主要包含:
|
||||
- 状态码:针对请求的回应有对应的状态,比如,如果GET请求没有问题,成功返回的话就返回`200 OK`状态码,如果找不到请求里对应的文件就会返回`404 Not Found`
|
||||
- 内容格式:向浏览器说明回应体(若有)是什么格式的,文本文件的编码设置等,比如html文件?图片?docx文档?有没有被压缩?如果有,压缩格式?这决定了浏览器如何对待这些文件
|
||||
@@ -93,7 +100,7 @@ HTTP方法定义了这个请求具体要对指定的文件做什么,其中:
|
||||
|
||||

|
||||
|
||||
#### 一个例子
|
||||
### 例子
|
||||
`GET`方法从服务器获得一个资源,我们在浏览器的地址栏输入一个地址时,就是在对这个URI做`GET`请求,前面的例子也是通过`GET`方法来进行的。
|
||||
|
||||
比如,发送`GET http://developer.zsxyww.com/test/test.txt`,那么就会把我们服务器根目录上`test`文件夹里面的`test.txt`这个文件发过来
|
||||
@@ -115,7 +122,7 @@ HTTP在网络上是明文传输的,也就是说客户端和服务器之间的
|
||||
|
||||
:::
|
||||
|
||||
### 网页与HTML
|
||||
## 网页与HTML
|
||||
|
||||
随着网络的发展,人们发现互联网的潜力远不止于传输文件。特别是浏览器的普及,人们希望能直接在网页上展示丰富的信息,而不只是把浏览器当作下载工具。前面我们说过了,浏览器可以直接展示txt文件,但是最大的问题是,txt文件是没有样式的。
|
||||
|
||||
@@ -152,3 +159,4 @@ HTTP在网络上是明文传输的,也就是说客户端和服务器之间的
|
||||
:::
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user