Author:Dawn_T17🥥
目录
二.请求协议
三.响应协议
四.协议解析
Socket 编程
Servlet介绍
Web服务器
五.Tomcat 简介
HTTP 即超文本传输协议
它是一种应用层协议,用于客户端(如浏览器)和服务器之间的通信。
为什么叫协议?
“协议”这个词在计算机网络中的使用,是因为它代表了一种双方或多方之间达成的约定、规则和标准。
就像在日常生活中,人们之间的交流和合作需要遵循一定的约定和规则一样,在计算机网络中,不同的设备、程序和系统之间要进行有效的通信和数据交换,也必须遵循共同认可的一套规范。
之所以使用“协议”这个名称,是因为它形象地表达了以下几个关键特点:
- 约定性:协议是各方共同同意并遵守的规定,类似于合同或契约。
- 规范性:明确了通信的方式、格式、顺序、错误处理等方面的标准,确保通信的准确性和一致性。
- 交互性:定义了双方或多方在通信过程中的角色和责任,以及如何相互响应和配合。
例如,HTTP 协议规定了客户端(如浏览器)如何向服务器请求资源,以及服务器如何回应这些请求的具体方式。TCP 协议则规定了数据在网络中传输的可靠性保证、流量控制等规则。
通过遵循这些协议,不同的网络组件能够相互理解和协作,从而实现高效、可靠的网络通信。
特点:
无状态举例:
在登录操作中,HTTP 的无状态就体现为,当用户成功登录后,下一次发送其他请求时比如点击联系人,服务器并不能直接知道这个用户已经登录过了。
为了解决这个问题,通常会在登录成功时在客户端设置 Cookie,其中包含登录状态等相关信息。之后每次请求时,客户端会自动带上这个 Cookie,服务器通过解析 Cookie 来确认用户的登录状态和相关信息,从而实现类似有状态的效果。
Tip
{
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
{(TCP 协议是计算机网络专业课中非常重要的知识点。它在计算机网络的体系结构、数据传输、网络通信等方面都有着核心的地位,是计算机网络专业学生必须要深入理解和掌握的内容)
主要特点包括:
- 面向连接:在通信之前需要建立连接。
- 可靠传输:通过确认、重传等机制保证数据的可靠到达。
- 提供流量控制和拥塞控制,避免网络拥塞。
- 对数据进行分段和重组。
TCP 工作时,首先通过三次握手建立连接,然后进行数据传输,传输完成后通过四次挥手来释放连接。它为上层应用提供了稳定可靠的数据传输服务,广泛应用于各种网络通信场景。
}
HTTP协议和TCP协议的关系
HTTP 协议(超文本传输协议)和 TCP 协议(传输控制协议)在网络通信中都起着重要的作用,但它们在功能和层次上有所不同。
TCP 协议:
- 位置和作用:位于传输层,提供面向连接的、可靠的数据传输服务。
- 连接建立:在数据传输之前,需要进行三次握手来建立连接。
- 可靠性保证:通过序列号、确认应答、重传机制等确保数据的准确无误传输。
- 流量控制和拥塞控制:通过窗口机制进行流量控制,避免接收方缓冲区溢出;根据网络拥塞情况调整发送数据的速率。
HTTP 协议:
- 位置和作用:位于应用层,是用于在 Web 上传输超文本的协议。
- 基于 TCP:HTTP 协议通常是基于 TCP 协议来实现数据传输的。
- 请求 - 响应模式:客户端发送请求,服务器返回响应。
- 定义了请求方法(如 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 的一些关键特点和要点:
- 基于 Java 语言:利用 Java 的强大功能和特性来实现 Web 应用的逻辑处理。
- 处理请求和响应:接收来自客户端的 HTTP 请求,并生成相应的 HTTP 响应。
- 生命周期管理:由 Web 容器(如 Tomcat)进行管理,包括初始化、服务和销毁等阶段。
- 与 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 服务器主要有以下重要作用:
- 接收和处理请求:Web 服务器能够接收来自客户端(如浏览器)的 HTTP 请求,这些请求可能是获取网页、提交表单数据、上传文件等。
- 查找和提供资源:根据请求的 URL,Web 服务器在服务器的文件系统或相关数据库中查找对应的资源,如 HTML 文件、图片、CSS 样式表、JavaScript 脚本等。
- 运行服务器端脚本和程序:如果请求涉及到服务器端的动态内容生成,例如使用 PHP、Python、Java Servlet 等技术,Web 服务器会执行相应的脚本或程序来生成动态的响应内容。
- 建立和维护连接:管理与客户端的连接,确保通信的稳定性和可靠性。
- 处理安全性和认证:可以进行一些基本的安全设置,如访问控制、用户认证等,以保护服务器上的资源。
- 缓存和优化性能:通过缓存经常请求的资源和优化数据传输,提高响应速度和服务器的性能。
例如,当您在浏览器中输入一个网址并按下回车键时,Web 服务器会接收到这个请求,查找对应的网页文件并将其发送回您的浏览器进行显示。
不同的 Web 服务器软件在功能和性能上可能会有所差异,但总体上都围绕着上述主要作用来为用户提供 Web 服务。
五.Tomcat 简介
Tomcat 是一个开源的、流行的 Web 应用服务器。它实现了 Java Servlet 和 JavaServer Pages(JSP)等技术规范,能够处理 HTTP 请求并运行 Java Web 应用程序。
Tomcat 通常作为一个独立的服务器进程运行,可以进行详细的配置,如端口设置、连接池配置、虚拟主机配置等。它适用于大规模的、复杂的 Web 应用部署场景。
例如,在企业级的 Web 应用中,可能会将 Tomcat 安装在专门的服务器上,并与其他服务器软件(如数据库服务器)协同工作。
官网:Apache Tomcat® - 欢迎!
SpringBoot内嵌了tomcat
联网下载获得骨架代码
有Tomcat的依赖