网站访问的基础-HTTP超文本传输协议
BS架构
浏览器Browser⬅➡服务器Server
浏览器和服务器之间通过 IP 地址进行通信,实现数据的请求和传输。
例如,当用户在浏览器中访问一个网站时,浏览器会根据用户输入的网址(通过 DNS 解析得到服务器 IP 地址)向服务器发送 HTTP 请求,服务器收到请求后进行处理,并将处理结果(如网页内容)返回给浏览器,浏览器再将这些内容呈现给用户。
BS 架构即浏览器 / 服务器架构(Browser/Server Architecture),以下是详细介绍:
一、BS 架构的基本原理
- 结构组成
- 在 BS 架构中,客户端只需要安装有浏览器(如 Chrome、Firefox 等)即可访问服务器端的应用程序。用户通过浏览器向服务器发送请求,服务器处理请求后将处理结果返回给浏览器进行显示。
- 服务器端通常包括 Web 服务器、应用服务器和数据库服务器。Web 服务器负责接收来自浏览器的 HTTP 请求,应用服务器处理业务逻辑,数据库服务器负责存储和管理数据。
- 工作流程
- 当用户在浏览器中输入网址时,浏览器会向对应的 Web 服务器发送 HTTP 请求。例如,用户想要查看在线购物网站上的商品信息,浏览器会发送请求获取商品列表页面。
- Web 服务器收到请求后,将请求转发给应用服务器。应用服务器根据请求内容进行业务逻辑处理。比如,对于用户查看商品列表的请求,应用服务器会从数据库服务器中查询相关商品信息。
- 数据库服务器将查询到的商品数据返回给应用服务器,应用服务器对数据进行处理和组织后,将结果返回给 Web 服务器。
- Web 服务器将最终的页面内容以 HTML 等格式返回给浏览器,浏览器对其进行解析和渲染,将商品列表页面呈现给用户。
二、BS 架构的优点
- 易于维护和升级
- 因为应用程序的主要逻辑和数据都在服务器端,当需要对系统进行升级或维护时,只需要在服务器端进行操作即可,不需要对客户端进行逐个更新。例如,一个企业的办公自动化系统采用 BS 架构,当系统有新功能上线时,只要更新服务器端的程序,所有通过浏览器访问该系统的用户都可以立即使用新功能。
- 跨平台性
- 只要客户端有浏览器,无论是 Windows、Mac OS、Linux 操作系统,还是移动设备上的 iOS、Android 系统,都可以访问服务器端的应用程序。比如,一个在线学习平台采用 BS 架构,学生可以使用台式电脑、笔记本电脑、平板电脑甚至手机,通过浏览器登录平台进行学习,无需考虑操作系统的兼容性问题。
- 成本低
- 客户端不需要安装专门的软件,减少了软件的开发和分发成本。对于一些小型企业或创业公司来说,采用 BS 架构开发应用程序可以节省大量的成本。例如,一个小型电商公司开发自己的在线店铺系统,采用 BS 架构可以避免为不同客户端开发不同版本软件的麻烦和费用。
三、BS 架构的缺点
- 对服务器性能要求高
- 所有的业务处理和数据存储都依赖服务器,当用户数量较多或者并发访问量较大时,服务器可能会面临较大的压力。例如,在电商平台的促销活动期间,大量用户同时访问服务器进行下单、查询等操作,可能会导致服务器响应缓慢甚至崩溃。
- 安全性问题
- 由于数据都存储在服务器端,并且通过网络进行传输,存在数据泄露、网络攻击等安全风险。例如,如果服务器的安全防护措施不到位,黑客可能会通过网络攻击获取用户的个人信息和交易数据。
- 浏览器兼容性问题
- 虽然浏览器都遵循一定的标准,但在实际应用中,不同浏览器对 HTML、CSS、JavaScript 等技术的实现可能存在差异,可能会导致页面显示或功能出现问题。例如,一些基于复杂 JavaScript 功能开发的应用程序,可能在某些较老版本的浏览器上无法正常运行。
什么是HTTP
传输协议定义了浏览器和客户端传输数据的格式
浏览器:request请求信息 ⬅➡ response响应信息:服务器
1.基于tcp/ip协议
2.默认端口为80
3.请求和响应一一对应
4.每次请求相互独立,是无状态协议
HTTP 即超文本传输协议(HyperText Transfer Protocol)。
一、HTTP 的定义和作用
- 定义
- HTTP 是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网(World Wide Web)数据通信的基础,用于在客户端(通常是浏览器)和服务器之间传输超文本(如 HTML 文件)等资源。
- 作用
- 当用户在浏览器中输入网址并按下回车键时,浏览器就会通过 HTTP 协议向对应的网站服务器发送请求,请求获取网页内容、图片、脚本等资源。服务器收到请求后,根据请求内容查找相应的资源,并通过 HTTP 协议将这些资源返回给浏览器,浏览器再将这些资源解析并呈现给用户。
二、HTTP 的特点
- 无状态性
- HTTP 是无状态的协议,这意味着服务器不会在不同的请求之间记住客户端的状态。例如,当用户第一次访问一个网站的页面并进行了一些操作(如登录),然后又访问了该网站的另一个页面时,服务器不会自动知道这两个请求是来自同一个用户,除非通过其他技术(如使用 Cookies 或会话管理技术)来维持状态。
- 基于请求 - 响应模式
- HTTP 采用请求 - 响应的交互模式。客户端(浏览器)发起请求,请求中包含要获取的资源的信息(如 URL、请求方法等),服务器收到请求后进行处理,并返回响应。响应中包含请求的资源内容(如果请求成功)或者错误信息(如果请求失败)。
三、HTTP 的请求方法
- GET 方法
- GET 方法用于从服务器获取资源。例如,当用户在浏览器中访问一个网页时,浏览器通常会使用 GET 方法向服务器请求该网页的内容。GET 请求可以在 URL 中附带参数,这些参数通常用于向服务器传递查询条件等信息。例如:
http://www.example.com/search?keyword=apple
,这里的keyword=apple
就是 GET 请求的参数。
- GET 方法用于从服务器获取资源。例如,当用户在浏览器中访问一个网页时,浏览器通常会使用 GET 方法向服务器请求该网页的内容。GET 请求可以在 URL 中附带参数,这些参数通常用于向服务器传递查询条件等信息。例如:
- POST 方法
- POST 方法主要用于向服务器提交数据,例如用户在网站上进行注册、登录、提交表单等操作时,通常会使用 POST 方法将用户输入的数据发送给服务器。与 GET 方法不同,POST 请求的数据是放在请求体(Request Body)中传递给服务器的,而不是在 URL 中。
- 其他方法
- 除了 GET 和 POST 方法外,HTTP 还有 PUT(用于向服务器上传资源)、DELETE(用于请求服务器删除资源)、HEAD(类似于 GET,但只获取资源的头部信息,不获取资源的实际内容)等请求方法,但这些方法在日常的网页浏览中使用相对较少。
四、HTTP 的版本
- HTTP/1.0
- HTTP/1.0 是早期的 HTTP 版本,它规定了浏览器和服务器之间进行通信的基本规则。在 HTTP/1.0 中,每次 HTTP 请求 - 响应都会建立和关闭一个 TCP 连接,这种方式在频繁请求的情况下效率较低。
- HTTP/1.1
- HTTP/1.1 对 HTTP/1.0 进行了改进,最主要的改进之一是支持持久连接(Persistent Connection),即一个 TCP 连接可以用于多次 HTTP 请求 - 响应,减少了频繁建立和关闭连接的开销,提高了网络通信效率。
- HTTP/2
- HTTP/2 是 HTTP 协议的新一代版本,它在性能上有了很大的提升。HTTP/2 采用二进制分帧层(Binary Framing Layer)对数据进行封装和传输,支持多路复用(Multiplexing),可以在一个 TCP 连接上同时进行多个请求和响应的传输,进一步提高了网络利用率和性能。同时,HTTP/2 还支持服务器推送(Server Push),即服务器可以主动向客户端推送资源,减少客户端请求的延迟。
HTTP超文本传输协议
-
HTTP 请求消息的结构
- HTTP 请求消息由以下几个部分组成:
- 请求行(Request Line):这是请求消息的第一行,包含请求方法、请求的资源路径和 HTTP 协议版本。例如:
GET /index.html HTTP/1.1
。其中,GET
是请求方法,表示要从服务器获取资源;/index.html
是请求的资源路径,即服务器上的目标文件或资源;HTTP/1.1
是使用的 HTTP 协议版本。 - 请求头部(Request Headers):在请求行之后,是一系列的请求头部信息。这些头部信息用于向服务器传递更多关于请求的细节。常见的请求头部有:
- Host:指定请求的目标主机名。例如:
Host: www.example.com
,这是必须的头部,因为一个服务器可能托管多个域名的网站。 - User - Agent:标识客户端的软件信息,如浏览器类型和版本。例如:
User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
,这有助于服务器根据客户端的特性进行内容适配。 - Accept:指定客户端能够接受的媒体类型。例如:
Accept: text/html,application/xhtml+xml,application/xml;q = 0.9,image/avif,image/webp,image/apng,*/*;q = 0.8,application/signed - exchange;v = b3;q = 0.9
,表示客户端希望接收的内容类型及其优先级。 - Accept - Language:表明客户端可接受的自然语言。例如:
Accept - Language: en - US,en;q = 0.9
,表示优先接受美式英语,其次是其他英语类型。 - Connection:用于控制是否保持连接。例如:
Connection: keep - alive
表示希望保持连接,以减少后续请求的连接建立时间。
- Host:指定请求的目标主机名。例如:
- 空行(Blank Line):空就是空,并不是没有,在请求头部之后,有一个空行,用于分隔请求头部和请求体(如果有)。
- 请求体(Request Body):不是所有的请求都有请求体。只有在使用 POST、PUT 等请求方法且需要向服务器提交数据时才有请求体。例如,当用户在网站上提交表单时,表单数据就会放在请求体中。如果是 GET 请求,通常没有请求体。
- 请求行(Request Line):这是请求消息的第一行,包含请求方法、请求的资源路径和 HTTP 协议版本。例如:
- HTTP 请求消息由以下几个部分组成:
-
常见的 HTTP 请求方法
- GET:
- 用途:用于从服务器获取资源。这是最常见的请求方法,例如在浏览器中访问网页时,浏览器通常会使用 GET 请求来获取网页内容。
- 特点:GET 请求的参数通常会附加在 URL 后面,以
?
开始,参数之间用&
分隔。例如:http://www.example.com/search?keyword = apple&category = fruit
,这里的keyword = apple
和category = fruit
就是 GET 请求的参数。由于参数在 URL 中,所以 GET 请求的数据是公开的,且有长度限制(因为 URL 长度有一定限制)。
- POST:
- 用途:主要用于向服务器提交数据。例如,用户在网站上进行注册、登录、提交表单等操作时,通常会使用 POST 方法将用户输入的数据发送给服务器。
- 特点:POST 请求的数据是放在请求体中的,相对 GET 请求更安全(因为数据不在 URL 中),且没有数据长度的严格限制(但实际上受服务器配置和性能的限制)。
- PUT:
- 用途:用于向服务器上传资源,通常用于更新服务器上的现有资源。例如,在一些文件存储服务中,当用户要更新一个文件时,可以使用 PUT 请求将新文件上传到服务器替换旧文件。
- DELETE:
- 用途:请求服务器删除指定的资源。例如,在一些在线存储系统中,用户可以使用 DELETE 请求删除自己存储的文件。
- GET:
HTTP 请求消息通过这种结构化的方式,使得客户端能够准确地向服务器传达自己的请求意图和相关信息,以便服务器能够正确地处理和响应。
-
Host
- 定义与作用:Host 头部指定了请求的目标主机名。在互联网上,一个服务器可能会托管多个域名的网站。例如,一个服务器的 IP 地址为 192.168.1.1,它可能同时为
www.example1.com
和www.example2.com
这两个域名提供服务。当客户端发送请求时,通过Host
头部告诉服务器请求的是哪个域名对应的资源。例如,Host: www.example.com
,这是 HTTP/1.1 协议中必须的头部,它确保服务器能够正确地将请求路由到对应的虚拟主机(如果有多个域名对应同一服务器)。 - 示例:如果用户在浏览器中访问
https://www.baidu.com
,浏览器发送的请求头部中的Host
字段就会是Host: www.baidu.com
,这样百度的服务器就能准确地识别并返回百度网站相关的内容。
- 定义与作用:Host 头部指定了请求的目标主机名。在互联网上,一个服务器可能会托管多个域名的网站。例如,一个服务器的 IP 地址为 192.168.1.1,它可能同时为
-
User - Agent
- 定义与作用:
User - Agent
头部用于标识客户端的软件信息,主要是浏览器类型和版本,也可能包括操作系统等信息。服务器可以根据这个信息来为不同的客户端提供适当的内容或者进行兼容性处理。例如,服务器可以根据不同的浏览器类型,返回不同格式的网页(虽然现在这种情况比较少见,因为网页设计更加注重标准化),或者根据用户使用的操作系统来推荐合适的软件下载链接。 - 示例:
User - Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
,这个头部信息表明客户端使用的是 Chrome 浏览器,版本为 90.0.4430.212,运行在 Windows 10 操作系统(64 位)上,并且底层的渲染引擎部分与 Safari 有相似之处(因为有AppleWebKit
相关信息)。
- 定义与作用:
-
Accept
- 定义与作用:
Accept
头部指定了客户端能够接受的媒体类型(MIME 类型)。它用于告诉服务器客户端希望接收的内容格式及其优先级。MIME 类型是一种用于标识文档、文件或字节流性质和格式的标准化方式。例如,text/html
表示 HTML 文档,image/jpeg
表示 JPEG 图像。服务器会根据这个头部信息,尽可能地返回客户端期望的内容类型。 - 示例:
Accept: text/html,application/xhtml + xml,application/xml;q = 0.9,image/avif,image/webp,image/apng,*/*;q = 0.8,application/signed - exchange;v = b3;q = 0.9
。这里客户端表示最希望接收的是text/html
和application/xhtml+xml
类型的内容,其次是application/xml
(优先级为 0.9),然后是image/avif
、image/webp
、image/apng
等,对于其他所有类型(*/*
)的优先级为 0.8,最后application/signed - exchange
(优先级为 0.9)也有一定的接受度。
- 定义与作用:
-
Accept - Language
- 定义与作用:
Accept - Language
头部表明客户端可接受的自然语言。这对于提供多语言内容的网站非常重要,服务器可以根据这个信息返回用户期望语言的内容。例如,一个跨国公司的网站可能提供多种语言版本的网页,服务器会根据Accept - Language
头部来选择合适的语言版本进行响应。 - 示例:
Accept - Language: en - US,en;q = 0.9
,这表示客户端优先接受美式英语(en - US
),对于其他英语类型(en
)的接受程度稍低(优先级为 0.9)。如果服务器有美式英语版本的网页,就会优先返回这个版本;如果没有,可能会考虑其他英语版本。
- 定义与作用:
-
Connection
- 定义与作用:
Connection
头部用于控制是否保持连接。在 HTTP/1.1 及以后的版本中,支持持久连接(Persistent Connection),这可以减少建立和关闭连接的开销,提高网络传输效率。通过设置Connection
头部的值,客户端可以告诉服务器自己的连接意图。 - 示例:
Connection: keep - alive
表示客户端希望保持连接,以便在后续的请求中可以直接使用这个连接,而不需要重新建立连接。相反,如果是Connection: close
,则表示客户端希望在当前请求 - 响应完成后关闭连接。
- 定义与作用:
-
Content - Length(如果是 POST 等有请求体的请求)
- 定义与作用:当请求包含请求体(如 POST 请求)时,
Content - Length
头部用于指定请求体的长度(字节数)。这对于服务器准确地接收和处理请求体内容非常重要,服务器可以根据这个长度来确定何时完整地接收了请求体。 - 示例:如果一个 POST 请求的请求体是一个包含用户登录信息的表单数据,长度为 1024 字节,那么
Content - Length
头部的值就会是Content - Length: 1024
。
- 定义与作用:当请求包含请求体(如 POST 请求)时,
-
Content - Type(如果是 POST 等有请求体的请求)
- 定义与作用:当请求包含请求体时,
Content - Type
头部用于指定请求体的 MIME 类型。这有助于服务器正确地解析请求体中的内容。例如,如果请求体是一个 JSON 格式的数据,Content - Type
头部可能是Content - Type: application/json
,这样服务器就知道要用 JSON 解析器来处理请求体。 - 示例:如果用户通过 POST 请求提交一个 XML 格式的文件,
Content - Type
头部可能是Content - Type: application/xml
,告诉服务器请求体是 XML 格式的内容,需要按照 XML 的处理方式来解析。
- 定义与作用:当请求包含请求体时,
-
Cookie(如果有相关 Cookie 信息)曲奇饼
- 定义与作用:
Cookie
头部用于在客户端和服务器之间传递 Cookie 信息。Cookie 是一种在客户端存储少量数据的机制,用于记录用户的一些状态信息,如登录状态、购物车内容等。当客户端再次向服务器发送请求时,会把相关的 Cookie 信息通过Cookie
头部发送给服务器,服务器可以根据这些信息来识别用户或者恢复用户的状态。 - 示例:
Cookie: sessionid = 123456789; userid = 987654321
,这里的sessionid
和userid
是 Cookie 的名称,123456789
和987654321
是对应的 Cookie 值。服务器可以根据这些值来确定用户的会话状态或者用户身份等信息。
- 定义与作用:
-
1XX 系列(信息性状态码)
- 100 Continue:
- 含义:客户端在发送请求体之前,先发送一个带有
Expect: 100 - continue
请求头部的请求。服务器收到这个请求后,如果它认为可以接收客户端的请求体,就会返回 100 Continue 响应码,告诉客户端可以继续发送请求体。 - 应用场景:主要用于大文件上传或者 POST 请求包含大量数据的情况。例如,当客户端要上传一个很大的文件时,先发送一个 HEAD 请求询问服务器是否可以接收,服务器返回 100 Continue 后,客户端再发送文件内容,这样可以避免在服务器不接受请求的情况下发送大量无用数据。
- 含义:客户端在发送请求体之前,先发送一个带有
- 101 Switching Protocols:
- 含义:表示服务器理解了客户端的请求,并同意切换协议。
- 应用场景:在 HTTP 升级到更安全或更高效的协议(如从 HTTP/1.1 升级到 HTTP/2)时使用。例如,服务器和客户端都支持 HTTP/2,客户端在请求头部中包含升级协议的意图,服务器同意后就会返回 101 Switching Protocols 响应码,随后双方开始使用新协议进行通信。
- 100 Continue:
-
2XX 系列(成功状态码)
- 200 OK:
- 含义:最常见的成功状态码,表示服务器成功处理了客户端的请求,并返回了请求的内容。
- 应用场景:当用户在浏览器中访问一个网页,服务器找到并正确返回网页的 HTML、CSS、JavaScript 等内容时,就会返回 200 OK。例如,用户访问
www.example.com
,服务器返回首页的内容,响应码就是 200 OK。
- 201 Created:
- 含义:表示请求成功,并且服务器创建了新的资源。通常在 POST 或者 PUT 请求后返回,新资源的位置会在响应头部的
Location
字段中给出。 - 应用场景:当用户在一个文件存储服务中上传新文件,或者在内容管理系统中创建新的文章等情况时使用。例如,用户通过 API 上传一个新的图像文件,服务器成功创建文件存储记录并保存文件后,返回 201 Created 响应码,同时在
Location
头部给出新文件的访问地址。
- 含义:表示请求成功,并且服务器创建了新的资源。通常在 POST 或者 PUT 请求后返回,新资源的位置会在响应头部的
- 204 No Content:
- 含义:服务器成功处理了请求,但没有返回任何内容。这和 200 OK 的区别在于没有响应体。
- 应用场景:主要用于对资源执行操作成功,但不需要返回新内容的情况。例如,用户在购物网站上删除了一个商品,服务器成功删除商品记录后,返回 204 No Content,因为不需要返回具体的内容。
- 200 OK:
-
3XX 系列(重定向状态码)
- 301 Moved Permanently:
- 含义:表示请求的资源已经永久移动到了新的位置。客户端在收到这个响应码后,以后的请求都应该使用新的 URL。
- 应用场景:当网站进行域名更换或者资源路径永久变更时使用。例如,一个网站从
www.old - example.com
迁移到www.new - example.com
,对于访问旧域名的用户,服务器会返回 301 Moved Permanently 响应码,并在响应头部的Location
字段中给出新域名的 URL。
- 302 Found(以前是 302 Moved Temporarily):
- 含义:表示请求的资源临时移动到了新的位置。客户端收到这个响应码后,会临时使用新的 URL 进行访问。
- 应用场景:在网站维护或者资源临时调整位置的情况下使用。例如,网站的某个页面因为服务器维护需要临时转移到另一个服务器上的路径,就会返回 302 Found 响应码,引导用户暂时访问新的位置。
- 304 Not Modified:
- 含义:客户端发送了一个带有条件的请求(通常是带有
If - Modified - Since
或If - None - Match
头部),服务器根据这些条件判断资源没有被修改,所以不需要返回新的内容,直接告诉客户端使用缓存的内容即可。 - 应用场景:对于经常访问的网页或者资源,浏览器会缓存内容。当用户再次访问时,浏览器会发送一个条件请求询问资源是否修改。如果没有修改,服务器就返回 304 Not Modified,这样可以减少网络流量,提高访问效率。
- 含义:客户端发送了一个带有条件的请求(通常是带有
- 301 Moved Permanently:
-
4XX 系列(客户端错误状态码)
- 400 Bad Request:
- 含义:客户端发送的请求有语法错误,服务器无法理解。
- 应用场景:可能是请求行、请求头部或者请求体的格式不正确。例如,请求的 URL 格式错误,或者 POST 请求中提交的数据不符合服务器要求的格式(如缺少必需的字段)。
- 401 Unauthorized:
- 含义:表示客户端请求的资源需要进行身份验证,但是客户端没有提供有效的凭证或者提供的凭证无效。
- 应用场景:当用户访问一个需要登录才能查看的资源,但是没有提供正确的用户名和密码或者有效的身份令牌时,就会返回 401 Unauthorized。
- 403 Forbidden:
- 含义:服务器理解了客户端的请求,但是拒绝提供服务。这和 401 Unauthorized 的区别在于,403 Forbidden 不是因为缺少身份验证,而是因为客户端没有权限访问请求的资源。
- 应用场景:例如,用户试图访问一个受保护的文件,虽然已经登录,但是其用户权限级别不够,或者 IP 地址被限制访问,就会返回 403 Forbidden。
- 404 Not Found:
- 含义:客户端请求的资源在服务器上不存在。
- 应用场景:这是最常见的客户端错误状态码之一。当用户在浏览器中输入一个错误的网址,或者网站上的某个页面、文件被删除后,用户访问时就会返回 404 Not Found。
- 400 Bad Request:
-
5XX 系列(服务器错误状态码)
- 500 Internal Server Error:
- 含义:服务器在处理客户端请求时遇到了内部错误,无法完成请求。
- 应用场景:可能是服务器端的代码出现了错误(如程序崩溃、数据库查询出错等)。例如,一个动态网页的服务器端脚本在执行过程中遇到了未处理的异常,导致无法正确生成网页内容,就会返回 500 Internal Server Error。
- 502 Bad Gateway:
- 含义:服务器作为网关或者代理,从上游服务器(如应用服务器、数据库服务器等)获取响应时出现了错误。
- 应用场景:当服务器在转发请求到其他服务器后,没有收到有效的响应或者收到的响应无法理解时使用。例如,在一个复杂的 Web 架构中,Web 服务器将请求转发给应用服务器,应用服务器出现故障没有正确响应,Web 服务器就会返回 502 Bad Gateway。
- 503 Service Unavailable:
- 含义:服务器目前无法处理客户端的请求,可能是因为服务器正在维护、过载或者出现其他临时故障。
- 应用场景:在服务器进行升级维护、遭受大量请求导致资源耗尽(如 CPU、内存等资源不足)等情况下使用。例如,在电商平台的促销活动期间,服务器负载过高,暂时无法处理新的订单请求,就会返回 503 Service Unavailable。
- 504 Gateway Time - out:
- 含义:服务器作为网关或者代理,在规定的时间内没有从上游服务器收到响应。
- 应用场景:和 502 Bad Gateway 类似,但更强调时间因素。例如,Web 服务器在等待应用服务器响应的过程中,超过了设定的等待时间(如 30 秒)还没有收到响应,就会返回 504 Gateway Time - out。
- 500 Internal Server Error:
在当今数字化的网络世界中,了解 HTTP 协议具有极为关键的意义。对于网页开发人员而言,它是构建高效、功能完备网页的基石。凭借对 HTTP 的精通,开发人员能够巧妙运用缓存机制提升网页加载速度,精心安排资源加载顺序以优化页面呈现,精准把握不同请求方法实现复杂的前后端数据交互,并借助其特性构建实时性强的网页应用。
网络安全人员则依赖对 HTTP 的深入理解,如同拥有敏锐的探测器,精准识别并有效防范诸如 XSS、CSRF 等网络攻击,通过确保 HTTP 与安全加密协议的协同运作,筑牢数据传输的安全防线,同时依据其原理制定严谨的安全策略,及时修复潜在漏洞。
而系统管理员借助对 HTTP 协议的熟知,恰似掌握了服务器管理的密码,能够合理配置虚拟主机、精准设定 MIME 类型与访问权限,科学优化服务器性能,并且在故障突发时,依据 HTTP 响应码迅速排查问题根源,确保服务器的稳定运行与网络服务的顺畅提供。
总之,HTTP 协议贯穿网络开发、安全保障与系统运维的各个环节,是推动网络技术发展与保障网络生态健康稳定不可或缺的重要因素。
相关文章:
网站访问的基础-HTTP超文本传输协议
BS架构 浏览器Browser⬅➡服务器Server 浏览器和服务器之间通过 IP 地址进行通信,实现数据的请求和传输。 例如,当用户在浏览器中访问一个网站时,浏览器会根据用户输入的网址(通过 DNS 解析得到服务器 IP 地址)向服…...
使用Hydra库简化配置管理
使用Hydra库简化配置管理 简介 在现代软件开发中,配置管理是至关重要的。应用程序的灵活性和可维护性很大程度上取决于其如何处理配置。Hydra是一个由Facebook AI Research (FAIR) 开发的Python库,它旨在简化复杂应用的配置过程。Hydra使得开发者可以轻…...
Java对集合的操作方法
1. 数组转集合 //数组转集合 String[] split quickRechargeAmount.split(","); List<String> stringList Stream.of(split).collect(Collectors.toList()); 2. 对List集合数据内容进行分组 //对List集合数据内容进行分组 Map<String, List<LiveAppGi…...
WordPress酱茄主题 开源版 博客资讯自媒体网站模板
一款免费开源的WordPress主题,主题专为WordPress博客、资讯、自媒体网站而设计 运行环境 支持WordPress版本:5.6 兼容Chrome、Firefox、Safari等主流浏览器 支持设备:响应式布局,不同设备不同展示效果 服务器环境建议&#x…...
【SickOs1.1靶场渗透】
文章目录 一、基础信息 二、信息收集 三、反弹shell 四、提权 一、基础信息 Kali IP:192.168.20.146 靶机IP:192.168.20.150 二、信息收集 端口扫描 nmap -sS -sV -p- -A 192.168.20.150 开放了22、3128端口,8080端口显示关闭 22端…...
Javaweb web后端maven介绍作用安装
自动导入到这个项目 src是源代码 main主程序,核心代码 java是Java源代码 resources是项目配置文件 test测试相关的 maven概述 介绍 依赖在本地仓库查找,如果本地仓库有,用本地仓库的依赖,本地没有,连接中央仓库&…...
Input Action (输入动作) 在虚幻引擎中常用的值类型
1. Digital (bool) 含义: Digital 类型代表一个离散的、二元的输入状态,它只有两种可能的值:true(按下,激活)或 false(未按下,未激活)。 用途: 最常用于表示按键或按钮的按下状态。 适合于开关类型的操作,比如: 跳跃(按键按下时跳跃,松开时不跳跃) 奔跑/行走切换 …...
LabVIEW汽车综合参数测量
系统基于LabVIEW虚拟仪器技术,专为汽车带轮生产中的质量控制而设计,自动化测量和检测带轮的关键参数。系统采用PCIe-6320数据采集卡与精密传感器结合,能够对带轮的直径、厚度等多个参数进行高精度测量,并通过比较测量法判定产品合…...
快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3
快速且靠谱的简单安装 PostgreSQL 15 yum 安装postgis3.3 1、确保已经安装了PostgreSQL数据库。2、添加PostGIS的EPEL仓库3、使用YUM安装PostGIS4、以下为其他安装方式,一个个去找源码的编译安装,过程较为繁琐(不熟路的不推荐) 要…...
MySQL八股文
MySQL 自己学习过程中的MySQL八股笔记。 主要来源于 小林coding 牛客MySQL面试八股文背诵版 以及b站和其他的网上资料。 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),使用最常用的数据库管理语言–结构化查询语言(SQL&…...
Python高性能web框架-FastApi教程:(1)创建一个简单的FastApi
(1)创建一个简单的FastApi 1. 导入必要的库 from fastapi import FastAPI import uvicornFastAPI 是一个用于构建现代、快速(高性能)的Web API的Python框架。uvicorn 是一个ASGI服务器,用于运行异步的Python Web应用…...
多模态机器学习综述论文|Multimodal Machine Learning: A Survey and Taxonomy
1. 引言 多模态机器学习是一个跨学科领域,它涉及到从多种感官模态(如视觉、听觉、触觉等)中提取信息,并构建能够处理和关联这些信息的模型。这种学习方式对于人工智能理解复杂世界至关重要。 名词解释: 模态Modality…...
CentOS8:英伟达显卡驱动与CUDA安装
挺偶然的,同事在CentOS8版本的GPU服务器上安装英伟达的显卡驱动和CUDA遇到了问题,于是协助进行了安装,顺便记录下此次安装过程与心得。 目录 显卡驱动安装 步骤简述 详细步骤 1、官网下载需要的驱动 2、驱动软件包上传并加权 3、安装…...
【IDEA】启动报错
今天启动IDEA报错 报错信息: Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打开任务管理器,关掉进程ID5444的任务...
Opencv之图像梯度处理和绘制图像轮廓
一、梯度处理的sobel算子函数 处理示意 Sobel 算子是一种常用的图像边缘检测方法,结合了一阶导数和高斯平滑,用于检测图像的梯度信息。 1、功能 Sobel 算子用于计算图像在 x 和 y 方向的梯度,主要功能包括: 强调图像中灰度值的…...
5.2章节python字符串的格式化三种方式
在Python中,格式化字符串是编程中常见的任务,它用于将变量或表达式的值嵌入到字符串中。以下是三种常见的格式化字符串的方式: 1.百分号(%)格式化: 这是Python早期版本中常用的字符串格式化方法。通过在字…...
.NET Core 各版本特点、差异及适用场景详解
随着 .NET Core 的不断发展,微软推出了一系列版本来满足不同场景下的开发需求。这些版本随着时间的推移逐渐演变为统一的 .NET 平台(从 .NET 5 开始)。本文将详细说明每个版本的特点、差异以及适用场景,帮助开发者更好地选择和使用…...
2024.12.14 TCP/IP 网络模型有哪几层?
2024.12.14 TCP/IP 网络模型有哪几层? 2024.12.14 今天周六 看到大伙都在考六级,我来复盘小林coding的计算机网络的知识点: TCP/IP 网络模型有哪几层? 问大家,为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有…...
基于SpringBoot的嗨玩旅游网站:一站式旅游信息服务平台的设计与实现
摘要 在旅游需求日益增长的今天,一个全面、便捷的旅游信息服务平台显得尤为重要。嗨玩旅游网站正是为了满足这一需求而设计的在线平台,它提供了包括景点信息、旅游线路、商品信息、社区信息和活动推广等在内的丰富旅游目的地信息,旨在帮助用…...
HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构
HQChart使用教程30-K线图如何对接第3方数据42-DRAWTEXTREL,DRAWTEXTABS数据结构 效果图DRAWTEXTREL示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont DRAWTEXTABS示例数据结构说明nametypecolorDrawVAlignDrawAlignDrawDrawTypeDrawDataFont 效果图 …...
VMware ESXi上创建Ubuntu虚拟机并实现远程SSH访问全攻略
文章目录 前言1. 在VMware ESXI中创建Ubuntu虚拟机2. Ubuntu开启SSH远程服务3. 安装Cpolar工具4. 使用SSH客户端远程访问Ubuntu5. 固定TCP公网地址 前言 本文主要介绍如何在VMware ESXi上创建一台Ubuntu 22.04虚拟机,并通过Cpolar内网穿透工具配置公网地址…...
进制的转换
前言 进制是一种进位计数制,是人为定义的带进位的计数方法。不同的进制使用不同数量的符号,以及不同的规则来组合这些符号以表示不同的数值。 一、进制类型 二进制:由一串0和1组成的数字,逢二进一 八进制:0 1 2 3 4 5 6 7,…...
迁移学习中模型训练加速(以mllm模型为例),提速15%以上
根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…...
CSS系列(6)-- 排版与文本详解
前端技术探索系列:CSS 排版与文本详解 📝 致读者:探索优雅的文字艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 排版与文本处理,学习如何创建既美观又易读的文本内容。 文本基础属性 🚀 字…...
嵌入式现状、机遇、挑战与展望
在当今数字化浪潮中,嵌入式系统宛如一颗璀璨的明珠,熠熠生辉,深刻地渗透到了我们生活的方方面面,成为推动现代科技进步不可或缺的关键力量。从智能家居的便捷控制,到工业生产的精准运作,再到汽车的智能驾驶…...
关于Postgresql旧版本安装
抛出问题 局点项目现场,要求对如下三类资产做安全加固,需要在公司侧搭建测试验证环境,故有此篇。 bclinux 8.2 tomcat-8.5.59 postgrel -11 随着PG迭代,老旧版本仅提供有限维护。如果想安装老版本可能就要费劲儿一些。现在&…...
【AI日记】24.12.14 kaggle 比赛 2-4 EDA
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加:kaggle 比赛 Regression with an Insurance Dataset内容:构建自己的EDA(探索性数据分析)框架时间:5 小时感想:大规模数据集&a…...
《深入浅出HTTPS》读书笔记(18):公开密钥算法RSA(续)
【RSA算法安全性】 幂运算的逆过程就是求对数问题,而模运算可以认为是离散问题,组合起来RSA算法就是离散对数模型,只要密钥长度足够长,离散对数很难破解。 破解私钥有两个方法: ◎公钥持有人有e和n,而要计…...
LabVIEW面向对象编程有什么特点?
LabVIEW面向对象编程(OOP)的特点主要体现在它如何结合传统面向对象编程(OOP)的理念与LabVIEW的图形化编程模式,提供灵活的抽象和模块化的功能。以下是LabVIEW面向对象编程的几个主要特点: 1. 类&#x…...
【Hive数据仓库】Hive部署、Hive数据库操作(增删改查)、表操作(内部表、外部表、分区表、桶表)
目录 一、本地模式 1、安装MySQL 2、登录MySQL 3、修改密码 4、安装Hive 5、配置Hive系统环境变量 6、初始化Derby数据库 7、连接Hive用于测试 8、测试Hive 9、修改Hive配置文件 10、上传MySQL驱动包 11、初始化MySQL 12、连接Hive用于启动服务 二、远程模式 1、…...
bugku-simple MQTT-wp解析
1.下载题目打开题目,是一个流量包,题目说是MQTT,然后打开流量之后的流量都是MQTT,我们来搜一下MQTT是什么流量 MQTT流量: 是一种基于发布订阅模式的轻量级的通讯协议,并且该协议构建于TCP/IP协议之上&…...
【第四节】Git 分支管理
目录 前言 一、Git 分支简介 二、 分支的基本操作 2.1 创建分支 2.2 切换分支 2.3 列出分支 三、 分支的合并与删除 3.1 合并分支 3.2 删除分支 四、处理合并冲突 五、 总结 前言 Git 的分支管理是其核心功能之一,允许开发者在不影响主线开发的情况下进行…...
IDEA 修改格式化仅格式化本次改动代码
最近总是发现格式化的时候会格式化文件所有代码,提交Git 后再看提交日志,就很不清晰。修改方式如下 中文: 格式化代码快捷键[中文配置]: 英文: 格式化代码快捷键[英文配置]:...
UOB大华银行|校招网申综合能力SHL测评题库英语版本真题分析
大华银行有限公司(大华银行)是亚洲银行业的翘楚,大华银行总部位于新加坡,并在中国、印度尼西亚、马来西亚、泰国及越南设立了全资法人银行,在全球拥有约500 间分行及办事处,分布在亚太、欧洲与北美的19 个国…...
Redis应用—2.在列表数据里的应用
大纲 1.基于数据库 缓存双写的分享贴功能 2.查询分享贴列表缓存时的延迟构建 3.分页列表惰性缓存方案如何节约内存 4.用户分享贴列表数据按页缓存实现精准过期控制 5.用户分享贴列表的分页缓存的异步更新 6.数据库与缓存的分页数据一致性方案 7.热门用户分享贴列表的分…...
【Linux基础】基本开发工具的使用
目录 一、编译器——gcc/g的使用 gcc/g的安装 gcc的安装: g的安装: gcc/g的基本使用 gcc的使用 g的使用 动态链接与静态链接 程序的翻译过程 1. 一个C/C程序的构建过程,程序从源代码到可执行文件必须经历四个阶段 2. 理解选项的含…...
C++ 中面向对象编程如何实现动态绑定?
在 C 中,面向对象编程的一个重要特性就是动态绑定。动态绑定允许在程序运行时根据对象的实际类型来决定调用哪个函数,这为程序的灵活性和可扩展性提供了强大的支持。本文将详细介绍 C 中面向对象编程如何实现动态绑定。 一、静态绑定与动态绑定的概念 静…...
电源芯片的SYNC引脚
-----本文简介----- 主要内容包括: ① 电源芯片的SYNC引脚 ----- 正文 ----- 先赞↓后看,养成习惯! 1. SYNC引脚是什么? 电源芯片里面的SYNC引脚是 Synchronization clock in,意思是同步时钟输入。 2. SYNC引脚的作用…...
安卓报错Switch Maven repository ‘maven‘....解决办法
例如:Switch Maven repository ‘maven(http://developer.huawei.com/repo/)’ to redirect to a secure protocol 在库链接上方添加配置代码:allowInsecureProtocol true...
935. 骑士拨号器
935. 骑士拨号器 题目链接:935. 骑士拨号器 代码如下: class Solution { public:int knightDialer(int n) {if (n 1){return 10;}long long res 0;for (int j 0; j < 10; j){res dfs(n - 1, j);}return res % MOD;}int dfs(int i, int j){if (…...
linux下的posix信号量
目录 引言 信号量背景知识 PV操作 信号量接口 基于环形队列的PC模型 代码实现 demo模型 具体实现 引言 在多线程编程领域,同步机制是确保数据一致性和避免竞态条件的关键技术。Linux操作系统作为开源软件的杰出代表,提供了多种同步原语…...
【JavaWeb后端学习笔记】Spring框架下的Bean管理
Bean 1、Bean的获取2、Bean的作用域3、第三方Bean 1、Bean的获取 默认情况下,Spring项目启动时,会把Bean创建好交给IOC容器管理。当需要使用时,通过Autowired注解注入或者通过构造方法注入即可。 除此之外还可以通过Spring提供的Applicatio…...
如何在 ASP.NET Core 3.1 应用程序中使用 Log4Net
介绍 日志记录是应用程序的核心。它对于调试和故障排除以及应用程序的流畅性非常重要。 借助日志记录,我们可以对本地系统进行端到端的可视性,而对于基于云的系统,我们只能提供一小部分可视性。您可以将日志写入磁盘或数据库中的文件…...
Photoshop提示错误弹窗dll缺失是什么原因?要怎么解决?
Photoshop提示错误弹窗“DLL缺失”:原因分析与解决方案 在创意设计与图像处理领域,Photoshop无疑是众多专业人士和爱好者的首选工具。然而,在使用Photoshop的过程中,有时会遇到一些令人头疼的问题,比如突然弹出的错误…...
mall-admin-web开源项目搭建教程(图文)
本章教程,介绍如何在本地部署运行mall-admin-web这个开源项目。 开源地址:https://gitee.com/macrozheng/mall-admin-web mall-admin-web是一个电商后台管理系统的前端项目,基于Vue+Element实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计…...
nginx做为文件服务器
docker-compose 创建nginx version: 3services:nginx-web:image: nginx:1.23.4container_name: nginx-webenvironment:# 时区上海TZ: Asia/Shanghaiports:- "88:80"- "443:443"volumes:# 证书映射- /home/dockerdata/nginx/cert:/etc/nginx/cert# 配置文件…...
加速合并,音频与字幕的探讨
因上一节。合并时速度太慢了。显卡没用上。所以想快一点。1分钟的视频用了5分钟。 在合并视频时,进度条中的 now=None 通常表示当前处理的时间点没有被正确记录或显示。这可能是由于 moviepy 的内部实现细节或配置问题。为了加快视频合并速度并利用 GPU 加速,可以采取以下措…...
(3)spring security - 认识PasswordEncoder
目录 1.简介1.1.简单了解认证流程 2.密码验证3.PasswordEncoder的内置实现4.小结 目标: 简单了解认证的流程简单认识spring security中的Password Encoder 1.简介 还是以这幅图为基础,认识Password Encoder到底是什么? 1.1.简单了解认证流程…...
React 入门:JSX语法详解
简介 React是一个用于构建用户界面的JavaScript库,它引入了JSX语法,使得你可以在JavaScript代码中编写类似HTML的结构。JSX在编译后会被转换成合法的JavaScript对象。 JSX基础 JSX是一种看起来像HTML的JavaScript语法扩展。它并不直接被浏览器执行&am…...
Pandas常见函数
Pandas 是 Python 中用于数据分析和处理的强大工具库。以下是 Pandas 中一些常见的函数和方法,按用途分类总结: 1. 数据创建 pd.Series(data, index):创建一维的序列对象。pd.DataFrame(data, index, columns):创建二维的DataFra…...