httpcore系列(一)初识httpcore

序言

学习一个知识点,我会按照以下3点逐一去了解。
1:是什么
2:怎么用
3:解决了什么问题 & 实现原理

(一)httpcore是什么?

httpcore是什么?官方的介绍是这样的:

HttpCore is a set of low level HTTP transport components that can be used to build custom client and server side HTTP services with a minimal footprint. HttpCore supports two I/O models: blocking I/O model based on the classic Java I/O and non-blocking, event driven I/O model based on Java NIO.

简单翻译:HttpCore是一组低级别的HTTP传输组件,可以用最小的占用空间构建自定义的HTTP客户端和服务端。 HttpCore支持两种I /O模型:基于经典Java的 I/O阻塞模型和基于Java NIO的非阻塞事件驱动的I/O模型。

(二)httpcore常见接口、类介绍

聊到http,我们肯定少不了对【请求】和【响应】这两个术语的描述,在httpcore的定义里,究竟是怎么描述它们的呢?,请求定义接口HttpRequest、响应定义接口HttpResponse都继承自接口HttpMessage,HttpMessage究竟定了什么?

1: 【interface】HttpMessage
HttpMessage主要定义了请求头操作相关的一系列方法。
httpcore系列(一)初识httpcore_第1张图片

HttpMessage的类关系
httpcore系列(一)初识httpcore_第2张图片

  • HTTP messages consist of requests from client to server and responses from server to client.

【翻译】HTTP的消息是由客户端到服务端的请求和服务端到客户端的响应组成,也就是说把http的请求与响应都抽象或统称为http的消息。

  • HTTP messages use the generic message format of RFC 822 for transferring entities (the payload of the message). Both types of message consist of a start-line, zero or more header fields(also known as “headers”), an empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields, and possibly a message-body.

【翻译】http的消息使用RFC 822定义的通用消息格式定义消息实体。
每一种消息类型都有一个起始行,零个或多个请求头,一个表示请求头描述结束的空行,可能存在的消息体组成。

  • HttpMessage的格式

generic-message =
start-line
*(message-header CRLF)
CRLF
[ message-body ]

start-line的定义

start-line = Request-Line | Status-Line
【Request-Line】 请求行,由Method + Request-URI + HTTP-Version
CRLF构成,httpcore里接口类为RequestLine,实现类为BasicRequestLine;
---------------
【Status-Line】 响应行,由HTTP-Version + Status-Code + Reason-Phrase CRLF构成,httpcore里接口类为StatusLine,实现类为BasicStatusLine。
HTTP-message = Request | Response ; HTTP/1.1 messages

2: 【interface】HttpRequest
HttpRequest是httpcore的定义里对请求的最高抽象,也就是说所有的请求类都是其实现。

HttpRequest的类图如下,通过这张类图你会发现,BasicHttpEntityEnclosingRequest是HttpRequest里描述请求最底层的类。
httpcore系列(一)初识httpcore_第3张图片

  • BasicHttpEntityEnclosingRequest的介绍
    httpcore系列(一)初识httpcore_第4张图片
    通过观察构造函数,当我们使用它声明一个请求对象时,我们需要指定请求的方法、请求的uri、或请求的http协议版本
public BasicHttpEntityEnclosingRequest(final String method, final String uri) 

public BasicHttpEntityEnclosingRequest(final String method, final String uri,
            final ProtocolVersion ver) 

public BasicHttpEntityEnclosingRequest(final RequestLine requestline) 

2: 【interface】HttpResponse
HttpResponse是httpcore的定义里对响应的最高抽象,也就是说所有的响应类都是其实现。

HttpResponse的类图如下
httpcore系列(一)初识httpcore_第5张图片通过这张类图你会发现,BasicHttpResponse是HttpResponse里描述响应最底层的类,而其中主要定义了设置响应行、响应体相关的方法。

总结

通过上述学习,我们大致知道用BasicRequestLine描述请求行、BasicStatusLine描述响应行、BasicHttpEntityEnclosingRequest描述一个从客户端到服务端的底层请求对象、BasicHttpResponse描述一个从服务端到客户端的响应对象。

你可能感兴趣的:(http的旅程)