JavaEE 要懂的小事:一、图解Http协议

一、技术基石及概述

问:什么是HTTP?
答:HTTP是一个客户端和服务器端请求和响应的标准TCP。其实建立在TCP之上的。

当我们打开百度网页时,是这样的:

https://www.baidu.com

多了个S,其实S表示TLS、SSL。在这里不做解释,因此HTTP的技术基石如图所示:

那HTTP协议呢?HTTP协议(HyperText Transfer
Protocol),即超文本传输协议是用于服务器传输到客户端浏览器的传输协议。Web上,服务器和客户端利用HTTP协议进行通信会话。有OOP思想
的得出结论:其会话的结构是一个简单的请求/响应序列,即浏览器发出请求和服务器做出响应。

 

二、深入理解技术基石和工作流程

既然HTTP是基于传输层的TCP协议,而TCP协议是面向连接的端到端的协议。因此,使用HTTP协议传输前,首先建立TCP连接,就是因此在谈的TCP链接过程的“三次握手”。如图

在Web上,HTTP协议使用TCP协议而不是UDP协议的原因在于一个网页必须传送很多数据,而且保证其完整性。TCP协议提供传输控制,按顺序组织数据和错误纠正的一系列功能。

 

一次HTTP操作称为一个事务,其工作过程可分为四步:

1、客户端与服务器需要建立连接。(比如某个超级链接,HTTP就开始了。)

2、建立连接后,发送请求。

3、服务器接到请求后,响应其响应信息。

4、客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。

建立连接,其实建立在TCP连接基础之上。图解核心工作过程(即省去连接过程)如下:

 

三、详解工作过程的HTTP报文

HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。

一、请求报文格式如下:

请求行

通用信息头

请求头

实体头

(空行)

报文主体

如图,请求我博客一篇文章时发送的报文内容:

对于其中请求报文详解:

1、请求行

    方法字段 + URL + Http协议版本

2、通用信息头

    Cache-Control头域:指定请求和响应遵循的缓存机制。

    keep-alive 是其连接持续有效【在下面百度的例子,会得到验证】

3、请求头

    Host头域,脑补吧

    Referer头域:允许客户端指定请求URL的资源地址。

    User-Agent头域:请求用户信息。【可以看出一些客户端浏览器的内核信息】

 

4、报文主体

如图中的 “ p=278 ”一般来说,请求主体少不了请求参数。

二、应答报文格式如下:

状态行

通用信息头

响应头

实体头

(空行)

报文主体

如图,就是这篇博客响应的内容:

对其中响应报文详解:

1、状态行

    HTTP协议版本 + 状态码 + 状态代码的文本描述

    【比如这里,200 代表请求成功】

2、通用信息头

    keep-alive 是其连接持续有效【在下面百度的例子,会得到验证】

    Date头域:时间描述

3、响应头

    Server头:处理请求的原始服务器的软件信息。

4、实体头

    Content-Type头:便是接收方实体的介质类型。(这也表示了你的报文主体是什么。)

(空行)

5、报文主体

    这里就是HTML响应页面了,在截图tab页中的response中可查看。

一次简单的请求/响应就完成了。

 

三、HTTP协议知识补充

请求报文相关:

请求行-请求方法

GET            请求获取Request-URI所标识的资源
POST          在Request-URI所标识的资源后附加新的数据
HEAD         请求获取由Request-URI所标识的资源的响应消息报头
PUT            请求服务器存储一个资源,并用Request-URI作为其标识
DELETE       请求服务器删除Request-URI所标识的资源
TRACE        请求服务器回送收到的请求信息,主要用于测试或诊断
CONNECT  保留将来使用
OPTIONS   请求查询服务器的性能,或者查询与资源相关的选项和需求

 

 

响应报文相关:

响应行-状态码

1xx:指示信息–表示请求已接收,继续处理
2xx:成功–表示请求已被成功接收、理解、接受
3xx:重定向–要完成请求必须进行更进一步的操作
4xx:客户端错误–请求有语法错误或请求无法实现
5xx:服务器端错误–服务器未能实现合法的请求

常见的状态码

200 OK

请求成功(其后是对GET和POST请求的应答文档。)

 

304 Not Modified

未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。

 

404 Not Found

服务器无法找到被请求的页面。

 

500 Internal Server Error

请求未完成。服务器遇到不可预知的情况。

 

比如304,在浏览器第一次打开百度时,如图所示:

刷新一下:

这上面的304就证明了

1、304状态码:有些图片和js文件在本地客户端缓存,再次请求后,缓存的文件可以使用。

2、以上所以HTTP请求,只靠一个TCP连接,这就是所谓的持久连接。

四、关于HTTP协议的Web应用框架或者规范

JavaEE的人会知道Servlet规范。其中Web应用容器都实现了HTTP协议中的对象,即请求和响应对象。比如 javax.servlet.http.HttpServletResponse 对象中肯定有对状态码描述,如图

至于如何使用它们,坐等系列文章吧。

 

五、总结

回顾全文,HTTP协议其实就是我们对话一样,语言就是其中的协议。所以掌握HTTP协议明白以下几点就好:

1、用什么通过HTTP协议通信

2、怎么通过HTTP协议通信

 

时间: 2024-11-08 20:26:22

JavaEE 要懂的小事:一、图解Http协议的相关文章

JavaEE 要懂的小事:三、图解Session(会话)

一.Session由来 HTTP的无状态,也就是说,每次请求都是独立的线程.举个例子吧:购物中,你选择了A商品,加入购物车,这就是A线程.然后在选择B商品就是B线程.可是每次线程独立(对容器而言,A.B成了不同的用户),线程A不知道有B,B也不知道A.如何一起付款呢? 简答来说:怎么保存同个用户多个请求会话状态呢?自然HTTPS保证连接是安全的,可以使它与一个会话关联. 问题就在于如何跟踪同一个用户,选择自然很多: 1.EJB(有状态会话bean保存会话状态) 环境苛刻需要带EJB的J2EE服务

JavaEE 要懂的小事:二、图解 Cookie(小甜饼)

这就是因为浏览器Cookie太大,导致请求时,请求头域过大造成发送失败.下面咱们就了解了解Cookie.按着以前的思路图文并茂哈,没图说个XX.   一.概述 首先从HTTP说起,Cookie是Http协议中那部分呢? Cookie是什么? 自问自答:Cookie是请求头域和响应头域的字段.简单地说,就是伴随请求和响应的一组键值对的文本,小文本.所以称之为"Cookie"饼干.Cookie的生命来源于服务器.首先是客户端请求服务端,此时请求为第一次,无Cookie参数.这时候,服务端s

图解Http协议 (转)

  一.技术基石及概述 问:什么是HTTP? 答:HTTP是一个客户端和服务器端请求和响应的标准TCP.其实建立在TCP之上的. 当我们打开百度网页时,是这样的: https://www.baidu.com 多了个S,其实S表示TLS.SSL.在这里不做解释,因此HTTP的技术基石如图所示: 那HTTP协议呢?HTTP协议(HyperText Transfer Protocol),即超文本传输协议是用于服务器传输到客户端浏览器的传输协议.Web上,服务器和客户端利用HTTP协议进行通信会话.有O

图解TCP-IP协议

本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1 TCP 三次握手四次挥手 图1主要包括三部分:建立连接.传输数据.断开连接. 1)建立TCP连接很简单,通过三次握手便可建立连接. 2)建立好连接后,开始传输数据.TCP数据传输牵涉到的概念很多:超时重传.快速重传.流量控制.拥塞控制等等. 3)断开连接的过程也很简单,通过四次握手完成断开连接的过程. 三次握手建立连接: 第

[IT]图解TCP-IP协议

本文通过两个图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1 TCP 三次握手四次挥手 图1主要包括三部分:建立连接.传输数据.断开连接. 建立TCP连接很简单,通过三次握手便可建立连接. 建立好连接后,开始传输数据.TCP数据传输牵涉到的概念很多:超时重传.快速重传.流量控制.拥塞控制等等. 断开连接的过程也很简单,通过四次握手完成断开连接的过程. 1.三次握手建立连接 第一次握手:

存储极客 | 瓜哥图解存储协议

存储极客 这是一群存储偏执狂 为存储而生,跟存储死磕 各具独家秘笈 有观点,有碰撞,有干货 从2015年8月18起 做客存储极客栏目 与你分享存储里的那点事儿 SCSI.IDE.FC及SATA--,这些令人眼花缭乱的存储协议和接口之间都有怎样"剪不断理还乱"的关系呢?今天,我们就听瓜哥细细道来吧. 一.顶层协议描述了什么 在存储系统中,上层协议可以泛指"指令",也就是比如"读出从某某开始的多少长度的扇区",指令包含三大关键信息: 1. 操作码:O

图解https协议

我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取.所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议. HTTPS简介 HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块.服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据.具体是如何进行加密,解密,验证的,且看下图. 1. 客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到serve

图解USB协议之一 枚举过程【转】

转自:http://blog.csdn.net/myarrow/article/details/8270060 0. 枚举流程    • 连接了设备的 HUB 在 HOST 查询其状态改变端点 时返回对应的 bitmap,告知HOST 某个PORT状态发生了改变.    • 主机向 HUB 查询该PORT的状态,得知有设备连接,并知道了该设备的基本特性.     • 主机等待(至少 100mS)设备上电稳定,然后向 HUB 发送请求,复位并使能该PORT.    • HUB执行PORT复位操作,

图解 & 深入浅出 JavaWeb:Servlet 再说几句

Writer      :李强强(泥沙砖瓦浆木匠)原文链接 传送门 上一篇的< Servlet必会必知 >受到大家一致好评 - (感谢 读者 及 OSC 推荐 每日一'搏'),后来觉得还有些东西没点到,这边补充补充. 一.回到 HttpServlet 的 service方法 Servlet 基础接口定义了用于客户端请求处理的service方法. 当请求到达Servlet容器,由Servlet容器路由到一个Servlet实例. 比如说 javax.servlet.http.HttpServlet