Java开发工程师系列讲解之——『http协议篇』

Posted weixin_43802541

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java开发工程师系列讲解之——『http协议篇』相关的知识,希望对你有一定的参考价值。

作为一个软件开发的程序员,那么你肯定知道网络的三大剑客:IP地址、端口号、协议。

简单介绍下这三位:

IP地址:每个设备在网络中的唯一标识;每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。

端口号:每个程序在设备上的唯一标识,每个网络程序都需要绑定一个端口号,端口号范围从0~65535,编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。例如:mysql的端口号是3306、tomcat的端口号是8080等。

协议:协议是为计算机网络中进行数据交换而建立的规则、标准或约定的集合。目前世界上最为广泛的协议还是OSI模型衍生出来的TCP/IP协议族。

如图所示:

我们经常接触到的应用基本上都是处于上面的层,即传输层和应用层;

传输层协议主要为TCP、UDP协议,目前主要应用于即时通讯,例如:QQ、微信、直播、消息推送等。

应用层协议主要由做普通应用和网站的协议http和https,邮件协议SMTP等。这篇文章我们就来介绍下我们做应用基本上必须接触的http协议。

Http协议介绍

HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。它是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。所有的WWW文件传输都都必须遵守这个标准。

HTTP是一个应用层的面向对象的协议,由于其简单、快速、灵活等特点特别适用于分布式超媒体信息系统。

特点

简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。

灵活:HTTP允许传输任意类型的数据对象。传输的类型由Content-Type决定。

无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要之前信息时它的应答就较快。

支持B/S和C/S模式。

Http协议的组成

Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时,你的浏览器会将你的请求封装成一个Http请求发送给服务器站点,服务器接收到请求后会组织响应数据封装成一个Http响应返回给浏览器。即没有请求就没有响应。

HTTP请求由请求行、请求头和请求体三部分组成;

我们写一个form.html的表单页面,如图:

点击提交按钮,抓包如图:

① 请求行

请求行主要包括了请求的方法、请求的资源、协议版本等信息;这里主要我们来看看请求方法;

http请求的方法有多种,其中最常用的就是get和post请求了。

Get和POST请求的区别

首先说明下get和post请求底层都是TCP连接,所以本质一样,但是由于 HTTP 的规定以及浏览器/服务器的限制导致它们在应用过程中有所不同:

get请求的参数是拼接在url上,而post请求是通过request body发送

get请求数据的大小会受到url地址长度的限制而限制,而post请求没有限制

get请求会被浏览器缓存下来,如果下次传输数据相同则返回缓存中的内容已达到更快的展示数据,而post请求则不会

根据 HTTP 规范,GET 用于信息获取,POST 方法则用于修改服务器上的资源

GET 方法只产生一个 TCP 数据包,浏览器会把请求头和请求数据一并发送出去,POST 方法会产生两个 TCP 数据包,浏览器会先将请求头发送给服务器,待服务器响应100 continue,浏览器再发送请求数据

② 请求头

请求头是客户端发送给服务器端的一些信息,服务器端就可以通过请求的各种信息完成指定的操作,请求头中的信息使用键值对的方式表示。

③ 请求体

请求体就是我们发送请求传递的数据。

如果是get请求那么数据会拼接在url地址后面,如:

http://localhost:8080…?username=zhangsan&password=123

参数传递格式为:key=value & key2=value2 …

如果是Post请求的话,url地址上是看不到的,但是在“检查”模式下是可以看到的。

HTTP响应指的是我们请求服务器之后,服务器返回的内容,主要由响应行、响应头、响应体组成;

① 响应行

响应行中最主要的信息就是响应码了,通过响应码我们可以知道请求是成功了还是失败了以及其他情况。

常用状态码如下:

② 响应头

响应头也都是键值对形式,服务器端将信息以键值对的形式返回给客户端。

③ 响应体

响应体是服务器回写给客户端的页面正文,浏览器将正文加载到内存,然后解析渲染显示页面内容。通常响应体的内容格式为网页或者JSON格式,如图所示。

后面的文章我们将介绍下https协议的不同非凡之处。

【未完待续…】

以上是关于Java开发工程师系列讲解之——『http协议篇』的主要内容,如果未能解决你的问题,请参考以下文章

RK3399平台开发系列讲解(网络篇)7.24IP协议源码分析

高通平台开发系列讲解(USB篇)MBIM协议详解

高通平台开发系列讲解(USB篇)MBIM协议详解

RK3399平台开发系列讲解(高速设备驱动篇)6.64USB 协议标准

RK3399平台开发系列讲解(网络篇)7.36ARP协议与邻居子系统剖析

高通平台开发系列讲解(协议篇)QMI简单介绍及使用方法