TCP/IP协议—HTTP
- HTTP协议
- HTTP通讯特点
- HTTP通讯流程
- HTTP请求报文
- 请求方法
- HTTP应答报文
- 状态码
HTTP协议
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一种请求-响应的协议,用户可以通过HTTP向服务器上传、下载数据。HTTP基于TCP协议,是web应用中最主要的应用层协议,比如浏览器上网就是使用HTTP协议。通讯端口默认为80。
超文本安全传输协议(Hypertext Transfer Protocol Secure,HTTPS)是加入安全加密的HTTP通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS的安全基础是SSL/TLS。通讯端口默认为443。
HTTP协议源文档
HTTP通讯特点
- 可靠传输:HTTP基于TCP,需要先连接再传输数据,因此也集成了TCP可靠传输的特性。
- 立即响应:HTTP是无状态的协议,即不存储业务处理状态,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。
- 单向请求:HTTP基于客户端-服务器模式,HTTP只能从客户端向服务器发起请求,服务器不能主动向客户端发起请求。
- 灵活传输:HTTP可以传输任意类型的数据。
HTTP通讯流程
- 客户端发起HTTP请求,与服务器建立TCP连接。
- 客户端向服务器发送HTTP报文。
- 服务器收到HTTP报文后进行业务处理,然后返回结果。
HTTPS会在建立连接时加入身份认证的流程,且在数据传输的过程中使用证书对数据进行加密。
HTTP请求报文
HTTP报文主要分为三部分:请求行、请求头部、请求数据。
需要注意的是,HTTP报文的每一行都需要换行符,请求头部与请求数据之间还需要一个空行。
- 请求行:包含请求方法,URL,协议版本。其中协议版本目前广泛使用的还是HTTP/1.1。
- 请求头部:使用键值对的数据格式(key: value),用于声明请求的属性参数。
- 请求数据:具体的请求数据。发送不同的数据会有不同的格式。
- 文本数据,以访问OpenAI ChatGPT的请求为例
POST /v1/chat/completions HTTP/1.1 //post请求,具体访问URL为/v1/chat/completions,HTTP/1.1 协议
Host: api.openai.com //访问的服务器域名
Authorization: sk-xxxxxxxxxxxxxxxx //服务器需要的认证头部
Content-Type: application/json //请求数据的数据类型
Content-Length: 179 //请求数据数据长度
{ //请求数据
"model":"gpt-3.5-turbo",
"max_tokens":1000,
"temperature":0.8,
"messages": [
{
"role": "user",
"content": "讲个小故事"
}
]
}
- 文件数据,以访问OpenAI transcriptions的请求为例
POST /v1/audio/transcriptions HTTP/1.1 //post请求,具体访问URL为/v1/chat/completions,HTTP/1.1
Host: api.openai.com //访问的服务器域名
Authorization: sk-xxxxxxx //服务器需要的认证头部
Content-Length: 360 //请求数据数据长度
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW //请求数据的数据类型,包括数据分隔符
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="/C:/Users/zou/Desktop/16k.wav" //传输的数据信息描述
Content-Type: audio/wav //传输的数据类型。与数据要个一个空行
(音频文件数据)
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name=modle //传输的数据信息描述。与数据要个一个空行
whisper-1
------WebKitFormBoundary7MA4YWxkTrZu0gW-- //最后的分隔符多了 -- 表示数据结尾
请求方法
请求方法 | 作用 |
---|---|
GET | 此方法用于请求指定资源的表示形式。GET请求通常用于数据检索,例如请求网页内容。GET请求的参数通常附加在URL后面。 |
POST | 此方法用于向指定资源提交数据以创建或更新资源。POST请求通常包含在请求体中的数据,适用于提交表单或上传文件。 |
HEAD | 与GET方法相似,但HEAD不返回响应体,仅返回状态行和标题部分。HEAD方法主要用于获取响应的元数据。 |
PUT | 此方法用于将数据发送到服务器以创建或更新资源。PUT方法用上传的内容替换目标资源中的所有当前内容。 |
DELETE | 此方法用于请求服务器删除指定的资源。DELETE请求会导致服务器删除URI指定的目标资源的所有当前内容。 |
OPTIONS | 此方法用于获取当前URL支持的方法列表。OPTIONS请求返回服务器支持的方法列表,对于查看API端点的可用操作非常有用。 |
TRACE | 此方法用于回显服务器收到的请求,主要用于测试或诊断网络路径上的问题。 |
HTTP应答报文
HTTP应答报文与HTTP请求报文格式类似,区别在与请求行。
以百度的应答报文为例
HTTP/1.1 200 OK
Connection: keep-alive
Content-Type: text/html; charset=utf-8
Date: Thu, 18 Apr 2024 02:21:36 GMT
X-Ua-Compatible: IE=Edge,chrome=1
X-Xss-Protection: 1;mode=block
Transfer-Encoding: chunked
请求行中没有请求方式以及URL,但是多了状态码
状态码
常用的状态码如下
状态码 | 返回消息 | 状态码含义 |
---|---|---|
100 | Continue | 表示服务器已经接收到一部分请求,客户可以继续发送 |
101 | Switching Protocols | 用于响应客户端的 Upgrade请求头发送的,指明服务器即将切换的协议 |
102 | Processing | 表示服务器已经接收到请求并且正在处理,但尚未完成处理 |
200 | OK | 请求成功并已正确处理返回 |
201 | Create | 请求成功,并因此创建了一个新的资源。这通常是在 POST 请求,或是某些 PUT 请求之后返回的响应 |
202 | OK | 表示请求已被接受,但处理尚未完成 |
204 | No Content | 表示请求成功处理,但没有返回内容 |
301 | Moved Permanently | 请求资源的 URL 永久移动到了一个不同的URL,在响应中给出了新的 URL |
302 | Found | 请求资源的 URL 临时移动到了一个不同的URL,在响应中给出了新的 URL |
400 | Bad Request | 错误请求,服务器无法或不会处理请求 |
401 | Unauthorized | 表示客户端的请求没有身份验证或者验证失败 |
403 | Forbidden | 客户端没有访问内容的权限 |
404 | Not Found | 服务器找不到请求的资源 |
415 | Unsupported Media Type | 服务器不支持请求数据的媒体格式 |
414 | URI Too Long | 客户端请求的 URI 长度超过服务器所接受的长度 |
429 | Too Many Requests | 客户端在给定的时间内发送了太多请求 |
431 | Request Header Fields Too Large | 客户端在给定的时间内发送了太多请求 |
500 | Internal Server Error | 服务器内部错误,当服务器在处理请求时遇到了意外错误或异常情况,无法完成请求 |
502 | Bad Gateway | 表示代理服务器无法正确地转发请求并获得有效的响应 |
学习笔记,有问题欢迎指出