web、HTTP协议

目录

一、Web基础

1.1 HTML概述

1.1.1 HTML的文件结构

1.2 HTML中的部分基本标签

1.3 URI 和 URL

二.HTTP协议

2.1.HTTP概念

2.2.HTTP协议版本

2.3.HTTP请求方法

2.4.HTTP请求访问的完整过程

2.5.HTTP状态码

2.6.HTTP请求报文和响应报文

2.7.HTTP连接优化

三.HTTP介绍

3.1.HTTPD相关文件

3.2.HTTPD配置文件

四.HTTPD配置

4.1.基于IP地址

4.2.基于端口地址

4.3.基于域名

五.HTTPD三种工作模式

六.Cookie和Session


一、Web基础

1.1 HTML概述

HTML(HyperText Markup Language)是一种用于创建网页结构和内容的标记语言。它被用于定义网页的结构,包括文本、图像、链接、多媒体内容以及其他元素的排列方式。HTML通过使用一系列称为标签(tags)的特殊代码来描述页面上的不同元素,从而告诉浏览器如何渲染和显示页面。

以下是HTML的一些基本概述:

1. **标记语言**:HTML是一种标记语言,它使用预定义的标签来标记文本中的不同部分,以便浏览器能够正确地解释和渲染页面。

2. **标签(Tags)**:HTML标签是用尖括号包围的关键词,如`<html>`、`<head>`、`<body>`、`<p>`等。标签告诉浏览器如何显示页面的内容,以及如何组织这些内容。

3. **元素(Elements)**:标签与内容的组合被称为元素。一个元素通常由开始标签、内容和结束标签组成,如`<p>这是一个段落。</p>`。有些标签(称为自封闭标签)不需要结束标签,如`<img>`用于插入图像。

4. **文档结构**:HTML文档通常包括`<!DOCTYPE>`声明、`<html>`元素、`<head>`元素和`<body>`元素。`<!DOCTYPE>`声明定义了文档的类型,`<html>`元素是文档的根元素,`<head>`元素包含有关文档的元信息,而`<body>`元素包含实际显示在浏览器中的内容。

5. **属性(Attributes)**:标签可以包含属性,这些属性提供了有关元素的附加信息。属性以名称-值对的形式出现,放置在标签的开始标签中。例如,在`<img>`标签中,`src`属性指定图像的源文件。

6. **链接(Links)**:HTML通过`<a>`标签创建超链接,使用户能够在不同页面之间跳转。超链接可以指向其他页面、文件、位置或网络资源。

7. **列表、表格、表单**:HTML支持创建有序列表(`<ol>`)、无序列表(`<ul>`)、定义列表(`<dl>`)、表格(`<table>`)以及表单(`<form>`)等元素,以便更好地组织和呈现内容。

8. **多媒体**:HTML支持嵌入图像、音频、视频和其他多媒体内容。例如,`<img>`用于嵌入图像,`<audio>`和`<video>`用于嵌入音频和视频。

9. **语义化**:HTML5引入了更多的语义元素,如`<header>`、`<nav>`、`<section>`、`<article>`等,使开发者能够更好地描述页面的结构和内容,同时有助于搜索引擎优化和可访问性。

10. **版本演进**:HTML不断发展,从初始版本到HTML5,不断增加了新的功能和元素,以适应不断变化的网络需求和技术。

总之,HTML是构建网页内容和结构的基础,它定义了网页上的各种元素和如何呈现它们,为用户提供丰富的在线体验。与HTML配合使用的还有CSS(层叠样式表)用于样式设计和布局,以及JavaScript用于实现交互和动态效果。

1.1.1 HTML的文件结构

HTML文件结构示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <header>
        <h1>Page Title</h1>
        <nav>
            <ul>
                <li><a href="#">Home</a></li>
                <li><a href="#">About</a></li>
                <li><a href="#">Contact</a></li>
            </ul>
        </nav>
    </header>

    <section>
        <h2>Introduction</h2>
        <p>This is the introduction of the page.</p>
    </section>

    <section>
        <h2>Content</h2>
        <p>This is the main content of the page.</p>
    </section>

    <footer>
        <p>&copy; 2023 Your Website</p>
    </footer>
</body>
</html>
  1. <!DOCTYPE html>:这是文档类型声明,指定文档使用的HTML版本。在此例中,它表示使用HTML5。

  2. <html>:这是根元素,包含了整个HTML文档的内容。

  3. <head>:头部部分包含有关文档的元信息,如字符编码、标题等。

    • <meta charset="UTF-8">:这个标签指定文档使用UTF-8字符编码,以支持多种语言字符集。
    • <title>:这个标签设置网页的标题,将显示在浏览器的标签页上。
  4. <body>:正文部分包含了实际显示在浏览器中的页面内容。

    • <header>:通常包含网页的页眉内容,如标题、导航等。

      • <h1>:定义一个页面标题级别的标题。
      • <nav>:定义导航部分,包含页面链接。
        • <ul>:定义无序列表,其中包含导航链接。
        • <li>:定义列表项,其中包含导航链接。
        • <a>:定义超链接。
    • <section>:通常用于划分页面的不同部分,每个部分都可以包含一个标题和内容。

      • <h2>:定义一个部分标题级别的标题。
      • <p>:定义段落。
    • <footer>:通常包含网页的页脚内容,如版权信息、联系方式等。

这只是一个基本的HTML文件结构示例,实际上,可以根据需要添加更多的元素和内容来构建更复杂的网页。这个结构有助于确保网页在各种浏览器中以一致的方式呈现,并为搜索引擎优化和可访问性提供良好的基础。

1.2 HTML中的部分基本标签

基本标签    含义

以下是一些在HTML中常用的基本标签及其用途的简要概述:

1. `<html>`:HTML文档的根元素,包含文档的全部内容。

2. `<head>`:文档头部,包含元信息,不会在页面中显示。

   - `<meta>`:定义文档的元信息,如字符编码、关键词等。
   - `<title>`:定义页面标题,显示在浏览器标签栏或窗口标题栏上。

3. `<body>`:文档主体,包含在浏览器中显示的内容。

   - `<h1>`, `<h2>`, `<h3>`...:定义标题,从大到小表示不同级别的标题。
   - `<p>`:定义段落。
   - `<br>`:插入换行。
   - `<hr>`:插入水平线分隔。
   - `<em>`:强调文本,通常以斜体显示。
   - `<strong>`:强调文本,通常以加粗显示。
   - `<a>`:创建超链接。
   - `<img>`:插入图像。
   - `<ul>`:定义无序列表。
   - `<ol>`:定义有序列表。
   - `<li>`:定义列表项。
   - `<table>`:定义表格。
   - `<tr>`:定义表格行。
   - `<th>`:定义表头单元格。
   - `<td>`:定义表格数据单元格。

4. `<div>`:通用的容器标签,用于分组和样式化内容。

5. `<span>`:行内容器标签,用于样式化文本或包裹少量内容。

6. `<form>`:创建表单,用于用户输入数据。

   - `<input>`:输入字段,如文本框、单选按钮、复选框等。
   - `<textarea>`:多行文本输入框。
   - `<select>`:下拉菜单。
   - `<button>`:按钮。

7. `<label>`:标签用于表单元素的标注,提高可访问性。

8. `<iframe>`:嵌入其他网页或文档。

9. `<audio>`、`<video>`:用于嵌入音频和视频。

10. `<script>`:用于插入JavaScript代码。

11. `<style>`:用于内部定义CSS样式。

12. `<link>`:链接外部资源,如CSS文件。

13. `<meta>`:定义文档元信息,如字符编码和关键词。

14. `<meta>`:用于指定文档的字符编码。

15. `<meta>`:设置网页的关键字。

这些标签只是HTML中的一部分,还有许多其他标签可以用于构建更丰富和复杂的页面。每个标签都有其独特的功能和用途,可以根据需要选择适当的标签来实现所需的效果。


1.3 URI 和 URL

概念

URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)之间存在微妙的区别,尽管它们通常被混用。

1. **URI(Uniform Resource Identifier)**:
   - URI是一个通用的术语,用于标识任何形式的资源,不仅限于互联网资源。它可以用于标识本地文件、数据库条目等。
   - URI可以被分为两种子类:URL和URN。
   - 例如,一个ISBN号(International Standard Book Number)就是一个URN,用于唯一标识一本书,但它不提供定位信息。

2. **URL(Uniform Resource Locator)**:
   - URL是URI的一种特定形式,它不仅标识资源,还提供了资源的定位信息,允许通过某种协议访问资源。
   - URL包含了资源的位置信息,包括协议、主机、路径等。
   - 由于URL提供了资源的定位,因此它常常被用来引用网页、图像、视频等网络资源。

3. **URN(Uniform Resource Name)**:
   - URN是URI的另一种子类,它用于通过名称来标识资源,而不提供资源的位置信息。
   - URN的目标是提供持久、独一无二的资源标识,使资源可以在不同位置和协议上被访问,而不受位置和协议的限制。

总之,URI是一个更广泛的概念,用于标识各种资源。URL是URI的一种特定类型,提供了资源的标识和定位信息。URN是另一种URI子类,用于通过名称来标识资源,但不提供定位信息。在实际使用中,术语URL经常用于表示资源的标识和定位,因此这两个概念通常被混淆。

URI(Uniform Resource Identifier)和URL(Uniform Resource Locator)是与定位和标识资源在互联网上的方法相关的概念。尽管它们通常被用来描述相同的内容,但它们在技术上有些微妙的区别。

**URI(Uniform Resource Identifier)**是一个通用的术语,用于标识某个资源的唯一名称。URI可以包含URL和URN(Uniform Resource Name)。URN是一种通过名称来标识资源的方式,而URL则是一种通过位置来标识资源的方式。

**URL(Uniform Resource Locator)**是URI的一个特定类型,它不仅标识资源的名称,还提供了用于定位资源的信息,通常是一个网络地址。URL包括以下几个主要部分:

1. **方案(Scheme)**:指定用于访问资源的协议或方式,如http、https、ftp等。
2. **主机(Host)**:资源所在的服务器的域名或IP地址。
3. **端口(Port)**:资源服务器监听的端口号,如果省略则使用默认端口。
4. **路径(Path)**:资源在服务器上的路径,指示资源的位置。
5. **查询字符串(Query)**:用于传递参数给资源的字符串,通常以键值对的形式存在。
6. **片段标识(Fragment)**:指向资源中的一个特定片段,常用于指示文档中的特定部分(如页面锚点)。

以下是一个URL的示例:

```
https://www.example.com:8080/products?id=12345&page=1#section-2
```

- 方案:https
- 主机:www.example.com
- 端口:8080
- 路径:/products
- 查询字符串:id=12345&page=1
- 片段标识:section-2

总之,URI是一个通用的概念,用于标识资源。URL是URI的一种特定类型,它提供了定位资源的详细信息,包括协议、域名、路径等。

URI 和 URL 的区别

    定义范围:URI是一个广义的概念,用于标识和命名互联网上的资源,可以是URL、URN或其他形式。URL是URI的一种具体实现形式,用于资源的定位和访问。

    功能重点:URI强调资源的标识性,用于唯一标识和命名资源。URL则更注重资源的位置性,其中包含了定位和访问资源所需的详细信息。


动态资源和静态资源

动态资源和静态资源是两种在Web开发中常用的术语,用于描述不同类型的网页内容。它们之间的区别在于如何生成和呈现内容以及在客户端和服务器之间的交互方式。

**静态资源(Static Resources)**:
静态资源是在服务器上提前创建好并保存在文件系统中的内容,不会在请求时进行任何改变。这些资源可以是HTML、CSS、JavaScript、图像、音频、视频等文件。当客户端请求这些静态资源时,服务器会直接将文件发送给客户端,不涉及服务器端的处理。

静态资源指的是在服务器上保存的文件,其内容在请求和传输过程中不发生变化。

静态资源可以是图片、CSS样式表、JavaScript文件、HTML文件等。

静态资源的请求一般是通过URL直接访问,当客户端发送请求时,服务器直接将这些文件返回给客户端,不进行任何处理。

优点:
- 加载速度较快:由于内容已经准备好并保存在文件系统中,直接返回给客户端,无需额外的服务器处理。
- 适用于不经常变化的内容,如图像、CSS等。

缺点:
- 无法根据用户的个性化需求动态生成内容。
- 不适合处理需要实时更新的内容。

**动态资源(Dynamic Resources)**:
动态资源是在请求时根据客户端请求的参数或其他信息,通过服务器端的处理动态生成的内容。这些资源可以是动态网页、用户个人信息、实时数据等。

动态资源则是在服务器端通过执行脚本或程序生成的内容,需要占用服务器的资源。

服务器会根据请求中的参数和数据,执行相应的脚本或程序来生成动态内容,然后将生成的内容返回给客户端。

动态资源可以是动态网页、API接口等。

优点:
- 可根据用户请求生成个性化内容,如个人资料、搜索结果等。
- 可与数据库或其他后端逻辑进行交互,实现实时更新的功能。

缺点:
- 由于涉及服务器端的处理,加载速度可能较慢,特别是在高流量时。
- 需要服务器端的处理逻辑,可能增加服务器负担。

通常,静态资源适用于不频繁变化的内容,而动态资源适用于需要个性化或实时更新的内容。在实际的Web开发中,这两种资源往往会结合使用,以实现更好的用户体验和功能。例如,一个动态网页可能包含静态的CSS和JavaScript文件,但根据用户请求动态生成内容。

二.HTTP协议

2.1.HTTP概念

HTTP(Hypertext Transfer Protocol)是一种用于在Web上传输数据的协议。它是客户端和服务器之间通信的一种规范,用于请求和响应Web资源。HTTP协议是互联网上最为广泛使用的协议之一,它定义了客户端(如浏览器)和服务器之间如何交换信息。

以下是HTTP协议的一些关键特点和工作方式:

1. **客户端-服务器模型**:HTTP使用客户端-服务器模型,其中客户端发出请求,服务器提供响应。客户端通常是浏览器,而服务器是存储和提供Web资源的主机。

2. **请求(Request)**:客户端发送HTTP请求以获取特定资源。请求包括请求方法、URL、HTTP版本、请求头部和请求体。常见的请求方法包括GET(获取资源)、POST(提交数据)、PUT(更新资源)、DELETE(删除资源)等。

3. **响应(Response)**:服务器根据客户端的请求发送HTTP响应,其中包含状态码、响应头部和响应体。状态码指示了请求的结果,如200表示成功,404表示资源未找到,500表示服务器错误等。

4. **URL(Uniform Resource Locator)**:URL用于标识资源的位置。HTTP请求中的URL指示了客户端想要访问的资源。

5. **状态保持**:HTTP是一种无状态协议,每个请求和响应之间是独立的,服务器不会保留客户端的状态。为了实现状态保持,使用了Cookie和Session等机制。

6. **Cookie**:Cookie是在客户端存储的小型数据片段,由服务器发送到客户端并在后续请求中返回,用于跟踪用户状态和存储用户数据。

7. **缓存**:HTTP支持缓存机制,使得浏览器可以存储一些资源的副本,以减少网络请求,提高性能。

8. **安全性**:HTTP本身不是加密的,故数据传输可能会被拦截。为了保护数据安全,通常使用HTTPS(HTTP Secure)协议,它在HTTP基础上添加了加密层。

9. **持久连接**:为了减少每次请求的开销,HTTP支持持久连接,允许在同一连接上发送多个请求和响应。

总之,HTTP是Web通信的基础,通过定义请求和响应的格式,使客户端能够从服务器请求资源,并获得适当的响应。它是构建Web应用程序和浏览器之间交互的基石。

HTTP协议采用了请求/响应模型。

客户端向服务器发送一个请求,请求头包含请求的方法、URL、协议版本、以及包含请求修饰符、客户信息和内容的类似于MIME的消息结构。

服务器以一个状态行作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上服务器信息、实体元信息以及可能的实体内容。

2.2.HTTP协议版本

HTTP协议经过多次演进,产生了不同版本。以下是一些主要的HTTP协议版本:

1. **HTTP/0.9**:
   - 1991年首次发布,作为早期的HTTP协议版本。
   - 非常简单,只支持GET请求,并且响应只能是HTML内容。
   - 不支持请求头、响应头等现代HTTP特性。

2. **HTTP/1.0**:
   - 1996年发布,引入了更多的功能。
   - 支持多种HTTP请求方法,如GET、POST、HEAD等。
   - 引入了请求头、响应头等特性,使得通信更加丰富。
   - 每个请求-响应都需要一个单独的TCP连接,效率较低。

3. **HTTP/1.1**:
   - 1999年发布,是一个重要的协议版本。
   - 引入了持久连接(Connection Keep-Alive)以减少连接开销。
   - 引入了管道化(Pipelining)允许多个请求在一个连接上同时发送。
   - 引入了虚拟主机(Virtual Host)支持,使多个域名可以共享同一个IP地址。
   - 引入了块传输编码(Chunked Transfer Encoding)和缓存机制等。

4. **HTTP/2**:
   - 2015年发布,是HTTP/1.1的继任者。
   - 引入了二进制分帧层,将HTTP消息拆分成多个帧并以二进制编码传输,提高了传输效率。
   - 支持多路复用,多个请求可以在一个连接上同时进行,减少了延迟。
   - 引入了首部压缩,减少了传输的开销。
   - 提升了安全性,要求使用TLS加密。

5. **HTTP/3**:
   - 2020年发布,是HTTP/2的继任者。
   - 基于QUIC协议,引入了更多的性能优化。
   - 减少了握手延迟,提升了连接的建立速度。
   - 改进了拥塞控制和流量控制机制。

每个HTTP协议版本都在不同程度上改进了性能、安全性和功能,以适应不断变化的网络需求。在实际开发中,了解不同版本的特性和差异是非常重要的,以便选择适合的版本来优化网站或应用的性能和用户体验。

2.3.HTTP请求方法

HTTP定义了多种请求方法(也称为动作或动词),用于指示客户端希望服务器执行的操作。以下是一些常见的HTTP请求方法及其用途:

1. **GET**:
   - 用于请求指定资源的表示形式。
   - 请求参数会附加在URL的查询字符串中。
   - 不应该用于传输敏感数据,因为参数会暴露在URL中。

2. **POST**:
   - 用于向服务器提交数据,通常用于创建新资源。
   - 请求参数通常包含在请求的正文中,而不是URL中。

3. **PUT**:
   - 用于更新指定资源或在不存在时创建资源。
   - 请求中的数据会替代服务器上的相应资源。

4. **DELETE**:
   - 用于删除指定资源。
   - 可能需要对资源进行身份验证以确保权限。

5. **PATCH**:
   - 用于对资源进行部分更新。
   - 请求中的数据表示资源的部分状态。

6. **HEAD**:
   - 类似于GET请求,但服务器只返回响应头,不返回实际内容。
   - 用于检查资源是否存在以及获取其元数据,但不获取实际数据。

7. **OPTIONS**:
   - 用于请求关于服务器支持的请求方法、跨域设置等信息。
   - 服务器会返回支持的方法列表等信息。

8. **CONNECT**:
   - 用于建立到资源的网络连接,通常用于代理服务器。

9. **TRACE**:
   - 用于执行一个消息回环测试,服务器会返回收到的请求内容。
   - 主要用于调试和诊断。

10. **LINK** 和 **UNLINK**:
   - 用于创建和删除链接,但很少使用。

这些HTTP请求方法使客户端能够以不同的方式与服务器交互,执行不同的操作。在实际的Web应用程序中,通常会根据需要使用适当的请求方法来实现所需的功能。

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,无论进行多少次PUT操作,其结果并没有不同。

3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,几乎目前所有的提交操作都是用POST请求的。

4、DELETE请求顾名思义,就是用来删除某一个资源的。

2.4.HTTP请求访问的完整过程

1.建立连接

2.接收请求

3.处理请求

4.访问资源

5.构建响应报文

6.发送响应报文

7.记录日志

2.5.HTTP状态码

 #产生502(无效网关)的原因:

数据包没有送到网卡,网络问题;

数据包送进去了(交换机能抓到包),但是网卡没收到,网卡问题或防火墙问题;

网卡接收到了,处理不了,服务问题。(比如服务器当前连接太多,响应太慢;页面素材太多,带宽不够。)

2.6.HTTP请求报文和响应报文

HTTP请求报文和响应报文是在客户端和服务器之间传输的数据结构,用于请求和响应Web资源。它们包含了不同的部分,以描述请求或响应的详细信息。以下是HTTP请求报文和响应报文的基本结构和组成部分:

**HTTP请求报文**:

一个HTTP请求报文由以下部分组成:

1. **请求行**:包括请求方法、请求的URL和HTTP协议版本。

2. **请求头部**:包含各种请求的元信息,如用户代理信息、接受的数据类型、认证信息等。

3. **空行**:一个空行用于分隔请求头部和请求体。

4. **请求体**:在某些请求中,如POST请求,可以包含传输的数据,如表单数据、JSON数据等。

以下是一个HTTP请求报文的示例:

```
GET /example/page.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: text/html,application/xhtml+xml
```

**HTTP响应报文**:

一个HTTP响应报文由以下部分组成:

1. **状态行**:包括HTTP协议版本、状态码和状态短语。

2. **响应头部**:包含响应的元信息,如服务器信息、数据类型、响应时间等。

3. **空行**:一个空行用于分隔响应头部和响应体。

4. **响应体**:包含实际的响应数据,如HTML内容、JSON数据等。

以下是一个HTTP响应报文的示例:

```
HTTP/1.1 200 OK
Date: Thu, 27 Aug 2023 12:00:00 GMT
Server: Apache
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html>
<html>
<head>
    <title>Example Page</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>
```

总之,HTTP请求报文和响应报文是用于传输客户端请求和服务器响应的结构化数据。它们的组成部分提供了关于请求和响应的详细信息,使得客户端和服务器可以有效地进行通信。

2.7.HTTP连接优化

HTTP连接优化是一系列技术和方法,用于改善网页加载速度、性能和用户体验。优化HTTP连接可以减少延迟、提高传输效率,并减轻服务器和客户端的负担。以下是一些常见的HTTP连接优化技术:

1. **使用持久连接**:
   - HTTP/1.1引入了持久连接(Connection Keep-Alive),允许在同一连接上发送多个请求和响应,避免了频繁的连接和关闭过程。

2. **使用HTTP/2**:
   - HTTP/2引入了二进制分帧、多路复用等特性,显著提升了性能。多个请求可以同时在同一连接上进行,减少了延迟。
3. **减少请求次数**:
   - 使用合并文件和雪碧图,将多个资源合并为一个请求,减少请求的数量。
   - 使用图像格式的压缩,以减小文件大小。

4. **使用CDN**(内容分发网络)**:
   - 将资源分布到多个地理位置的服务器上,使用户可以从最近的服务器获取资源,提高加载速度。

5. **启用压缩**:
   - 使用Gzip或Brotli等压缩算法,减小传输的数据量,加快下载速度。

6. **使用缓存**:
   - 使用HTTP缓存机制,使得浏览器可以缓存资源,减少重复请求。

7. **优化图片**:
   - 使用适当的图像格式(如JPEG、PNG、WebP)以及图像压缩工具。
   - 按需加载图片,延迟加载或懒加载不在视窗内的图片。

8. **使用预加载和预渲染**:
   - 预加载:使用`<link rel="preload">`指示浏览器提前加载资源,以便在需要时立即使用。
   - 预渲染:使用`<link rel="prerender">`指示浏览器提前渲染整个页面,以提高用户点击后的响应速度。

9. **优化字体**:
   - 使用适量的字体格式,避免加载不必要的字体资源。
   - 考虑使用Web字体,以便在跨平台和设备上显示一致的字体。

10. **最小化和组织代码**:
    - 使用CSS和JavaScript压缩工具,减小文件大小。
    - 将CSS和JavaScript文件合并为较少的文件,减少HTTP请求。

11. **并行连接 **:

并行连接通过同时建立多个连接 ,使得客户端可以并发地发送多个请求,以提高并发性和响应速度。

12. ** 管道化连接**:

管道化连接是一种在持久连接上发送多个请求而无需等待服务器响应的机制

通过综合使用这些优化技术,您可以显著提升网页的加载速度和性能,为用户提供更好的体验。不同的网站和应用可能需要根据其特定的需求选择不同的优化策略。

三.HTTP介绍

3.1.HTTPD相关文件

"Httpd"通常是指Apache HTTP Server,也称为Apache。它是一款开源的、跨平台的Web服务器软件,用于提供Web内容和服务。以下是与Apache HTTP Server相关的一些常见文件和目录:

1. **httpd.conf**:
   - 主要配置文件,用于配置Apache的全局设置、模块加载、虚拟主机等。
   - 位于Apache配置文件目录中(通常是`/etc/httpd/`或`/etc/apache2/`)。

2. **httpd-vhosts.conf**:
   - 虚拟主机配置文件,用于定义不同域名或IP上的虚拟主机设置。
   - 通常在主配置文件中通过`Include`指令引入。

3. **httpd.conf.d/ 或 conf-available/**:
   - 额外的配置文件目录,用于组织和管理配置文件的模块化。
   - 不同的模块或功能可以在各自的配置文件中进行设置。

4. **htdocs/ 或 public_html/**:
   - 默认的Web文档根目录,存放Web服务器提供的内容。
   - 可以通过配置文件更改文档根目录的位置。

5. **logs/**:
   - 日志目录,存放Apache生成的日志文件,包括访问日志和错误日志。
   - 访问日志记录来自客户端的请求,错误日志记录服务器错误和警告。

6. **modules/ 或 mods-available/**:
   - 存放Apache模块文件的目录,模块提供额外的功能和特性。
   - 通常通过加载模块来启用相应的功能。

7. **ssl/ 或 conf/extra/httpd-ssl.conf**:
   - 存放SSL(安全套接字层)相关配置文件的目录,用于配置HTTPS和加密通信。
   - httpd-ssl.conf 文件用于配置SSL设置。

8. **cgi-bin/**:
   - 存放CGI(公共网关接口)脚本的目录,用于在服务器上运行动态脚本。

9. **conf/mime.types**:
   - MIME 类型映射文件,定义文件扩展名和相应的MIME类型。

10. **conf/extra/httpd-userdir.conf**:
    - 用户目录配置文件,允许用户在其主目录中创建公共的 `public_html` 目录用于Web内容。

这些是Apache HTTP Server常见的文件和目录。根据不同的操作系统和安装方式,具体的文件结构可能会有所不同。如需深入了解和管理Apache,建议查阅官方文档或相关资源。

3.2.HTTPD配置文件

yum install -y httpd #安装

#主配置文件
/etc/httpd/conf/httpd.conf  

#子配置文件
/etc/httpd/conf.d/*.conf

#模块加载的配置文件
/etc/httpd/conf.d/conf.modules.d/ 

检查配置语法:httpd -tapache2 -t

站点网页文档根目录:/var/www/html

服务单元文件

/usr/lib/systemd/system/httpd.service

配置文件:/etc/sysconfig/httpd

主服务器程序文件

/usr/sbin/httpd

模块文件

/etc/httpd/modules

/usr/lib64/httpd/modules

httpd服务控制和启动(命令部分)

#开启自启动/开机自动关闭 httpd服务
systemctl enable|disable httpd.service

开启httpd服务

systemctl start httpd.service
or
apachectl start
or
service httpd start

重启httpd服务

systemctl start httpd.service
or
apachectl restart
or
service httpd restart

停止httpd服务

systemctl stop httpd.service
or
apachectl stop
or
service httpd stop

查看httpd服务的运行状态

systemctl status httpd

配置文件语法检查

apachectl configtest
or
service httpd configtest

四.HTTPD配置

4.1.基于IP地址

在Apache HTTP Server(通常称为httpd)中,您可以基于IP地址配置虚拟主机,从而为不同的IP地址提供不同的网站或应用程序。这在多个网站共享同一台服务器的情况下非常有用。以下是基于IP地址进行配置的一般步骤:

1. **编辑虚拟主机配置文件**:
   首先,您需要编辑Apache的虚拟主机配置文件。该文件通常是 `httpd-vhosts.conf` 或类似的文件,具体名称和路径取决于您的安装方式和操作系统。

2. **添加虚拟主机配置块**:
   在配置文件中,为每个IP地址添加一个虚拟主机配置块。每个虚拟主机配置块将包含该IP地址的特定配置信息,如文档根目录、日志位置等。

   ```apache
   <VirtualHost 192.168.1.10>
       DocumentRoot /var/www/site1
       ServerName site1.example.com
       ErrorLog /var/log/httpd/site1_error.log
       CustomLog /var/log/httpd/site1_access.log combined
   </VirtualHost>
   ```

3. **重启或重新加载Apache**:
   保存配置文件后,您需要重启或重新加载Apache以使更改生效。具体的命令可能因操作系统而异。例如,在大多数Linux系统中,您可以使用以下命令来重新加载配置:

   ```sh
   sudo systemctl reload httpd
   ```

4. **配置DNS解析**:
   如果您想要使用域名访问虚拟主机,您需要确保域名解析到正确的IP地址。您可以在DNS设置中为每个域名指定相应的IP地址。

5. **测试访问**:
   一旦配置完成并重启Apache,您可以通过IP地址或域名访问配置的虚拟主机。确保您的虚拟主机配置正常工作。

通过以上步骤,您可以为不同的IP地址配置不同的虚拟主机,从而实现在同一台服务器上为多个IP地址提供不同的Web内容。注意,每个虚拟主机需要有独立的配置块,并且每个IP地址只能在一个虚拟主机中使用。

4.2.基于端口地址

在Apache HTTP Server(通常称为httpd)中,您可以基于不同的端口配置虚拟主机,从而在同一台服务器上为不同的端口提供不同的网站或应用程序。这对于在单台服务器上托管多个应用程序或网站非常有用。以下是基于端口地址进行配置的一般步骤:

1. **编辑虚拟主机配置文件**:
   首先,您需要编辑Apache的虚拟主机配置文件。通常,这个文件是 `httpd-vhosts.conf` 或类似的文件,具体名称和路径可能因您的操作系统和安装方式而异。

2. **添加虚拟主机配置块**:
   在配置文件中,为每个端口添加一个虚拟主机配置块。每个虚拟主机配置块将包含该端口的特定配置信息,如文档根目录、日志位置等。

   ```apache
   <VirtualHost *:8080>
       DocumentRoot /var/www/site1
       ServerName example.com
       ErrorLog /var/log/httpd/site1_error.log
       CustomLog /var/log/httpd/site1_access.log combined
   </VirtualHost>
   ```

3. **重启或重新加载Apache**:
   保存配置文件后,您需要重启或重新加载Apache以使更改生效。具体的命令可能因操作系统而异。例如,在大多数Linux系统中,您可以使用以下命令来重新加载配置:

   ```sh
   sudo systemctl reload httpd
   ```

4. **测试访问**:
   一旦配置完成并重启Apache,您可以通过指定的端口访问配置的虚拟主机。确保您的虚拟主机配置正常工作。

5. **防火墙配置**:
   如果使用非标准的端口(如80或443),请确保服务器的防火墙允许访问这些端口。

通过以上步骤,您可以为不同的端口配置不同的虚拟主机,从而在同一台服务器上为多个端口提供不同的Web内容。请注意,每个虚拟主机需要有独立的配置块,并且每个端口只能在一个虚拟主机中使用。

4.3.基于域名

在 Apache HTTP Server(通常称为httpd)中,基于域名配置虚拟主机是一种常见的做法,允许您在同一台服务器上为不同的域名提供不同的网站或应用程序。以下是基于域名进行配置的一般步骤:

1. **编辑虚拟主机配置文件**:
   打开 Apache 的虚拟主机配置文件。通常,这个文件被称为 `httpd-vhosts.conf`,但具体名称和路径取决于您的安装方式和操作系统。

2. **添加虚拟主机配置块**:
   在配置文件中,为每个域名添加一个虚拟主机配置块。每个虚拟主机配置块将包含与该域名相关的配置信息,例如文档根目录、日志位置等。

   ```apache
   <VirtualHost *:80>
       ServerName example.com
       DocumentRoot /var/www/site1
       ErrorLog /var/log/httpd/site1_error.log
       CustomLog /var/log/httpd/site1_access.log combined
   </VirtualHost>
   ```

   在上面的示例中,`ServerName` 指令指定了虚拟主机要响应的域名,`DocumentRoot` 指令指定了网站文件的根目录,而 `ErrorLog` 和 `CustomLog` 指令定义了错误日志和访问日志的位置。

3. **重启或重新加载Apache**:
   保存虚拟主机配置文件后,您需要重新启动或重新加载 Apache 以使更改生效。在大多数Linux系统中,您可以使用以下命令重新加载配置:

   ```sh
   sudo systemctl reload httpd
   ```

4. **配置DNS解析**:
   确保您的域名已经解析到服务器的IP地址。您可以在DNS设置中为每个域名指定正确的IP地址。

5. **测试访问**:
   一旦配置完成并重新加载了 Apache,您可以通过访问指定的域名来访问配置的虚拟主机。确保虚拟主机正常运行。

通过以上步骤,您可以为不同的域名配置不同的虚拟主机,从而在同一台服务器上为多个域名提供不同的网站内容。每个虚拟主机需要有独立的配置块,并且每个域名只能在一个虚拟主机中使用。

五.HTTPD三种工作模式

Apache HTTP Server(httpd)有三种常见的工作模式,也称为MPM(Multi-Processing Module)模式,用于处理并发连接和请求。每种工作模式在不同的场景下有不同的性能和资源消耗表现。以下是这三种工作模式:

1. **Prefork MPM**:
   Prefork 是 Apache 最传统的工作模式。在这个模式下,每个客户端请求都会由一个单独的子进程来处理。这意味着每个请求都在自己的进程中运行,因此稳定性和隔离性较高,但也会消耗较多的系统资源。

   Prefork MPM 适用于需要独立进程隔离、不需要太高性能的环境,比如传统的 CGI 或 PHP-CGI 模式。

2. **Worker MPM**:
   Worker 是另一种常见的工作模式。在这个模式下,主进程会创建多个子进程,每个子进程又可以创建多个线程。每个线程可以处理一个客户端连接和请求。这种模式可以更有效地利用多核 CPU 和线程,提供更高的性能。

   Worker MPM 适用于需要处理大量连接和请求的高并发环境,尤其是在静态资源较多的情况下。

3. **Event MPM**:
   Event 是 Worker MPM 的改进版本。在 Event 模式下,主进程会创建多个子进程,每个子进程可以创建多个线程。与 Worker MPM 不同的是,Event MPM 使用更高效的事件驱动机制来处理连接和请求,减少了资源的浪费。

   Event MPM 适用于高并发环境,并且相比 Worker MPM,可以更好地处理大量并发连接。

选择适当的 MPM 模式取决于您的应用需求和服务器硬件。Prefork 适用于低并发、需要隔离性的场景。Worker 和 Event 适用于需要高性能和高并发的环境,其中 Event 模式通常更适合。根据您的具体用例,选择最合适的 MPM 模式来优化 Apache 的性能和资源利用率。

总结:

prefork:一对一模式,处理一个请求开启一个进程,缺点是httpd服务进程数有上限。

worker:一对多模式,规定一个进程处理多少个请求,缺点是处理完自己的请求空闲不会告知服务器。

event:一对多模式,且有一个监听进程,若有处理完请求的空闲进程会通知服务器分配新的请求。

六.Cookie和Session

Cookie和Session用于解决http协议无状态

Cookie和Session都是在Web开发中用于管理用户状态和跟踪用户会话的机制。它们都用于在客户端和服务器之间传递数据,但在工作方式和用途上有一些区别。

**Cookie(HTTP Cookie)**:

Cookie是存储在用户浏览器中的小段文本数据,用于跟踪用户的访问和状态。当服务器响应请求时,可以在响应头中设置一个或多个Cookie,然后浏览器将这些Cookie存储在用户的计算机上。浏览器在每次请求中都会将相关的Cookie信息发送给服务器。

特点:
- 存储在浏览器中,可以在浏览器会话之间保持状态。
- 可以设置过期时间,控制Cookie的生存周期。
- 可以存储少量数据,但不适合存储敏感信息,因为Cookie可以被用户查看和修改。
- 用于跟踪用户,实现一些基本的用户认证和个性化体验。

**Session(会话)**:

Session是一种在服务器端存储用户状态和数据的机制。当用户访问服务器时,服务器会创建一个唯一的会话标识符(Session ID),然后将相关的用户数据存储在服务器上。这个Session ID通常通过Cookie在浏览器和服务器之间传递。

特点:
- 数据存储在服务器上,用户无法直接访问或修改。
- 适合存储敏感数据,因为数据存储在服务器上,不会暴露给用户。
- 会话在服务器端管理,可以存储更大量的数据。
- 可以用于用户认证、数据保持、购物车等。

Cookie和Session之间的关系:
- 通常,会话机制(Session)是基于Cookie的,因为会话ID通常存储在Cookie中,以便在浏览器和服务器之间传递。
- 当用户第一次访问服务器时,服务器会创建一个新的会话并生成一个唯一的会话ID。然后,服务器会将该会话ID存储在Cookie中,供浏览器在后续请求中发送。
- 服务器根据接收到的会话ID查找相关的会话数据,从而管理用户状态和数据。

综合来看,Cookie和Session在Web开发中都扮演重要角色,用于管理用户状态、保持数据和提供个性化体验。根据具体需求,您可以选择使用其中一种或两者的组合

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java进阶(6)——抢购问题中的数据不安全(非原子性问题) Java中的synchronize和ReentrantLock锁使用 死锁及其产生的条件

目录 引出场景&#xff1a;大量请求拥挤抢购事务的基本特征ACID线程安全的基本特征 加锁(java)synchronized锁ReentrantLock锁什么是可重入锁&#xff1f;如何保证可重入 滥用锁的代价&#xff1f;&#xff08;死锁&#xff09;死锁的四个必要条件死锁的案例 总结 引出 1.大量请…

服务器数据恢复-服务器RAID6硬盘故障离线的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器中有一组由6块磁盘组建的RAID6磁盘阵列。服务器作为WEB服务器使用&#xff0c;上面运行了MYSQL数据库以及存放了网站代码和其他数据文件。 服务器故障&#xff1a; 在服务器运行过程中该raid6阵列中有两块磁盘先后离线&#xff0c;但是管…

设计模式之建造者模式

文章目录 盖房项目需求传统方式解决盖房需求传统方式的问题分析建造者模式概述是建造者模式的四个角色建造者模式原理类图建造者模式的注意事项和细节 盖房项目需求 需要建房子&#xff1a;这一过程为打桩、砌墙、封顶房子有各种各样的&#xff0c;比如普通房&#xff0c;高楼…

nginx配置keepalive长连接

nginx之keepalive详解与其配置_keepalive_timeout_恒者走天下的博客-CSDN博客 为什么要有keepalive? 因为每次建立tcp都要建立三次握手&#xff0c;消耗时间较长&#xff0c;所以为了减少tcp建立连接需要的时间&#xff0c;就可以设置keep_alive长连接。 nginx中keep_alive对…

day-30 代码随想录算法训练营 回溯part06

332.重新安排行程 思路&#xff1a;使用unordered_map记录起点机场对应到达机场&#xff0c;内部使用map记录到达机场的次数&#xff08;因为map会进行排序&#xff0c;可以求出最小路径&#xff09; class Solution { public:vector<string>res;unordered_map<stri…

vue3 01-setup函数

1.setup函数的作用: 1.是组合式api的入口2.比beforeCreate 执行更早3.没有this组件实例一开始创建vue3页面的时候是这样的 <template></template> <script> export default{setup(){return{ }} } </script>给容器传参在页面中显示 数据给模板使用,以…

1239. 串联字符串的最大长度;2826. 将三个组排序;2563. 统计公平数对的数目

1239. 串联字符串的最大长度 核心思想&#xff1a;递归&#xff0c;选或者不选&#xff0c;定义dfs(i&#xff0c;pre)表示从i-n的满足要求的arr中选择字符串串联所能获得的最大长度为dfs(i,pre)&#xff0c;pre表示已经选过的字符串所组成的集合。然后就有两种情况选&#xf…

LNMT搭建部署

目录 一、概述 二、Nginx高级配置 三、搭建 一、概述 所谓的LNMT架构指的就是Linux操作系统上部署Nginx web服务器、MySQL数据库服务器、Tomcat中间件服务器。 二、Nginx高级配置 location 精确匹配 ^~ 不用正则的字符串匹配 …

ssm+vue海鲜自助餐厅系统源码和论文

ssmvue海鲜自助餐厅系统源码和论文068 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&…

一个人多店操作?Shopee知虾多店聊聊有哪些优势?

Shopee知虾多店聊聊是一款为Shopee商家提供全面解决方案的应用程序。Shopee知虾多店聊聊主要致力于解决商家在Shopee平台上的客服对接问题。 以下是Shopee知虾多店聊聊的主要功能和优势&#xff1a; 多端同时登录&#xff1a;Shopee知虾多店聊聊支持多个端口同时登录&#xff0…

概念解析 | 量子机器学习:将量子力学与人工智能的奇妙融合

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:量子机器学习。 量子机器学习:将量子力学与人工智能的奇妙融合 量子增强机器学习:量子经典混合卷积神经网络 量子机器学习是量子计算和机器学习的结合,它利用量子力学的特…

复原20世纪复古修仙游戏

前言 在本教程中&#xff0c;我突发奇想&#xff0c;想做一个复古的修仙游戏&#xff0c;考虑到以前的情怀决定做个古老的躺平修仙游戏 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 - 爬虫逆向教学 ☄️python…

3DS Max中绘制圆锥箭头

3DS Max中绘制圆锥箭头 绘制结果绘制过程步骤一&#xff1a;绘制立体圆锥方法1方法2 步骤二&#xff1a;圆锥体调参&#xff08;模型尺寸设置&#xff09;1圆锥体参数说明2圆锥体参数调整 步骤三&#xff1a;绘制圆柱体步骤四&#xff1a;圆柱体调参步骤五&#xff1a;圆锥与圆…

ES基础操作

1.创建索引 在 Postman 中&#xff0c;向 ES 服务器发 PUT 请求 &#xff1a; http://127.0.0.1:9200/shopping 后台日志 重复发送 PUT 请求添加索引 &#xff1a; http://127.0.0.1:9200/shopping &#xff0c;会返回错误信息 : 2.获取单个索引相关信息 在 Postman 中&#…

C++编辑修改PDF

PDFWriter是一个易于使用的C创建、修改PDF文档的库 1.创建一个PDF文件 #include #include “PDFWriter.h” int main() { std::cout << “Hello World!\n”; PDFWriter pdfWriter; int retpdfWriter.StartPDF(“D:\mytestwriterpdf.pdf”, ePDFVersion13); if (ret eS…

Java实现根据短连接获取1688商品详情数据,1688淘口令接口,1688API接口封装方法

要通过1688的API获取商品详情数据&#xff0c;您可以使用1688开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过1688开放平台API获取商品详情属性数据接口&#xff1a; 首先&#xff0c;确保您已注册成为1688开放平台的开发者&#xf…

基于Qt5开发图形界面——WiringPi调用Linux单板电脑IO

Qt5——WiringPi Qt5WiringPi示例教程 Qt5 Qt是一种跨平台的应用程序开发框架。它被广泛应用于图形用户界面&#xff08;GUI&#xff09;开发&#xff0c;可以用于构建桌面应用程序、移动应用程序和嵌入式应用程序。Qt提供了丰富的功能和工具&#xff0c;使开发人员可以快速、高…

JVM知识点(一)

1、JVM基础概念 &#xff08;1&#xff09;JVM、JRE、JDK JRE&#xff1a;JVM基本类库组成的运行环境就是JRE。JVM自己是无法完成一次编译&#xff0c;处处运行的&#xff0c;需要有一个基本类库告诉JVM如何操作运行&#xff0c;如如何操作文件&#xff0c;连接网络等&#x…

行业追踪,2023-08-29

自动复盘 2023-08-29 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

基于数据湖的多流拼接方案-HUDI概念篇

目录 一、为什么需要HUDI&#xff1f; 1. 传统技术选型存在哪些问题&#xff1f; 2. Hudi有什么优点&#xff1f; 基于 Hudi Payload 机制的多流拼接方案&#xff1a; 二、HUDI的应用场景 1. 什么场景适合使用hudi&#xff1f; 2. 什么场景不适合使用hudi&#xff1f; …