Web 基础与 HTTP 协议
目录
一、Web 基础
1. 域名和DNS
(0)域名概念
(1)域名的结构
(2)域名结构图
(3)Host 文件
(4)域名注册
2. 网页与 HTML
(0)HTML 概述
(1)HTML 基础标签
(2)网站和主页
3. 静态网页与动态
(1)静态网页
(2)动态网页
二、HTTP 协议
1. HTTP 协议概述
2. HTTP 方法
3. HTTP 状态码
4. HTTP 请求流程分析
HTTP 请求流程
三、Nginx 网站服务基础
1. Nginx 简介
2. 安装 Nginx 服务器
一、Web 基础
1. 域名和DNS
(0)域名概念
-
域名(Domain Name):是互联网上用于标识和定位资源(如服务器、网站)的字符串,本质是 IP 地址的 “人性化映射”(如
www.baidu.com
对应具体的 IP 地址)。 -
核心作用:替代复杂的 IP 地址(如
192.168.1.100
),方便用户记忆和访问。 -
与 DNS 的关系:域名需要通过 DNS(Domain Name System,域名系统) 解析为 IP 地址,才能被计算机识别和访问。
(1)域名的结构
-
层级结构:
三级域名.二级域名.顶级域名
(例:www.baidu.com
→www
是三级,baidu
是二级,com
是顶级) -
顶级域名分类:
-
通用顶级域(gTLD):
.com
.net
.org
-
国家顶级域(ccTLD):
.cn
.us
.jp
-
(2)域名结构图
根域名(.)
├─ 顶级域名服务器(如 .com、.cn 服务器)
│ ├─ 二级域名服务器(如 baidu.com 服务器)
│ │ ├─ 子域名记录(如 www.baidu.com 的 IP 映射)
│ └─ 其他二级域名(如 google.com)
└─ 国家/地区顶级域名服务器(如 .cn 服务器)
DNS 解析流程:
- 客户端向本地 DNS 服务器发送域名解析请求(如
www.baidu.com
)。 - 本地 DNS 服务器先查询缓存,若没有则向 根 DNS 服务器 发起请求。
- 根 DNS 服务器返回顶级域名(如
.com
)服务器的地址。 - 本地 DNS 服务器向顶级域名服务器查询,获取二级域名(如
baidu.com
)服务器的地址。 - 最终向权威 DNS 服务器(
baidu.com
的服务器)查询,获取www.baidu.com
对应的 IP 地址,并返回给客户端。
(3)Host 文件
-
作用:本地域名解析,优先级高于DNS,用于手动绑定域名与 IP 地址
文件路径:-
Windows:
C:\Windows\System32\drivers\etc\hosts
-
Linux/Mac:
/etc/hosts
-
-
示例:
127.0.0.1 localhost
(将localhost
指向本机)
(4)域名注册
-
流程:选择域名 → 查询是否可用 → 通过注册商付费购买 → 绑定DNS解析
-
注意事项:
-
域名所有权需定期续费,过期可能被他人注册。
-
隐私保护服务可隐藏注册人信息。
-
2. 网页与 HTML
(0)HTML 概述
- 定义:HTML 是 HyperText Markup Language(超文本标记语言) 的缩写,是构建网页的基础技术之一。
- 核心作用:通过 “标签” 描述网页的 结构和内容(如标题、段落、图片、链接等),不负责样式(由 CSS 控制)和交互(由 JavaScript 控制)。
- 超文本(HyperText):指网页内容不仅包含文本,还可以包含图片、链接、音频、视频等多媒体元素,且元素之间通过超链接相互关联。
(1)HTML 基础标签
分类 | 常用标签 | 作用 |
---|---|---|
结构 | <html> 、<head> 、<body> | 文档根、元信息、可见内容容器 |
标题 / 段落 | <h1>~<h6> 、<p> | 标题(层级递减)、段落 |
链接 / 图片 | <a href="url"> 、<img src="路径"> | 超链接、插入图片(alt 描述必填) |
列表 | <ul> (无序列表)、<ol> (有序)、<li> | 列表容器、列表项 |
语义化 | <header> 、<nav> 、<footer> | 页眉、导航栏、页脚(替代 <div> 布局) |
表单 | <form> 、<input type="text/password"> | 用户输入表单(文本 / 密码等类型) |
(2)网站和主页
- 网页:浏览器显示的文档,静态(
.html
)或动态(.php
/ 异步加载数据)。 - 网站:多个相关网页的集合,通过域名访问(如
www.example.com
)。 - 主页:网站入口页面,默认文件名
index.html
,输入域名自动访问(如www.com
指向www.com/index.html
)。
3. 静态网页与动态
(1)静态网页
-
定义:内容固定的网页,直接由服务器返回预先生成的 HTML 文件。
-
特点:
-
内容不随用户请求变化(如企业官网、个人博客)。
-
加载速度快,安全性高(无数据库交互)。
-
技术栈:HTML、CSS、JavaScript(前端)
-
(2)动态网页
-
定义:内容根据用户请求实时生成的网页(如社交网络、电商平台)。
-
特点:
-
内容动态变化(基于用户登录状态、数据库查询等)。
-
支持交互功能(如评论、购物车)。
-
技术栈:后端语言(Python、PHP) + 数据库(MySQL) + 前端框架(React)。
-
二、HTTP 协议
1. HTTP 协议概述
- 定义:客户端与服务器通信的应用层协议,基于 TCP(默认端口 80,HTTPS 443),无状态(需 Cookie/Session 维持状态)。
- 核心特性:请求 - 响应模型,支持 HTML/JSON 等数据格式。
- 版本:
- 1:长连接(
keep-alive
)、管道化请求。 - 2:二进制分帧、多路复用、头部压缩。
- 3:基于 UDP 的 QUIC,低延迟、抗队头阻塞。
- 1:长连接(
2. HTTP 方法
方法 | 作用 | 幂等性 | 安全性 |
---|---|---|---|
GET | 获取资源(无副作用) | 幂等 | 安全 |
POST | 提交数据(如表单提交、创建资源) | 不幂等 | 不安全 |
PUT | 更新或替换整个资源 | 幂等 | 不安全 |
DELETE | 删除资源 | 幂等 | 不安全 |
PATCH | 更新资源的部分内容 | 不幂等 | 不安全 |
HEAD | 获取响应头(无响应体) | 幂等 | 安全 |
OPTIONS | 查询服务器支持的 HTTP 方法 | 幂等 | 安全 |
幂等性:多次执行同一操作结果相同(如 GET、PUT、DELETE)。
安全性:不修改服务器资源(如 GET、HEAD)。
GET 和 POST 比较:
3. HTTP 状态码
- 2xx 成功:
200 OK
(请求成功)、201 Created
(资源创建)、204 No Content
(无返回内容)。
- 3xx 重定向:
301
(永久重定向)、302
(临时重定向)、304
(资源未修改,用缓存)。
- 4xx 客户端错误:
400
(请求错误)、401
(未认证)、403
(禁止访问)、404
(资源不存在)。
- 5xx 服务器错误:
500
(内部错误)、502
(坏网关)、503
(服务不可用)
4. HTTP 请求流程分析
HTTP 请求流程
-
DNS 解析
浏览器将域名解析为服务器 IP 地址(优先本地缓存,否则查询 DNS 服务器)。 -
建立连接
- TCP 三次握手:与服务器指定端口(HTTP 80/HTTPS 443)建立网络连接。
- TLS 握手(仅 HTTPS):协商加密协议,创建安全传输通道。
-
发送请求
浏览器构造请求报文(包含请求方法、路径、头部信息、可选请求体),发送至服务器。 -
服务器处理
服务器解析请求,执行对应操作(如读取资源、调用接口),生成响应数据(HTML/JSON/ 错误等)。 -
接收响应
浏览器解析响应报文:- 状态码(如 200 成功、404 未找到);
- 响应头(如内容类型、缓存策略);
- 响应体(返回的具体内容,如网页数据)。
-
连接处理
- HTTP/1.1:默认复用连接(持久连接),减少重复握手;
- HTTP/1.0:需显式关闭连接(
Connection: close
)。
-
浏览器渲染
解析响应内容并渲染页面,同时触发额外资源(CSS/JS/ 图片)请求,重复上述流程。
核心逻辑:域名→IP→连接→请求→处理→响应→渲染,HTTPS 额外加密协商,HTTP/1.1 优化连接复用。
三、Nginx 网站服务基础
1. Nginx 简介
- 概述:Nginx 是高性能网络层工具,核心用于 反向代理、负载均衡、静态资源服务,通过异步架构解决高并发问题,是现代 Web 架构的基础设施。
-
核心功能:
反向代理:接收客户端请求,转发给后端服务器,隐藏后端服务器信息,增强安全性。
负载均衡:将客户端请求分配到多个后端服务器,提高系统响应能力和可靠性。常用算法有轮询、加权轮询、IP 哈希等。
静态资源服务:高效处理静态文件,如 HTML、CSS、JavaScript、图片等,减轻后端服务器压力。
HTTP 缓存:缓存经常访问的资源,减少对后端服务器的请求,加快页面加载速度。
-
管理命令:
nginx -s reload
:重新加载配置文件。
nginx -s stop
:快速停止服务。
nginx -s quit
:优雅停止服务。
nginx -t
:检查配置文件语法。
-
基础配置框架:
http {# 负载均衡配置(定义后端服务器组)upstream backend_servers {server 192.168.1.1:8080;server 192.168.1.2:8080;}server {listen 80; # HTTP 监听端口server_name yourdomain.com; # 绑定域名# 静态资源处理location /static/ {root /data/; # 静态文件目录:/data/static/...}# 反向代理到负载均衡组location / {proxy_pass http://backend_servers; # 转发所有请求到 upstreamproxy_set_header Host $host; # 传递客户端域名}# HTTPS 配置(需额外监听 443 端口)listen 443 ssl;ssl_certificate /path/cert.pem;ssl_certificate_key /path/key.pem;} }
2. 安装 Nginx 服务器
(1)官网下载安装包(nginx)
(2)关闭防火墙和 改SELinux 模式
systemctl stop firewalld
systemctl disable firewalld
setenforce 0修改 /etc/sysconfig/selinuxSELINUX=disable###
该文件用于配置 SELinux(Security-Enhanced Linux)的相关设置。SELinux 是一种安全模块,提供强制访问控制(MAC),以增强系统的安全性。
1. **SELINUX**:定义 SELinux 的工作状态,例如 `enforcing`(强制模式)、`permissive`(宽容模式)或 `disabled`(禁用)。
2. **SELINUXTYPE**:指定 SELinux 策略类型,例如 `targeted`(仅保护关键进程)或 `strict`(保护所有进程)
(3)安装相关依赖包
yum -y install gcc* pcre-devel zlib-devel openssl-devel###
“gcc*” 指安装与 GNU 编译器集合相关的所有软件包,GCC 是用于编译 C、C++ 等编程语言代码的重要工具。“pcre-devel” 是 Perl 兼容正则表达式库的开发文件,用于支持正则表达式相关功能的开发。
“zlib-devel” 是 zlib 库的开发文件,zlib 用于数据压缩和解压缩相关开发。
“openssl-devel” 是 OpenSSL 库的开发文件,OpenSSL 用于提供安全通信及加密相关功能的开发。
(4)解压源码包 并 创建服务器用户
tar zxvf nginx-x-x.. #解压
useradd -M -s /sbin/nologin nginx #创建用户
(5)配置 Nginx 的编译选项
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module##各参数作用
--prefix=/usr/local/nginx:指定 Nginx 的安装目录为/usr/local/nginx。在安装时,Nginx 的二进制文件、配置文件、日志文件等都会存于该目录下。指定安装目录能让你更好地管理 Nginx,还可以避免与系统自带的软件产生冲突。
--user=nginx --group=nginx:这两个参数分别指定 Nginx 运行时的用户和用户组为nginx。为 Nginx 创建专门的用户和用户组,可增强系统的安全性,防止 Nginx 进程以 root 权限运行,从而降低潜在的安全风险。
--with-http_ssl_module:启用http_ssl_module模块,该模块支持 HTTPS 协议。启用此模块后,Nginx 能够处理基于 SSL/TLS 加密的 HTTP 请求,为网站提供安全的通信通道。
--with-http_stub_status_module:启用http_stub_status_module模块,该模块可以提供 Nginx 的基本状态信息,如活动连接数、接受的请求总数、处理的请求总数等。通过这些信息,你可以监控 Nginx 的运行状态,进行性能分析和故障排查。
(6)进行编译和做软链接
编译 make && make install
软链接 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/nginx
检查 nginx -t
(7)nginx写入Linux系统服务(/lib/systemd/system 目录下都是系统服务)
[Unit]
Description=my nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/sbin/nginx
ExecStop=/usr/local/sbin/nginx -s stop
ExecReload=/usr/local/sbin/nginx -s reload[Install]
WantedBy=multi-user.target####解析配置[Unit]部分:- “Description=my nginx”表示该服务的描述为“my nginx” ,用于简要说明此服务的作用。- “After=network.target”说明该服务在网络服务启动之后启动,确保网络环境就绪后再启动此服务。[Service]部分:- “Type=forking”指定服务类型为forking,即启动进程会创建子进程,父进程退出,子进程继续运行。- “PIDFile=/usr/local/nginx/logs/nginx.pid”指明服务进程ID(PID)文件的路径,用于systemd追踪服务进程。- “ExecStart=/usr/local/sbin/nginx”定义启动服务时执行的命令,这里是启动位于“/usr/local/sbin/”路径下的nginx程序。- “ExecStop=/usr/local/sbin/nginx -s stop”定义停止服务时执行的命令,通过“-s stop”参数停止nginx服务。- “ExecReload=/usr/local/sbin/nginx -s reload”定义重新加载服务配置时执行的命令,使用“-s reload”参数让nginx重新加载配置。[Install]部分:- “WantedBy=multi-user.target”表示该服务在多用户模式下被需要,当系统进入多用户运行级别时,此服务会被自动启动。
(8)重启服务
重启服务 systemctl start nginx
重载文件重新读取 systemctl daemon-reload
netstat -anpt | grep nginx
(9)通过nginx配置文件可优化nginx
# 工作进程数量,通常设置为 CPU 核心数
worker_processes auto;events {# 每个工作进程的最大连接数worker_connections 1024;
}http {# 开启 gzip 压缩gzip on;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;# 隐藏 Nginx 版本信息server_tokens off;# 定义 upstream 用于负载均衡upstream backend {server backend1.example.com;server backend2.example.com;}# 服务器配置server {# 监听的端口listen 80;# 服务器名称server_name example.com;# 访问日志access_log /var/log/nginx/access.log;# 错误日志error_log /var/log/nginx/error.log;# 静态资源处理location /static/ {root /var/www/html;expires 30d;}# 反向代理location / {proxy_pass http://backend;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;}}
}
配置项 | 作用 |
---|---|
worker_processes auto | 根据服务器的 CPU 核心数自动设置工作进程的数量,充分利用多核 CPU 的性能 |
worker_connections 1024 | 设置每个工作进程可以同时处理的最大连接数 |
gzip on | 开启 Gzip 压缩,减少数据传输量,提高网站访问速度 |
gzip_types ... | 指定需要进行 Gzip 压缩的文件类型 |
server_tokens off | 隐藏 Nginx 版本信息,增强安全性 |
upstream backend | 定义一个上游服务器组,用于负载均衡 |
server { ... } | 定义一个虚拟服务器 |
listen 80 | 监听 80 端口 |
server_name example.com | 指定服务器名称 |
access_log 和 error_log | 配置访问日志和错误日志的路径 |
location /static/ | 处理静态资源请求,设置缓存时间为 30 天 |
location / | 反向代理请求到 backend 上游服务器组,并设置请求头信息 |