1
0
mirror of https://github.com/ZSCNetSupportDept/website.git synced 2025-10-28 17:05:03 +08:00
This commit is contained in:
2025-07-28 18:01:04 +08:00
parent 722ad2cef9
commit 35a60440c6
7 changed files with 61 additions and 38 deletions

View File

@@ -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请求示意图](/img/blog/basic_static_app_server.png)
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方法定义了这个请求具体要对指定的文件做什么其中
![请求头](/img/blog/http-request.svg)
##### 请求体
#### 请求体
对于某些方法,需要在请求时向服务器夹带一些东西(比如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方法定义了这个请求具体要对指定的文件做什么其中
![回应体](/img/blog/http-response.svg)
#### 一个例子
### 例子
`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在网络上是明文传输的也就是说客户端和服务器之间的
:::