序言

学习一个知识点,我会按照以下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主要定义了请求头操作相关的一系列方法。

HttpMessage的类关系

  • 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里描述请求最底层的类。

  • BasicHttpEntityEnclosingRequest的介绍

    通过观察构造函数,当我们使用它声明一个请求对象时,我们需要指定请求的方法、请求的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的类图如下
通过这张类图你会发现,BasicHttpResponse是HttpResponse里描述响应最底层的类,而其中主要定义了设置响应行、响应体相关的方法。

总结

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

httpcore系列(一)初识httpcore相关推荐

  1. 数据仓库系列:初识数仓

    数据仓库系列:初识数仓 前言: 本节是数据仓库系列文章的第一篇,本系列的目的在于快速的构建一套最小化可运行的基础数据体系,过程中也会涉及一些数仓的理论知识,但更偏重的是数仓的实现和背后的思考逻辑.所以 ...

  2. PyTorch源码学习系列 - 1.初识

    本系列文章会优先发布于微信公众号和知乎,欢迎大家关注 微信公众号:小飞怪兽屋 知乎: PyTorch源码学习系列 - 1.初识 - 知乎 (zhihu.com) 目录 本系列的目的 PyTorch是什 ...

  3. python爬虫系列之初识爬虫

    python爬虫系列之初识爬虫 前言 我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识 ...

  4. 【元宇宙系列】初识元宇宙(Mateverse)

    博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 文章目录 初识元宇宙(Mateverse) 一.元宇宙概念的首提 二.元宇宙第一股 三.元宇宙定义 四.元宇宙不是未来 ...

  5. Odin Inspector 系列教程 --- 初识 OdinWindow

    笔者以往在使用一些插件的时候经常会看上面这种多炫酷的插件操作界面,常常羡慕不已,如今有了Odin,自己也可以简简单单的实现这些炫酷的效果了,下面笔者就带大家初识OdinWindow. 创建一个Wind ...

  6. antd Pro 系列之初识antd Pro

    初识antd Pro 原因 一只后端猿接到了一个全栈的活,要开发一个完整的独立平台.前端只会html,但又想把前端做的很漂亮,怎么办? 网上冲浪找办法 发现一基于react的开源的前端框架. antd ...

  7. flask中文文档_「Flask系列」 初识Flask

    引子 作者有多年的编程打杂经验,之前一直参与基于Java的各种项目以及产品规划与设计,后因自己创业维持一家小公司,有些项目与产品,想降低开发成本,故在公司内部推行基于Python Flask的后端开发 ...

  8. C语言系列之初识C语言(二)2021.10.19

    接着上期的内容,对C语言的重要知识做一个概述 目录 一.初识选择语句 二.初识循环语句 ​​ 三.函数 四.数组 五.操作符 六.关键字 一.初识选择语句 人生中会遇到很多选择,无论对应的结果是怎样, ...

  9. MongoBD 系列(1) —— 初识 MongoDB

    初识 MongoDB 文章目录 初识 MongoDB 什么是MongoDB? MongoDB 的安装 1. 传统二进制安装 2. Docker 安装 MongoDB 的使用 1. MongoDB 结构 ...

  10. 《JAVASE系列》初识Java

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1.java语言概述 1.1 java是什么? 1.2 java语言的工作领域 1.3 java语言发展 1.4 java语 ...

最新文章

  1. Leetcode 61 旋转链表 (每日一题 20210723)
  2. Redis—主从复制
  3. 慌!还不了解Java中的分支预测?!
  4. rails table html,Ruby on Rails:如何将字符串呈现为HTML?
  5. mysql数据变化通通知机制_深入理解Notification机制
  6. w8服务器dns修改,Win8.1系统的DNS地址如何修改?修改win8.1系统DNS地址图文教程
  7. 电脑显示屏亮度怎么调_金合光电丨深圳led显示屏厂家为您诠释行业专业术语
  8. web安全day25:linux的NAT网络配置和yum的配置和使用
  9. php实现微信登录详细教程,[文档教程]PHP实现微信开放平台扫码登录源码下载 - 技术编程 - 极思维...
  10. 【云计算学习教程】云计算虚拟化技术和容器技术详解
  11. 5.13 广东移动 笔试题
  12. android 汉字笔画拆写,汉字笔画顺序之重新开启
  13. win10下pytorch-gpu安装以及CUDA详细安装过程
  14. Filebeat is unable to load the Ingest Node pipelines for the configured modules
  15. 今日头条校招真题——异或
  16. 2021年危险化学品经营单位主要负责人考试资料及危险化学品经营单位主要负责人考试技巧
  17. echart 柱状图 ---- 坐标轴、网格、柱体配置
  18. 计算机应用4班班委决定,计算机系1017班出游总结
  19. 0成本下载毕业论文——知网等N多资源
  20. 03-Mybatis的关键核心类说明

热门文章

  1. Type-C引脚、24Pin Type-C、16Pin Type-C、12Pin Type-C、6Pin Type-C
  2. tp5 根据身份证号码判断性别 男女
  3. edz文件怎么导入EPLAN Electric P8
  4. 美国MaaS应用如何成功打入法国市场
  5. vue三级菜单渲染_vue实现多级菜单效果
  6. “变态”的JavaScript——JavaScript的发明人--布兰登·艾奇(Brendan Eich)
  7. Unity遍历文件夹及其文件
  8. 【第一节】抠图 -- 薄、透、露的朦胧感
  9. cesium three性能比较_高中英语中的“形容词”,形容词的用法,比较等级及修饰词...
  10. 实战来了!聊聊电商系统中红包雨功能的设计与实现