JavaWeb 13.HTTP协议

和自己的情绪共处,永远保持乐观

                                        —— 24.9.26

一、HTTP简介

HTTP 超文本传输协议 (HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几十年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。客户端与服务端通信时传输的内容我们称之为报文HTTP协议就是规定报文的格式。HTTP就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送给服务器的称为“请求报文",服务器发送给客户端的称为"响应报文"。

二、发展历程

① HTTP/0.9 :

蒂姆伯纳斯李是一位英国计算机科学家,也是万维网的发明者。他在 1989年创建了单行 HTTP 协议。它只是返回一个网页。这个协议在 1991年被命名为 HTTP/0.9。

② HTTP/1.0

1996年,HTTP/1.0发布。该规范是显著扩大,并且支持三种请求方式:GET,HEAD,和POST。

HTTP/1.0 相对于 HTTP/0.9 的改进如下:
        每个请求都附加了 HTTP 版本;
        在响应开始时发送状态代码;
        请求和响应都包含 HTTP 报文头;
        内容类型能够传输 HTML 文件以外的文档;

但是,HTTP/1.0 不是官方标准。

③ HTTP/1.1: 

HTTP 的第一个标准化版本 HTTP/1.1(RFC 2068)于1997 年初发布,

支持七种请求方法:OPTIONS,GET, HEAD,POST,PUT,DELETE,和TRACE
HTTP/1.1 是 HTTP 1.0 的增强:
        虚拟主机允许从单个IP地址提供多个域:

        持久连接和流水线连接允许Web浏览器通过单个持久连接发送多个请求;

        缓存支持节省了带宽并使响应速度更快;。

HTTP/1.1 在接下来的 15 年左右将非常稳定。在此期间,出现了 HTTPS(安全超文本传输协议)。它是使用 SSL/TLS 进行安全加密通信的 HTTP的安全版本。

TomCat默认使用HTTP/1.1协议

④ HTTP/2:

由IETF在2015年发布。HTTP/2旨在提高Web性能,减少延迟,增加安全性,使Web应用更加快速、高效和可靠。
多路复用:HTTP/2 允许同时发送多个请求和响应,而不是像 HTTP/1.1一样只能一个一个地处理。这样可以减少延迟,提高效率,提高网络吞吐量。

二进制传输:HTTP/2 使用二进制协议,与 HTTP/1.1 使用的文本协议不同。二进制协议可以更快地解析,更有效地传输数据,减少了传输过程中的开销和延迟。

头部压缩:HTTP/2 使用 HPACK 算法对 HTTP 头部进行压缩,减少了头部传输的数据量,从而减少了网络延迟。
服务器推送:HTTP/2 支持服务器推送,允许服务器在客户端请求之前推送资源,以提高性能。

改进的安全性:HTTP/2默认使用TLS(Transport Layer Security)加密传输数据,提高了安全性。

兼容 HTTP/1.1:HTTP/2 可以与 HTTP/1.1共存,服务器可以同时支持 HTTP/1.1和 HTTP/2。如果客户端不支持 HTTP/2,服务器可以回退到 HTTP/1.1。

⑤ HTTP/3:

于 2021年5月27日发布,HTTP/3是一种新的、快速、可靠且安全的协议,适用于所有形式的设备。 HTTP/3 没有使用 TCP,而是使用谷歌在 2012年开发的新协议 QUIC。

HTTP/3 是继 HTTP/1.1和 HTTP/2之后的第三次重大修订。HTTP/3 带来了革命性的变化,以提高 Web 性能和安全性。设置 HTTP/3 网站需要服务器和浏览器支持。
目前,谷歌云、Cloudflare和Fastly支持HTTP/3。Chrome、Firefox、Edge、Opera和一些移动浏览器支持 HTTP/3。 

三、HTTP协议的会话方式

浏览器与WEB服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB服务器都要建立一次单独的连接。浏览器到WEB服务器之间的所有通讯都是完全独立分开的请求和响应对。

http/1.1协议特点

1.交互的方式

        请求        永远都是客户端向服务端发送

        响应        永远都是服务端向客户端返回

2.数据的格式

请求时发送的数据称之为请求报文

响应时返回的数据称之为响应报文

报文的规定格式:

        报文首部        请求报文        响应报文

             行                请求行            相应行

             头                请求头            响应头

          报文主体         请求体            响应体     

3.http长连接和短链接的问题

        http        应用层协议(只规定了数据格式,如何发送不管)         http/tcp/ip

        tcp          传输层协议 (默认使用TCP协议)                               面向连接的协议

        ip            网络层协议 (确定网络层传输实体)      

4.tcp协议的三次握手和四次挥手

因为要创建链接,所以有面向连接的协议:tcp协议,所以区分了长短链接、持久链接之分

长短连接的区分:短链接建立一次请求后就关闭一次链接,长链接直到所有请求完成后才关闭链接,减少了连接的创建次数,减少了缓存

四、请求和响应报文

1.报文的格式

报文分为报文首部和报文主体:行、头、体

        报文首部:服务器端或客户端需处理的请求或响应的内容及属性

        报文主体:应该被发送的数据

报文首部可继续细分为“行”和“头”

2.请求报文

客户端发给服务端的报文

请求报文格式:

        请求首行(请求行);GET/POST 资源路径?参数 HTTP/1.1

        请求头信息(请求头)

        空行

        请求体

请求行:请求方式、资源路径、协议与版本

GET /05_web_tomcat/login_success.html username=admin password=123213 HTTP/1.1

请求头:

- 主机虚拟地址
Host: localhost:8080 - 长连接
Connection: keep-alive - 请求协议的自动升级 http的请求,服务器却是https的,浏览器自动会将请求协议升级为https的
Upgrade-Insecure- e uests: 1  - 用户系统信息
User-Agent: Mozilla/5.0 ( Windows T 6.1; O 64) AppleWebKit/537.36 ( HTML, like Gecko) 
Chrome/68.0.3440.75 Safari/537.36- 浏览器支持的文件类型
Accept:text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,*/*;q=0.8- 当前页面的上一个页面的路径[当前页面通过哪个页面跳转过来的]:   可以通过此路径跳转回上一个页面, 广告计费,防止盗链
Referer: http://localhost:8080/05_web_tomcat/login.html- 浏览器支持的压缩格式
Accept-Encoding: gzip, deflate, br- 浏览器支持的语言
Accept-Language: zh-C ,zh; q=0.9,en-US; q=0.8,en; q=0.7

请求体:使用form表单发送POST请求,请求体中才有数据

3.响应报文

响应报文格式:

        响应首行(响应行);协议/版本 状态码 状态码描述

        响应头信息(响应头)

        空行

        响应体

响应行:

        组成部分:

                协议及版本HTTP/1.1

                响应状态码 200

                状态描述 OK(缺省)

HTTP/1.1 200 O (缺省)

响应头:

Server: Apache-Coyote/1.1            服务器的版本信息
Accept- anges: bytes
ETag: /"157-1534126125811"
Last-Modified: Mon, 13 Aug 2018 02:08:45 GMT
Content-Type: text/html              响应体数据的类型浏览器根据类型解析响应体数据   
Content-Length: 157                 响应体内容的字节数 
Date: Mon, 13 Aug 2018 02:47:57 GMT  响应的时间,这可能会有8小时的时区差

响应体:

<!--需要浏览器解析使用的内容如果响应的是html页面,最终响应体内容会被浏览器显示到页面中--><!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body>恭喜你,登录成功了...</body></html>

五、常见响应状态码

响应状态码:响应码对浏览器来说很要,它告诉浏览器响应的结果。比较有代表性的响应码如下:

        200:请求成功,浏览器会把响应体内容(通常是html)显示在浏览器中;

        302:重定向,当响应码为302时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头Location指定新请求的URL地址;

        304:使用了本地缓存;

        404:请求的资源没有找到,说明客户端错误的请求了不存在的资源

        405:请求的方式不允许;

        500:请求资源找到了,但服务器内部出现了错误;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547187.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

考研数据结构——C语言实现归并排序

包含头文件&#xff1a;程序首先包含了标准输入输出库stdio.h&#xff0c;以便使用printf等函数进行输入输出操作。 定义数组和数组大小&#xff1a;定义了一个宏N&#xff0c;其值为5&#xff0c;表示数组q的长度。数组q被初始化为{5, 3, 8, 4, 2}&#xff0c;这是我们要排序…

BFS 解决 FloodFill 算法

BFS 解决 FloodFill 算法 题目一&#xff1a; 图像渲染1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 算法思路&#xff1a;4.代码 题目二&#xff1a; 岛屿数量1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 算法思路&#xff1a;4.代码 题目三&#xff1a;被围绕的…

论文不会写怎么办?推荐这5款AI论文工具帮你一键搞定!

在当今的学术研究和写作领域&#xff0c;AI论文工具已经成为不可或缺的助手。这些工具不仅能够提高写作效率&#xff0c;还能帮助研究者生成高质量的论文。本文将推荐五款优秀的AI论文工具&#xff0c;并特别推荐千笔-AIPassPaper&#xff0c;以帮助读者更好地完成学术写作任务…

OJ在线评测系统 后端 判题机模块预开发 架构分析 使用工厂模式搭建

判题机模块预开发(架构师)(工厂模式) 判题机模块 是为了把代码交个代码沙箱去处理 得到结果返回 代码沙箱 梳理判题模块和代码沙箱的关系 判题模块&#xff1a;调用代码沙箱 把代码和输入交给代码沙箱去执行 代码沙箱&#xff1a;只负责接受代码和输入 返回编译的结果 不负…

初始化的代码块和@PostConstruct有什么区别

背景 在实际开发中&#xff0c;我们经常会需要进行一些初始化操作&#xff0c;比如进行一些预加载和赋值之类的。在代码中&#xff0c;常见的有通过静态代码块、非静态代码块&#xff0c;PostConstruct来实现初始化。那么既然他们都可以实现初始化操作&#xff0c;那么他们有什…

Ubuntu 开机自启动 .py / .sh 脚本,可通过脚本启动 roslaunch/roscore等

前言 项目中要求上电自启动定位程序&#xff0c;所以摸索了一种 Ubuntu 系统下开机自启动的方法&#xff0c;开机自启动 .sh 脚本&#xff0c;加载 ROS 环境的同时启动 .py 脚本。在 . py 脚本中启动一系列 ROS 节点。 一、 .sh 脚本的编写 #!/bin/bash # gnome-terminal -- …

JetPack03-ViewModel 保证界面数据稳定性

前提 Activity横竖屏切换后&#xff0c;Activity中的数据会丢失。 因为横竖屏切换后&#xff0c;Activity会销毁重建&#xff0c;生命周期会执行onPause->onStop->onDestroy->onCreate->onStart->onReusme。 简介 ViewModel能保证Activity中数据的稳定性&…

【C++】map和set的介绍和使用

1.序列式容器与关联式容器 序列式容器&#xff1a; 底层为线性序列的数据结构&#xff0c; 里面存储的是元素本身 。如vector/list/string/deque/forward_list。 关联式容器&#xff1a; 也是用来存储数据的&#xff0c;于序列式容器不同的是&#xff0c; 里面存储的是<key&…

Python酷库之旅-第三方库Pandas(127)

目录 一、用法精讲 566、pandas.DataFrame.swapaxes方法 566-1、语法 566-2、参数 566-3、功能 566-4、返回值 566-5、说明 566-6、用法 566-6-1、数据准备 566-6-2、代码示例 566-6-3、结果输出 567、pandas.DataFrame.melt方法 567-1、语法 567-2、参数 567-3…

第三十篇——总结:成功的捷径是没有捷径

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 最终的总结&#xff0c;釜底抽薪&#xff0c;又一次如雷贯耳&#xff0c;…

9月26日

1.虚函数与纯虚函数&#xff1a; 在类中定义函数时&#xff0c;在函数前加关键字 virtual &#xff0c;允许在派生类中重写的方法。那么该函数就是虚函数。 纯虚函数&#xff1a;没有实现的方法&#xff0c;用于定义接口。 2.基类为什么需要虚析构函数&#xff1a; 确保删除派生…

找不到MSVCR100.dll怎么办,解决MSVCR100.dll丢失的六种方法

在计算机的日常使用中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是MSVCR100.dll文件丢失。这个文件是Microsoft Visual C 2010的一个组件&#xff0c;如果丢失&#xff0c;可能会导致某些程序无法正常运行。那么&#xff0c;如何解决这个问题呢&#xff…

记一次Windows状态栏不显示问题

文章目录 &#x1fa9f;解决方案☁️单次处理☁️有效处理 &#x1fa9f;现象&#x1fa9f;尝试的操作⭐END&#x1f31f;跋&#x1f31f;交流方式 &#x1fa9f;解决方案 ☁️单次处理 重启explorer.exe 命令行操作 注意&#xff0c;使用命令行操作的时候&#xff0c;出现…

[嵌入式] 3588测试镜头推流拉流步骤

1. RK驱动下载 识别不出来设备&#xff0c;成砖了之后&#xff0c;在插上电源之前&#xff0c;按住boot键&#xff0c;再上电。 2. 在嵌入式设备中&#xff0c;执行命令&#xff0c;rtsp_server rtsp_server -I 1 -d /dev/video22 -w 640 -h 480 推流&#xff0c;用vlc拉流…

linux信号 | 学习信号三步走 | 全解析信号的产生方式

前言&#xff1a;本节内容是信号&#xff0c; 主要讲解的是信号的产生。信号的产生是我们学习信号的第二个阶段。 我们已经学习过第一个阶段——信号的概念与预备知识&#xff08;没有学过的友友可以查看我的前一篇文章&#xff09;。 以及我们还没有学习信号的第三个阶段——信…

【理解 Java 中的 for 循环】

理解 Java 中的 for 循环 for 循环是 Java 中用于迭代的常用控制结构&#xff0c;它可以帮助我们重复执行某段代码&#xff0c;直到满足特定条件。本文将介绍 for 循环的基本语法、执行流程、注意事项及一些练习。 基本语法 for 循环的基本语法如下&#xff1a; for (循环变…

你知道吗?制造手机芯片的关键竟然是一台“打印机”?

在我们每天离不开的智能手机里&#xff0c;藏着一颗小小的“心脏”——芯片。它虽小&#xff0c;却拥有着强大的计算能力&#xff0c;能够让我们随时随地与世界保持连接。你可能想象不到&#xff0c;制造这些精密芯片的关键设备&#xff0c;竟然与我们日常使用的打印机有着惊人…

PD快充是如何诱骗取电的

PD诱骗取电原理&#xff0c;主要指的是在使用USB Power Delivery(USB PD)协议的场景中&#xff0c;通过一种特殊设计的芯片来模拟受电设备&#xff08;如移动设备、充电宝等&#xff09;支持特定功率等级的过程。通常情况下&#xff0c;当一个支持PD协议的充电器连接到设备时…

2024年研究生数学建模“华为杯”E题——肘部法则、k-means聚类、目标检测(python)、ARIMA、逻辑回归、混淆矩阵(附:目标检测代码)

文章目录 一、情况介绍二、思路情况二、代码展示三、感受 一、情况介绍 前几天也是参加了研究生数学建模竞赛&#xff08;也就是华为杯&#xff09;&#xff0c;也是和本校的两个数学学院的朋友在网上组的队伍。昨天&#xff08;9.25&#xff09;通宵干完论文&#xff08;一条…

C语言编译和链接详解(通俗易懂,深入本质)

我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有.exe和.com(其中.exe比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判…