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

Writer      :BYSocket(泥沙砖瓦浆木匠)java

微         博:BYSocket浏览器

豆         瓣:BYSocket缓存

FaceBook:BYSocket服务器

Twitter    :BYSocket并发

泥瓦匠记得和左潇龙【博客园】上次聊天时,龙哥问了个Session的问题。我当时的理解就是云里雾里,先从Http协议理解开始吧。框架

1、技术基石及概述

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

当咱们打开百度网页时,是这样的:性能

https://www.baidu.com测试

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

绘图1

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

绘图1

 

2、深刻理解技术基石和工做流程

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

绘图1

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

 

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

一、客户端与服务器须要创建链接。(好比某个超级连接,HTTP就开始了。)

二、创建链接后,发送请求。

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

四、客户端接收服务器所返回的信息经过浏览器显示在用户的显示屏上,而后客户机与服务器断开链接。

创建链接,其实创建在TCP链接基础之上。图解核心工做过程(即省去链接过程)以下:

绘图1

 

3、详解工做过程的HTTP报文

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

1、请求报文格式以下:

请求行

通用信息头

请求头

实体头

(空行)

报文主体

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

image

对于其中请求报文详解:

一、请求行

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

二、通用信息头

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

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

三、请求头

    Host头域,脑补吧

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

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

 

四、报文主体

如图中的 “ p=278 ”通常来讲,请求主体少不了请求参数。

2、应答报文格式以下:

状态行

通用信息头

响应头

实体头

(空行)

报文主体

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

image

对其中响应报文详解:

一、状态行

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

    【好比这里,200 表明请求成功】

二、通用信息头

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

    Date头域:时间描述

三、响应头

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

四、实体头

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

(空行)

五、报文主体

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

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

 

3、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,在浏览器第一次打开百度时,如图所示:

3AD)@_I2E8DMDH]35GHV1DL

刷新一下:

image

这上面的304就证实了

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

二、以上因此HTTP请求,只靠一个TCP链接,这就是所谓的持久链接。

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

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

image

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

 

5、总结

回顾全文,HTTP协议其实就是咱们对话同样,语言就是其中的协议。因此掌握HTTP协议明白如下几点就好:

一、用什么经过HTTP协议通讯

二、怎么经过HTTP协议通讯

 

Writer      :BYSocket(泥沙砖瓦浆木匠)

微         博:BYSocket

豆         瓣:BYSocket

FaceBook:BYSocket

Twitter    :BYSocket

相关文章
相关标签/搜索