Skip to content

NIO HTTP Protocol

javahongxi edited this page Aug 1, 2019 · 4 revisions

网络七层模型

img

  • Java里面的Socket/DatagramSocket便是对传输层的表现
  • 应用层协议分为公有协议和私有协议,公有协议是经过国际或国家标准化组织采纳或批准的协议,如HTTP、FTP、WebSocket等,私有协议则是自定义协议,如dubbo协议等。绝大多数的私有协议传输层都基于TCP/IP,所以利用Netty的 NIO TCP 协议栈可以非常方便地进行私有协议的定制和开发。

HTTP协议介绍

HTTP(超文本传输协议)协议是建立在TCP传输协议之上的应用层协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

HTTP协议的主要特点如下:

  • 支持Client/Server模式
  • 简单————客户向服务器请求服务时,只需要指定服务URL,携带必要的请求参数或者消息体
  • 灵活————HTTP允许传输任意类型的数据对象,传输的内容类型由HTTP消息头中的Content-Type加以标记
  • 无状态————HTTP协议是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要之前的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快,负载较轻。

HTTP请求由三部分组成:

  • HTTP请求行
  • HTTP消息头
  • HTTP请求正文(消息体)

HTTP响应消息也由三部分组成

  • 状态行
  • 消息报头
  • 响应正文

下面是抓包获取的请求和响应:

GET /lab/get?callback=lab HTTP/1.1
Host: d.jd.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: */*
Referer: https://www.jd.com/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
Cookie: __jda=76161171.1564630620764743965844.1564630621.1564630621.1564630621.1; __jdc=76161171
HTTP/1.1 200 OK
Date: Thu, 01 Aug 2019 03:48:49 GMT
Content-Type: application/json
Transfer-Encoding: chunked
Vary: Accept-Encoding
cache: dict
Cache-Control: max-age=62
Expires: Thu, 01 Aug 2019 03:49:51 GMT
Content-Encoding: gzip
Server: jfe
Connection: close

lab([{"id":1417,"url":"www.jd.com","startOn":1562342400000,"endOn":1562860800000,"percent":"20","skus":[]}])

Netty HTTP

首页

Java核心技术

Netty

RocketMQ深入研究

kafka深入研究

Pulsar深入研究

Dubbo源码导读

微服务架构

Redis

Elasticsearch

其他

杂谈

关于我

Clone this wiki locally