Day2-HTTP
Day2-1 HTTP基础
为什么需要协议
- 明确的边界
- 信息解析
- (预留拓展)
HTTP最早版本
0.9
HTTP协议的最初版本是HTTP/0.9,它于1991年问世。这个版本非常简单,只支持无格式的文本数据传输,没有请求头、响应头等结构化信息。
HTTP/0.9的主要特点如下:
- 请求方式:只支持GET请求方法,即通过GET方法请求服务器上的资源。
- URL:只能包含请求的路径,没有主机名、端口号、查询参数等。
- 响应格式:服务器返回的响应只包含请求资源的纯文本内容,没有响应头、状态码等。
- 连接:每次请求都会关闭连接,无法保持持久连接。
- 内容类型:响应的内容类型默认为HTML。
HTTP协议里有什么
0.9到1.1的版本变化
状态码
- 1xx(信息性状态码):表示请求已被接收,正在处理中。
- 100 Continue:服务器已收到请求的初始部分,客户端应继续发送剩余部分。
- 101 Switching Protocols:服务器已经理解请求,将切换到不同的协议进行通信。
- 2xx(成功状态码):表示请求已成功处理。
- 200 OK:请求成功,返回对应的资源。
- 201 Created:请求已成功处理,并在服务器上创建了新资源。
- 204 No Content:请求成功,但响应不包含实体主体内容。
- 3xx(重定向状态码):表示需要进行进一步操作以完成请求。
- 301 Moved Permanently:资源的URI已永久移动到新位置。
- 302 Found:资源的URI已临时移动到新位置。
- 304 Not Modified:客户端的缓存副本仍然有效,可以使用缓存的版本。
- 4xx(客户端错误状态码):表示请求包含语法错误或无法完成请求。
- 400 Bad Request:请求无效,服务器无法理解请求。
- 401 Unauthorized:请求要求身份验证。
- 404 Not Found:请求的资源不存在。
- 5xx(服务器错误状态码):表示服务器在处理请求时发生错误。
- 500 Internal Server Error:服务器遇到意外错误,无法完成请求。
- 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到无效响应。
HTTP报文结构
1、请求行和响应行(状态行)
请求行:请求方法,url,HTTP版本
相应行:HTTP版本,状态码,状态描述
2、请求头和响应头
不止有图上这些
1.请求头
Accept:MIME 可选项,不一定有
指明了期望返回的类型
Host
请求头中的 “Host” 字段用于指定目标服务器的主机名或 IP 地址。它是 HTTP/1.1 协议中的一个必需字段,在发送请求时应该包含在请求头部中。
2.响应头
Content-Length
Content-Type
3、空行
4、请求体和响应体
Day2-2 Hertz 应用篇
hz和thriftgo
IDL Interface Definition Language
Hz实战1
创建hello.thrift文件
1 | mkdir idl |
hello.thrift
文件内容
1 | // idl/hello.thrift |
1 | hz new -module github.com/SYuan03/thrift/example -idl idl/hello.thrift |
namespace里面就是对应的多级目录结构
执行go mod tidy后,爆红消失
修改 handler,添加自己的逻辑
1 | // handler path: biz/handler/hello/example/hello_service.go |
1 | go build |
成功
Hz实战2
更新一个已有的项目
根据需求重写hello.thrift的内容
1 | // idl/hello.thrift |
thrift的idl的结构体需要标序号,参数也要标序号,以指明顺序
int用不了,要用i32
执行
1 | hz update -idl idl/hello.thrift |
关于make
成功
post
1 | curl http://127.0.0.1:8888/add-student-info -X POST -H 'Content-Type:application/json' -d '{"ID":666,"Name": "dsy", "Favorite": "peach"}' -w "\n" |
get
1 | curl http://127.0.0.1:8888/query?id=10 -w "\n" |
Hz实战3
参考
hertz-examples/hz/hz_client at main · cloudwego/hertz-examples · GitHub
啥玩意?
IDL(Interface Definition Language):接口定义语言,用于定义分布式系统中服务接口的规范和格式。IDL 可以用于生成客户端和服务器端的代码,以便它们可以相互通信和交互数据。Thrift 和 gRPC 等框架都支持使用 IDL 进行服务定义和代码生成。
RPC(Remote Procedure Call):远程过程调用,是一种跨网络的分布式系统通信方式,允许客户端应用程序调用远程服务器上的过程或方法,并接收返回结果。RPC 可以使用 HTTP、TCP、UDP 等协议进行通信,常用的框架包括 Thrift、gRPC、Dubbo 等。
HTTP 请求:超文本传输协议(HTTP)定义了客户端和服务器之间的通信协议。HTTP 请求是客户端向服务器发送的请求,包括请求方法、URL、请求头、请求体等信息。服务器根据这些信息来处理请求,并返回响应结果。
Hertz client:Hertz 是一个开源的 RPC 框架,支持使用 IDL 进行服务定义和代码生成。Hertz client 是客户端程序,用于向 Hertz server 发送 RPC 请求,并接收响应结果。
Hertz server:Hertz server 是服务端程序,用于接收 Hertz client 发送的 RPC 请求,并处理请求,返回响应结果。
它提到了一种工具或框架,可以根据 IDL 文件生成客户端代码,并自动屏蔽创建和初始化 Hertz client 的繁琐操作。生成的客户端代码可以直接使用 HTTP 请求调用 Hertz server 提供的服务,并接收响应结果。使用这种工具或框架,可以大大简化分布式系统中的开发和调试过程,提高开发效率。
先把之前的idl搬过来
1 | mkdir server |
1 | # 同理,略 |
成功!
- 标题: Day2-HTTP
- 作者: SYuan03
- 创建于 : 2023-07-11 11:42:29
- 更新于 : 2024-09-30 20:52:01
- 链接: https://bblog.031105.xyz/posts/2023-Summer-Courses-CloudWeGo/day2-http.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。