阅读 174

图解 HTTP(一) 客户端/服务器消息和实施多样性

简介

当前章节是《rfc7230 - 2.1 客户端/服务器消息》和《rfc7230 - 2.2 实施多样性》,主要介绍了一些基本的定义以及一些简单的示例

本系列是在学习HTTP相关知识过程中,按照自己的理解以图文方式的记录。如果读者有不同的理解希望能够与我分享。若有差错,请斧正,我会第一时间修改,以免对读者的误导。

client(客户端)

为了发送一个或多个 HTTP请求 而与服务端建立连接的程序

image.png

server (服务端)

为了接受连接通过发送 HTTP响应 来服务 HTTP请求 的程序

image.png

clientserver 只表示这些程序在特定连接中扮演的角色。也就是说在不同的链接中,有的 server 也可能是 client,同样的,有的 client 也可能是 server

user agent(用户代理)

指任何发起请求的客户端程序,包含不限于浏览器,爬虫,命令行工具。定制应用和移动应用。

image.png

origin server(源服务器)

能够对给定目标资源建立权威应用的程序。比如当前部署掘金社区运行的服务器。

sender(发送者)

指发送给定消息的任何实现。

recipient(接收者)

指接收给定消息的任何实现。

最简单的双向连接

HTTP依靠统一资源标识符(URI)标准来标明目标资源和资源之间的关系。 在最简单的情况下可以通过一个在user agent(UA)和origin server (o)的双向连接来实现

image.png

请求

一个 client 以一个请求消息的格式发送HTTP请求到一个 server ,以一个请求行开始,包括一个方法、URI和协议版本。接着是header域包括了请求修饰符、客户端信息和表示元信息,一个空行表示结束后 header 部分,最后一个消息体包含了 body

image.png

响应

一个 server 通过发送一个或多个HTTP响应消息来响应客户端的一个请求。每个HTTP响应消息都已包含协议版本,成功或错误代码和文本原因短语的状态行开始,后面可能跟头字段包含服务器信息、资源元数据和表示元数据,一个表示包头部分结束的空行,最后是包含有效载荷主体的消息主体。

image.png

一对多

一个连接可能用于多个请求/响应交互

例子

一个对 URI 为 www.example.com/hello.txt 的 GET 请求的一个典型的消息交换: 客户端请求:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
复制代码

服务器响应:

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

Hello World! My payload includes a trailing CRLF.
复制代码

image.png

实施多样性

用户代理不一定是通用浏览器,原服务器也不一定是大型公开网站

image.png

文档地址

HTTP/1.1 rfc7230

文章分类
前端
文章标签