💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 报文 HTTP 报文由两部分组成:报文首部和报文主体。 ![](https://img.kancloud.cn/9d/ca/9dcae05868042c9016c1dd8fb7a36fb1_1164x418.png) 基于 HTTP 通信的请求-响应模式,我们又可以把 HTTP 报文区分为请求报文和响应报文,它们本身的结构和 HTTP 报文结构一致。 # 请求报文 * 请求行:包括 HTTP 请求的种类,请求资源的路径,HTTP 协议版本。 * 请求头:存放的是对客户端以及请求本身的描述信息。 * 空行。 * 请求体:发送给服务器的查询信息(当使用的是 "GET" 方法的时候,body 是为空的)。 常见请求头: * User-Agent:浏览器的具体类型。 * Accept:浏览器支持哪些数据类型。 * Accept-Charset:浏览器采用的是哪种编码。 * Accept-Encoding:浏览器支持解码的数据压缩格式 如:gzip。 * Accept-Language:浏览器的语言环境。 * Host:请求的主机名,允许多个域名同处一个 IP 地址,即虚拟主机。 * Connection:表示是否需要持久连接。如 Keep-Alive。 * Content-Length:表示请求体的长度。 * **Content-Type**:浏览器告诉 WEB 服务器请求数据的类型和字符集。 * Content-Encoding:WEB 服务器表明自己使用了什么压缩方法。 * Content-Language:WEB 服务器告诉浏览器自己响应的对象的语言。 * Cookie:浏览器每次都会将 cookie 发送到服务器上,允许服务器在客户端存储少量数据。 * Referer:包含一个 URL,用户从该 URL 代表的页面出发访问当前请求的页面。服务器能知道你是从哪个页面过来的。 ## 请求方法 HTTP 协议定义了很多与服务器交互的方法,最基本的有 4 种,分别是 GET,POST,PUT,DELETE。 一个 URL 地址用于描述一个网络上的资源,而 HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资源的查,改,增,删 4 个操作。 我们最常见的就是 GET 和 POST 了。GET 一般用于获取/查询资源信息,而 POST 一般用于更新资源信息。 * GET 请求数据在地址栏,而 POST 不会,POST 比 GET 更安全。 * GET 存放于请求行中,POST 请求的参数存放于请求体中。 * GET 请求的数据不能超过 2K,而 POST 没有上限。比如文件上传时,必须使用 POST 方式。 * GET 可以缓存,而 POST 没有缓存。 # 响应报文 * 响应行:协议版本、状态码和消息。 * 响应头:存放的是对服务器以及响应本身的描述信息。 * 空行。 * 响应体:返回给客户端的具体数据。 常见响应头: * Server:服务器软件的信息和版本。 * Accept-Ranges:服务器表明是否接受获取其某个实体的一部分的请求。 * **Content-Type**:返回的响应体的数据类型。 * **Set-Cookie**:响应头是服务器返回的响应头用来在浏览器存 cookie,一旦存下,当浏览器访问符合条件的 url 地址时,会自动带上这个 cookie。 * Allow:服务器支持哪些请求方法(如 GET、POST 等)。 * Content-Base:解析主体中的相对 URL 时使用的基础 URL。 * Content-Encoding:对响应体数据采用的压缩方式。 * Content-Language:告诉浏览器理解主体时最适宜使用的自然语言。 * Content-Length:表明响应体的大小,例如 26012。 * Content-Location:资源实际所处的位置。 * Content-MD5:主体的 MD5 校验和。 * Content-Range:表示传送的范围。 * Expires:过期相关信息。 * Last-Modified:WEB 服务器认为对象的最后修改时间。 ## 状态码 Response 消息中的第一行叫做状态行,由 HTTP 协议版本号,状态码,状态消息三部分组成。状态码用来告诉 HTTP 客户端,HTTP 服务器是否产生了预期的响应,处理结果的代号。 HTTP/1.1 中定义了 5 类状态码。状态码由三位数字组成,第一个数字定义了响应的类别。 * 1XX 提示信息 - 表示请求已被成功接收,继续处理。 * 2XX 成功 - 表示请求已被成功接收,理解,接受。 * 3XX 重定向 - 要完成请求必须进行更进一步的处理。 * 4XX 客户端错误 - 请求有语法错误或请求无法实现。 * 5XX 服务器端错误 - 服务器未能实现合法的请求。 200 302 304 404 500 ``` 200 OK 请求被成功地完成,所请求的资源发送回客户端 302 Found 重定向,新的 URL 会在 response 中的 Location 中返回,浏览器将会使用新的 URL 发出新的 Request 304 Not Modified 文档已经被缓存,直接从缓存调用 400 Bad Request 客户端请求有语法错误,不能被服务器所理解 403 Forbidden 服务器收到请求,但是拒绝提供服务 404 Not Found 请求资源不存在 500 Internal Server Error 服务器发生了不可预期的错误 503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 ``` # get请求 ![](https://img.kancloud.cn/da/7e/da7ea14e579d236ae7d8a254475473b2_1220x800.bmp) # post请求 ![](https://img.kancloud.cn/50/f5/50f50a1034614f2f8cdee9beebdcd58c_1220x800.bmp)