简介
当前章节是《rfc7230 – 2.1 客户端/服务器消息》和《rfc7230 – 2.2 实施多样性》,主要介绍了一些基本的定义以及一些简单的示例
本系列是在学习HTTP相关知识过程中,按照自己的理解以图文方式的记录。如果读者有不同的理解希望能够与我分享。若有差错,请斧正,我会第一时间修改,以免对读者的误导。
client(客户端)
为了发送一个或多个 HTTP请求
而与服务端建立连接的程序
server (服务端)
为了接受连接通过发送 HTTP响应
来服务 HTTP请求
的程序
client
和 server
只表示这些程序在特定连接中扮演的角色。也就是说在不同的链接中,有的 server
也可能是 client
,同样的,有的 client
也可能是 server
。
user agent(用户代理)
指任何发起请求的客户端程序,包含不限于浏览器,爬虫,命令行工具。定制应用和移动应用。
origin server(源服务器)
能够对给定目标资源建立权威应用的程序。比如当前部署掘金社区运行的服务器。
sender(发送者)
指发送给定消息的任何实现。
recipient(接收者)
指接收给定消息的任何实现。
最简单的双向连接
HTTP依靠统一资源标识符(URI)标准来标明目标资源和资源之间的关系。
在最简单的情况下可以通过一个在user agent(UA)和origin server (o)的双向连接来实现
请求
一个 client
以一个请求消息的格式发送HTTP请求到一个 server
,以一个请求行开始,包括一个方法、URI和协议版本。接着是header域包括了请求修饰符、客户端信息和表示元信息,一个空行表示结束后 header
部分,最后一个消息体包含了 body
。
响应
一个 server
通过发送一个或多个HTTP响应消息来响应客户端的一个请求。每个HTTP响应消息都已包含协议版本,成功或错误代码和文本原因短语的状态行开始,后面可能跟头字段包含服务器信息、资源元数据和表示元数据,一个表示包头部分结束的空行,最后是包含有效载荷主体的消息主体。
一对多
一个连接可能用于多个请求/响应交互
例子
一个对 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.
复制代码
实施多样性
用户代理不一定是通用浏览器,原服务器也不一定是大型公开网站