Web 基础与 HTTP 协议

目录

[一、Web 基础](#一、Web 基础)

[1. 域名和DNS](#1. 域名和DNS)

(0)域名概念

(1)域名的结构

(2)域名结构图

[(3)Host 文件](#(3)Host 文件)

(4)域名注册

[2. 网页与 HTML](#2. 网页与 HTML)

[(0)HTML 概述](#(0)HTML 概述)

[(1)HTML 基础标签](#(1)HTML 基础标签)

(2)网站和主页

[3. 静态网页与动态](#3. 静态网页与动态)

(1)静态网页

(2)动态网页

[二、HTTP 协议](#二、HTTP 协议)

[1. HTTP 协议概述](#1. HTTP 协议概述)

[2. HTTP 方法](#2. HTTP 方法)

[3. HTTP 状态码](#3. HTTP 状态码)

[4. HTTP 请求流程分析](#4. HTTP 请求流程分析)

[HTTP 请求流程](#HTTP 请求流程)

[三、Nginx 网站服务基础](#三、Nginx 网站服务基础)

[1. Nginx 简介](#1. Nginx 简介)

[2. 安装 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.comwww是三级,baidu是二级,com是顶级)

  • 顶级域名分类

    • 通用顶级域(gTLD):.com .net .org

    • 国家顶级域(ccTLD):.cn .us .jp

(2)域名结构图
复制代码
根域名(.)  
├─ 顶级域名服务器(如 .com、.cn 服务器)  
│  ├─ 二级域名服务器(如 baidu.com 服务器)  
│  │  ├─ 子域名记录(如 www.baidu.com 的 IP 映射)  
│  └─ 其他二级域名(如 google.com)  
└─ 国家/地区顶级域名服务器(如 .cn 服务器)

DNS 解析流程

  1. 客户端向本地 DNS 服务器发送域名解析请求(如 www.baidu.com)。
  2. 本地 DNS 服务器先查询缓存,若没有则向 根 DNS 服务器 发起请求。
  3. 根 DNS 服务器返回顶级域名(如 .com)服务器的地址。
  4. 本地 DNS 服务器向顶级域名服务器查询,获取二级域名(如 baidu.com)服务器的地址。
  5. 最终向权威 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,低延迟、抗队头阻塞。

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 请求流程

  1. DNS 解析

    浏览器将域名解析为服务器 IP 地址(优先本地缓存,否则查询 DNS 服务器)。

  2. 建立连接

    • TCP 三次握手:与服务器指定端口(HTTP 80/HTTPS 443)建立网络连接。
    • TLS 握手(仅 HTTPS):协商加密协议,创建安全传输通道。
  3. 发送请求

    浏览器构造请求报文(包含请求方法、路径、头部信息、可选请求体),发送至服务器。

  4. 服务器处理

    服务器解析请求,执行对应操作(如读取资源、调用接口),生成响应数据(HTML/JSON/ 错误等)。

  5. 接收响应

    浏览器解析响应报文:

    • 状态码(如 200 成功、404 未找到);
    • 响应头(如内容类型、缓存策略);
    • 响应体(返回的具体内容,如网页数据)。
  6. 连接处理

    • HTTP/1.1:默认复用连接(持久连接),减少重复握手;
    • HTTP/1.0 :需显式关闭连接(Connection: close)。
  7. 浏览器渲染

    解析响应内容并渲染页面,同时触发额外资源(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:检查配置文件语法。

  • 基础配置框架:

    bash 复制代码
    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;  # 转发所有请求到 upstream
          proxy_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 模式

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
setenforce 0


修改  /etc/sysconfig/selinux

SELINUX=disable

###
该文件用于配置 SELinux(Security-Enhanced Linux)的相关设置。SELinux 是一种安全模块,提供强制访问控制(MAC),以增强系统的安全性。
1. **SELINUX**:定义 SELinux 的工作状态,例如 `enforcing`(强制模式)、`permissive`(宽容模式)或 `disabled`(禁用)。
2. **SELINUXTYPE**:指定 SELinux 策略类型,例如 `targeted`(仅保护关键进程)或 `strict`(保护所有进程)

(3)安装相关依赖包

bash 复制代码
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)解压源码包 并 创建服务器用户

bash 复制代码
tar zxvf nginx-x-x..  #解压  
useradd -M -s /sbin/nologin nginx  #创建用户   

(5)配置 Nginx 的编译选项

bash 复制代码
./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)进行编译和做软链接

bash 复制代码
编译 make && make install
软链接  ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/nginx
检查  nginx -t

(7)nginx写入Linux系统服务(/lib/systemd/system 目录下都是系统服务)

bash 复制代码
[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)重启服务

bash 复制代码
重启服务  systemctl start nginx
重载文件重新读取   systemctl daemon-reload
netstat -anpt | grep nginx

(9)通过nginx配置文件可优化nginx

bash 复制代码
# 工作进程数量,通常设置为 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_logerror_log 配置访问日志和错误日志的路径
location /static/ 处理静态资源请求,设置缓存时间为 30 天
location / 反向代理请求到 backend 上游服务器组,并设置请求头信息
相关推荐
Everbrilliant895 小时前
音视频之H.265/HEVC网络适配层
网络·音视频·h.265·nalu·h.265/hevc网络适配层·视频编码层vcl·网络适配层nal
爱编程的鱼7 小时前
JSON-RPC 2.0 规范中文版——无状态轻量级远程过程调用协议
前端·网络·qt·网络协议·rpc·json
成都被卷死的程序员8 小时前
简单理解https与http
网络协议·http·https
lml48568 小时前
源码编译安装LAMP
网络
WXDcsdn9 小时前
华为VRF技术基于三层交换机的应用实例
服务器·网络·华为
会讲英语的码农10 小时前
[计算机网络]物理层
网络·计算机网络
christine-rr11 小时前
【25软考网工】第四章无线通信网(1)移动通信与4G/5G技术、CDMA计算
网络·5g·网络工程师·软考·考试
caimouse11 小时前
C#里创建一个TCP客户端连接类
java·网络·tcp/ip
DanmF--12 小时前
详解UnityWebRequest类
网络·unity·c#·游戏引擎·游戏程序