HTTP协议和web服务器(Tomcat)

news2024/9/20 0:33:40

Author:Dawn_T17🥥

目录

二.请求协议

 三.响应协议

四.协议解析

Socket 编程

Servlet介绍

 Web服务器

五.Tomcat 简介


HTTP 即超文本传输协议

它是一种应用层协议,用于客户端(如浏览器)和服务器之间的通信。

为什么叫协议?

“协议”这个词在计算机网络中的使用,是因为它代表了一种双方或多方之间达成的约定、规则和标准。

就像在日常生活中,人们之间的交流和合作需要遵循一定的约定和规则一样,在计算机网络中,不同的设备、程序和系统之间要进行有效的通信和数据交换,也必须遵循共同认可的一套规范。

之所以使用“协议”这个名称,是因为它形象地表达了以下几个关键特点:

  1. 约定性:协议是各方共同同意并遵守的规定,类似于合同或契约。
  2. 规范性:明确了通信的方式、格式、顺序、错误处理等方面的标准,确保通信的准确性和一致性。
  3. 交互性:定义了双方或多方在通信过程中的角色和责任,以及如何相互响应和配合。

例如,HTTP 协议规定了客户端(如浏览器)如何向服务器请求资源,以及服务器如何回应这些请求的具体方式。TCP 协议则规定了数据在网络中传输的可靠性保证、流量控制等规则。

通过遵循这些协议,不同的网络组件能够相互理解和协作,从而实现高效、可靠的网络通信。

特点: 

无状态举例:

在登录操作中,HTTP 的无状态就体现为,当用户成功登录后,下一次发送其他请求时比如点击联系人,服务器并不能直接知道这个用户已经登录过了。

为了解决这个问题,通常会在登录成功时在客户端设置 Cookie,其中包含登录状态等相关信息。之后每次请求时,客户端会自动带上这个 Cookie,服务器通过解析 Cookie 来确认用户的登录状态和相关信息,从而实现类似有状态的效果。

Tip

{

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

{(TCP 协议是计算机网络专业课中非常重要的知识点。它在计算机网络的体系结构、数据传输、网络通信等方面都有着核心的地位,是计算机网络专业学生必须要深入理解和掌握的内容)

主要特点包括:

  • 面向连接:在通信之前需要建立连接。
  • 可靠传输:通过确认、重传等机制保证数据的可靠到达。
  • 提供流量控制和拥塞控制,避免网络拥塞。
  • 对数据进行分段和重组。

TCP 工作时,首先通过三次握手建立连接,然后进行数据传输,传输完成后通过四次挥手来释放连接。它为上层应用提供了稳定可靠的数据传输服务,广泛应用于各种网络通信场景。

 }

HTTP协议和TCP协议的关系

HTTP 协议(超文本传输协议)和 TCP 协议(传输控制协议)在网络通信中都起着重要的作用,但它们在功能和层次上有所不同。

TCP 协议

  1. 位置和作用:位于传输层,提供面向连接的、可靠的数据传输服务。
  2. 连接建立:在数据传输之前,需要进行三次握手来建立连接。
  3. 可靠性保证:通过序列号、确认应答、重传机制等确保数据的准确无误传输。
  4. 流量控制和拥塞控制:通过窗口机制进行流量控制,避免接收方缓冲区溢出;根据网络拥塞情况调整发送数据的速率。

HTTP 协议

  1. 位置和作用:位于应用层,是用于在 Web 上传输超文本的协议。
  2. 基于 TCP:HTTP 协议通常是基于 TCP 协议来实现数据传输的。
  3. 请求 - 响应模式:客户端发送请求,服务器返回响应。
  4. 定义了请求方法(如 GET、POST 等)、状态码(表示请求的结果)、头部信息和消息体等。

例如,当您在浏览器中输入一个网址并请求访问网页时:

首先,浏览器与服务器之间会基于 TCP 协议建立连接。

然后,浏览器使用 HTTP 协议向服务器发送 GET 请求,以获取指定的网页资源。服务器接收到请求后,处理请求并通过 HTTP 协议向浏览器返回响应,其中包含网页的 HTML 代码等内容。

总之,TCP 协议为 HTTP 协议提供了可靠的底层数据传输服务,而 HTTP 协议则定义了在 Web 环境中如何进行数据的请求和响应。

二.请求协议

HTTP 请求协议包含以下主要部分:

请求行:包含请求方法(如 GET、POST 等)、请求的资源路径(URL)和 HTTP 版本。

请求头:包含各种关于请求的信息,如 Accept、User-Agent 等。

空行:用于分隔请求头和请求体。

请求体(可选):在 POST 等方法中用于传递具体的数据。

在 HTTP 请求协议中,常见的一些关键的请求头键值(key 值)有:

  • Host:表示请求的目标主机。
  • User-Agent:描述客户端的信息。
  • Accept:表明可接受的内容类型。
  • Accept-Language:偏好的语言。
  • Accept-Encoding:可接受的编码方式。
  • Content-Type:如果有请求体,用于说明请求体的数据类型。
  • Content-Length:请求体的长度。
  • Authorization:用于身份验证相关信息。
  • Cookie:包含客户端携带的 Cookie 信息。
  • Referer:指示请求的来源页面。

 三.响应协议

一、状态码大类

| 状态码分类 |                             说明                               |

| ---------- | ------------------------------------------------------------ |

| 1xx        | **响应中**——临时状态码,表示请求已经接受,告诉客户端应该继续请求或者如果它已经完成则忽略它 |

| 2xx        | **成功**——表示请求已经被成功接收,处理已完成                 |

| 3xx        | **重定向**——重定向到其它地方:它让客户端再发起一个请求以完成整个处理。 |

| 4xx        | **客户端错误**——处理发生错误,责任在客户端,如:客户端的请求一个不存在的资源,客户端未被授权,禁止访问等 |

| 5xx        | **服务器端错误**——处理发生错误,责任在服务端,如:服务端抛出异常,路由出错,HTTP版本不支持等 |

重定向是指服务器通知客户端去访问另一个资源。

常见的重定向状态码有 301(永久重定向)和 302(临时重定向)

 二、常见的响应状态码

| 状态码  | 英文描述                               | 解释                                                         |

| ------- | -------------------------------------- | ------------------------------------------------------------ |

| ==200== | **`OK`**                               | 客户端请求成功,即**处理成功**,这是我们最想看到的状态码     |

| 302     | **`Found`**                            | 指示所请求的资源已移动到由`Location`响应头给定的 URL,浏览器会自动重新访问到这个页面 |

| 304     | **`Not Modified`**                     | 告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向 |

| 400     | **`Bad Request`**                      | 客户端请求有**语法错误**,不能被服务器所理解                 |

| 403     | **`Forbidden`**                        | 服务器收到请求,但是**拒绝提供服务**,比如:没有权限访问相关资源 |

| ==404== | **`Not Found`**                        | **请求资源不存在**,一般是URL输入有误,或者网站资源被删除了  |

| 405     | **`Method Not Allowed`**               | 请求方式有误,比如应该用GET请求方式的资源,用了POST          |

| 428     | **`Precondition Required`**            | **服务器要求有条件的请求**,告诉客户端要想访问该资源,必须携带特定的请求头 |

| 429     | **`Too Many Requests`**                | 指示用户在给定时间内发送了**太多请求**(“限速”),配合 Retry-After(多长时间后可以请求)响应头一起使用 |

| 431     | **` Request Header Fields Too Large`** | **请求头太大**,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。 |

| ==500== | **`Internal Server Error`**            | **服务器发生不可预期的错误**。服务器出异常了,赶紧看日志去吧 |

| 503     | **`Service Unavailable`**              | **服务器尚未准备好处理请求**,服务器刚刚启动,还未初始化好   |

状态码展示::

状态码大全:状态 | Status - HTTP 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云 (tencent.com)

响应格式 

响应行:包含 HTTP 版本、状态码(如 200 表示成功)。

响应头:包含各种关于响应的信息,如 Content-Type、Content-Length 等。

空行

响应体:实际要返回给客户端的数据内容。

四.协议解析

Socket 编程

为什么叫socket

“Socket”这个词在网络编程中被用来表示通信的端点,之所以被称为“Socket”(套接字),可能是因为它类似于一个插座或接口,通过这个“接口”,不同的程序或计算机可以进行连接和数据交换。

就好像电器插头插入插座来建立电力连接一样,网络中的应用程序通过“套接字”建立通信连接。这种形象的比喻有助于理解和描述网络通信中两个端点之间的连接和交互方式。

作用

套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。

当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。

java.net.Socket 类代表一个套接字,并且 java.net.ServerSocket 类为服务器程序提供了一种来监听客户端,并与他们建立连接的机制。

以下步骤在两台计算机之间使用套接字建立TCP连接时会出现:

  • 服务器实例化一个 ServerSocket 对象,表示通过服务器上的端口通信。

  • 服务器调用 ServerSocket 类的 accept() 方法,该方法将一直等待,直到客户端连接到服务器上给定的端口。

  • 服务器正在等待时,一个客户端实例化一个 Socket 对象,指定服务器名称和端口号来请求连接。

  • Socket 类的构造函数试图将客户端连接到指定的服务器和端口号。如果通信被建立,则在客户端创建一个 Socket 对象能够与服务器进行通信。

  • 在服务器端,accept() 方法返回服务器上一个新的 socket 引用,该 socket 连接到客户端的 socket。

连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流。

TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送。

Servlet介绍

“servlet”常见释义为“小服务程序; servlet 程序

Servlet 是运行在 Web 服务器上的 Java 程序,用于处理客户端(通常是浏览器)的请求并生成动态的响应。

以下是 Servlet 的一些关键特点和要点:

  1. 基于 Java 语言:利用 Java 的强大功能和特性来实现 Web 应用的逻辑处理。
  2. 处理请求和响应:接收来自客户端的 HTTP 请求,并生成相应的 HTTP 响应。
  3. 生命周期管理:由 Web 容器(如 Tomcat)进行管理,包括初始化、服务和销毁等阶段。
  4. 与 Web 应用集成:通常与其他 Web 技术(如 JSP、HTML、CSS、JavaScript 等)结合使用,构建完整的 Web 应用。

例如,一个简单的 Servlet 可能会处理用户的登录请求,验证用户名和密码,并根据验证结果返回相应的响应页面。

Servlet 的使用可以提高 Web 应用的可维护性、可扩展性和性能,是 Java Web 开发中的重要组成部分。

复制重新生成

介绍一下 Tomcat 服务器的工作原理

详细介绍一下 Java Web 开发中的 Servlet 生命周期

怎样在 Java Web 应用中使用 Servlet?

 Web服务器

因为 HTTP 协议固定,开发 Web 都要解析 HTTP 协议,所以 Web 服务器通常都内置了对 HTTP 协议的解析功能。

Web 应用服务器是一种软件,用于托管和运行 Web 应用程序,处理来自客户端的请求并返回响应。

Web 服务器主要有以下重要作用:

  1. 接收和处理请求:Web 服务器能够接收来自客户端(如浏览器)的 HTTP 请求,这些请求可能是获取网页、提交表单数据、上传文件等。
  2. 查找和提供资源:根据请求的 URL,Web 服务器在服务器的文件系统或相关数据库中查找对应的资源,如 HTML 文件、图片、CSS 样式表、JavaScript 脚本等。
  3. 运行服务器端脚本和程序:如果请求涉及到服务器端的动态内容生成,例如使用 PHP、Python、Java Servlet 等技术,Web 服务器会执行相应的脚本或程序来生成动态的响应内容。
  4. 建立和维护连接:管理与客户端的连接,确保通信的稳定性和可靠性。
  5. 处理安全性和认证:可以进行一些基本的安全设置,如访问控制、用户认证等,以保护服务器上的资源。
  6. 缓存和优化性能:通过缓存经常请求的资源和优化数据传输,提高响应速度和服务器的性能。

例如,当您在浏览器中输入一个网址并按下回车键时,Web 服务器会接收到这个请求,查找对应的网页文件并将其发送回您的浏览器进行显示。

不同的 Web 服务器软件在功能和性能上可能会有所差异,但总体上都围绕着上述主要作用来为用户提供 Web 服务。

 

五.Tomcat 简介

Tomcat 是一个开源的、流行的 Web 应用服务器。它实现了 Java Servlet 和 JavaServer Pages(JSP)等技术规范,能够处理 HTTP 请求并运行 Java Web 应用程序。

Tomcat 通常作为一个独立的服务器进程运行,可以进行详细的配置,如端口设置、连接池配置、虚拟主机配置等。它适用于大规模的、复杂的 Web 应用部署场景。

例如,在企业级的 Web 应用中,可能会将 Tomcat 安装在专门的服务器上,并与其他服务器软件(如数据库服务器)协同工作。

官网:Apache Tomcat® - 欢迎! 

SpringBoot内嵌了tomcat

 

联网下载获得骨架代码 

有Tomcat的依赖 

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

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

相关文章

《网络安全自学教程》- Linux安全标识符、身份鉴别、访问控制

《网络安全自学教程》 操作系统有4个安全目标,也就是说想要保证操作系统的安全,就必须实现这4个需求: 标识系统中的用户和进行身份鉴别。依据系统安全策略对用户的操作进行访问控制,防止用户和外来入侵者对计算机资源的非法访问。…

mysql误删数据恢复记录

背景 1、数据库版本 5.7.36,由于误操作删掉了表的所有数据,但是数据库备份每天凌晨进行、只能从备份恢复昨日的全量数据,当日的数据将会丢失 查看binlog配置 尝试恢复 1、找到binlog文件 误删除后立即刷新binlog flush logs 2、binlog转…

OpenAI GPT-2 model use with TensorFlow JS

题意:使用 TensorFlow JS 应用 OpenAI GPT-2 模型 问题背景: Is that possible to generate texts from OpenAI GPT-2 using TensorFlowJS? 是否可以使用 TensorFlowJS 生成 OpenAI GPT-2 的文本? If not what is the limitation, like mo…

010集——按值传递、按引用传递等方法——C#学习笔记

按值传递参数 这是参数传递的默认方式。在这种方式下,当调用一个方法时,会为每个值参数创建一个新的存储位置。 实际参数的值会复制给形参,实参和形参使用的是两个不同内存中的值。所以,当形参的值发生改变时,不会影…

MDK常见概念

(1)typedef定义结构体类型 typedef struct {uint32_t BaudRate;uint32_t WordLength;uint32_t StopBits;uint32_t Parity;uint32_t Mode;uint32_t HwFlowCtl;uint32_t OverSampling; } UART_InitTypeDef; (2)寄存器 (3)DMA DMA 是…

2024年第八届计算生物学与生物信息学国际会议 (ICCBB 2024)即将召开!

2024 年第八届计算生物学和生物信息学国际会议(ICCBB 2024)将于2024年11月28 -30在日本京都召开,ICCBB 2024是展示理论、实验和应用计算生物学和生物信息学领域新进展和研究成果的主要论坛之一。我们相信,通过大家的共同努力&…

【问题】容器部署场景Spring Bean偶尔循环依赖问题

问题描述 在本地开发中不会发生循环依赖问题,但是在容器场景下,制作成镜像启动后异常出现Bean的循环依赖。 问题原因 开发者在代码中使用构造函数注入来引用依赖的 Bean,这种方式可能导致循环依赖问题。虽然 Spring 框架具备循环依赖的处理…

thinkphp漏洞之sql注入漏洞-builder处漏洞

目录 适用版本 环境搭建 文件下载安装 配置文件修改 漏洞分析 适用版本 注&#xff1a;thinkphp版本&#xff1a;5.0.13<ThinkPHP<5.0.15 、 5.1.0<ThinkPHP<5.1.5 环境搭建 文件下载安装 在github上面下载相应版本&#xff0c;下载think文件&#xff0c;…

乳制品企业怎么防止信息泄露?使用加密软件保障数据安全

乳,制品行业使用加密软件主要是为了保障企业的核心数据安全&#xff0c;防止敏感信息泄露&#xff0c;如:产品配方、生产流程、销售数据等&#xff0c;通过使用加密软件&#xff0c;来保护重要的数据.。一、加密软件在乳制品企业的重要性1、保护重要数据:乳制品企业拥有大量敏感…

SQL 变量写法、排序问题 <12>

一、定义变量排序 目的1&#xff1a;合并学生表和分数表&#xff0c;将每个班分别排名 目的2&#xff1a;遇到相同分数&#xff0c;考虑还是不考虑相同分数排名 学生表&#xff08;1000条&#xff09;和分数表&#xff08;6000条&#xff09;分别如下 1、定义变量、简答排序…

datax和datax-web打包成docker运行

概述 datax和datax-web从一台机器迁移到另一台时&#xff0c;要重新搭建一套运行环境&#xff0c;比较麻烦&#xff1b;打包成docker镜像后迁移就方便多了; 因为我的mysql版本是8&#xff0c;需要在datax的read和write中手动添加8的jdbc驱动 所以我先各自下载好了datax和data…

JavaEE 的入门

1. 学习JavaEE Java EE(Java Platform Enterprise Edition), Java 平台企业版. 是JavaSE的扩展, ⽤于解决企业级的开 发需求, 所以也可以称之为是⼀组⽤于企业开发的Java技术标准. 所以, 学习JavaEE主要是学习Java在 企业中如何应⽤. 前⾯学习的是Java基础, JavaEE 主要学习Jav…

修改docker数据存储目录及拉取镜像安装oracle19c

一、修改docker数据目录&#xff0c;默认安装路径为/var/lib/docker 查看docker主路径 docker info |grep "Docker Root Dir"1.停服务 systemctl stop docker2.新建目录并授权 mkdir /data/docker -p chown -R root:docker /data/docker/3.修改配置文件 原有{}内…

微信小程序预览PDF、H5预览PDF、网页预览PDF,并添加专属文字水印

下载PDF.js 点击PDF.js下载地址 引入预览PDF 文件 // const url new URL("./1.pdf", import.meta.url).href // 在本地项目获取pdf // const url "https://xxxx/05d833041f.pdf" // 在线上链接获取pdf const url query.get(url) // 在地址栏获取pdf c…

2024年Q2震撼来袭!AMD数据中心与笔记本CPU市场独占鳌头,强劲表现引爆业界关注!

根据CPU市场追踪机构Mercury Research的最新报告&#xff0c;AMD在2024年第二季度再次取得了显著成绩&#xff0c;在数据中心和笔记本电脑CPU市场上份额有所增加。然而&#xff0c;Intel在台式机市场仍占据优势&#xff0c;并在整体出货量上保持领先地位。 在2024年第二季度&a…

本地查看的Git远程仓库分支与远程仓库分支数量不一致

说明&#xff1a;一次&#xff0c;在IDEA中想切换到某分支&#xff0c;但是查看Remote没有找到要切换的分支&#xff0c;但是打开GitLab&#xff0c;查看远程仓库&#xff0c;是有这个分支的。 解决&#xff1a;1&#xff09;在IDEA的Git中&#xff0c;点下面Fatch获取一下远程…

Grype:用于容器镜像、文件系统的开源漏洞扫描程序

容器镜像和文件系统的漏洞扫描器 Grype 是一个开源漏洞扫描器&#xff0c;专为容器镜像和文件系统设计&#xff0c;可与强大的软件物料清单 (SBOM) 工具 Syft 无缝集成。 扫描容器镜像或文件系统的内容以查找已知漏洞。 查找主要操作系统软件包的漏洞 Alpine Amazon Linux B…

计算机毕业设计 招生宣传管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

Linux基础入门---Centos安装步骤

&#x1f600;前言 本篇博文是关于Centos的详细安装&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609…

20240814 每日AI必读资讯

号称全球最强AI程序员 “Genie” 横空出世&#xff0c;击败Devin与GPT-4! - Genie在SWE-Bench测试中得分高达30.08%&#xff0c;成为全球最强AI程序员。 - 采用特殊数据集和自我改进机制&#xff0c;使Genie在复杂编码中表现出色。 - 目前已开放申请试用&#xff0c;未来将推…