java写服务器发送html,Java Web开发之HTTP协议

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

学习Java Web首先要知道Web应用程序的请求过程,客户端与服务器之间是如何通信的,这样我们可以更加灵活的处理请求和响应的消息。

什么是HTTP协议?

HTTP是超文本传输协议(Hypertext Transfer Protocol),它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间的交换数据的过程。(HTTP所用的端口号80,HTTPS所用端口号是443)

主要特点简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。

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

无状态:HTTP是一个无状态的协议,无状态是指WEB浏览器和服务器之间不需要建立持久的联系。

HTTP工作原理

HTTP的工作流程:

1.客户端连接到web服务器

当我们在浏览器输入网址或者当我们点击链接时,HTTP开始工作。

2.发送HTTP请求

建立连接后,客户机发送一个请求给服务器,如当我们在浏览器地址栏输入Michaeljian.top 后回车,浏览器将我们的请求封装成HTTP报文。请求报文的格式:请求行

请求头部

空行

请求数据

3.服务器接受请求并返回HTTP响应

Web服务器解析请求,定义请求资源。服务器将资源复本 写到TCP套接字中,有客户端读取。响应报文的格式:状态行

响应头部

空行

响应数据

4.释放TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求。

5.客户端浏览器解析HTML内容

客户端浏览器首先会解析状态行,查看请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

DNS域名解析

在浏览器地址栏输入URL,按下回车之后会经历以下流程:浏览器向DNS服务器请求解析该URL中的域名对应的IP地址;

解析出IP地址后,根据该IP地址和默认端口80,和服务器建立TCP连接;

浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求报文作为TCP三次握手的第三个报文的数据发送给服务器;

服务器对浏览器请求做出响应,并把对应的HTML文本发送给浏览器;

释放TCP连接;

浏览器将该HTML文本并显示内容;

2de594f00df2ebf98e6f8dbcab764e37.png

HTTP协议版本以及区别

HTTP协议的版本:HTTP/1.0、HTTP/1.1、HTTP/2.0在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。

在HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。

在HTTP2.0协议中,新的二进制格式:HTTP1.x的解析是基于文本协议的格式 解析存在天然的缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二级制在不同,只有0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制的格式,实现方便且健壮。

多路复用:即连接共享,每个request都是用作连接共享机制的。

header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

URI和URL的区别

URL是统一资源地位符(Uniform Resource Locator)。URL是URI的一种,不仅标识了Web 资源,还指定了操作或者获取方式,同时指出了主要访问机制和网络位置。1http://michaeljian.top/

URI是统一资源标识符(Uniform Resource Identifier)。URI是个纯粹的语法结构,用于指定标识Web资源的字符串的各个部分。1例子:ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)

URN是统一资源名称(Uniform Resource Name)URN是URI的一种,用特定命名空间的名字标识资源。使用URN可以在不知道其网络位置及访问方式的情况下讨论资源。

7ad9eab61bb588834e3b03e1284124e6.png

HTTP之请求消息Request

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

2c1f5b023ac05ed998061384194ee28a.png

请求行

请求行中个请求方式最常用的是GET和POST,用户如果没有设置,默认情况下浏览器向服务器发送的都是get请求,例如在浏览器直接输地址访问,点超链接访问等都是get,用户如想把请求方式改为post,可通过更改表单的提交方式实现。

两种方式的主要区别:如果请求方式为GET方式,则可以在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:GET /mail/1.html?name=abc&password=xyz HTTP/1.1 。在URL地址后附带的参数是有限制的

如果请求方式为POST方式,则可以在请求的实体内容中向服务器发送数据,Post方式的特点:传送的数据量无限制。

9b8a2c5228dde1edc45df7498de76458.png

HTTP之响应消息Response

一个HTTP响应代表服务器向客户端回送的数据,它包括: 一个状态行、若干消息头、以及实体内容 。

52320356c629ef9c0988ca187fc1a7de.png

HTTP之状态码

ac2ed96ed56a1bdbefdb79fe79b21b4d.png

HTTP与HTTPS的区别

HTTP是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

HTTPS是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值