Web基础、Http协议与配置

42 阅读7分钟

Web基础

HTML概述

HTML(全称为Hypertext Markup Language)是一种标记语言,用于创建和组织Web页面的结构和内容。

HTML是构建Web页面的基础,定义了页面的结构和内容,通过标记和元素来实现。

MIME

MIME是一种互联网标准,是一种用于标识文件类型的方法。

MIME类型由一个主类型和一个子类型组成,用斜杠(/)分隔,MIME类型的作用是告诉接收方如何解释和处理接收到的文件。

#常见的MIME类型

  • text/html HTML网页
  • text/plain 纯文本文件
  • image/jpeg JPEG图像
  • image/png PNG图像
  • audio/mpeg MP3音频
  • video/mp4 MP4视频 ​

URI和URL

定义

URI(Uniform Resource Identifier):统一资源标识,分为URLURN

URL(Uniform Resorce Locator):统一资源定位符,用于描述某服务器某特定资源位置

URI和URL的区别

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

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

—————————————————————————————————————————————

静态资源和动态资源

静态资源和动态资源是两种常见的网络资源类型。

静态资源和动态资源的区别在于内容是否固定不变。

静态资源

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

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

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

动态资源

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

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

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

—————————————————————————————————————————————

HTTP协议

HTTP协议简介

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

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

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

HTTP协议版本

  • http 0.9 功能简陋,仅支持GET方法

  • http 1.0 相较以前版本可以支持POST、HEAD方法,支持HTML文件以外的其他类型,但不支持持久连接

  • http 1.1 支持持久连接,即在一个TCP连接里面完成多个http请求和响应,但是每个请求和响应是按照顺序一一对应的

HTTP方法

HTTP定义了一组请求方法,用于指定客户端对资源的操作方式,这些请求命令称为HTTP方法。

image.png

HTTP请求访问的完整过程

1.建立连接

2.接收请求

3.处理请求

4访问资源

5构建响应报文

6回复报文

7记录日志

HTTP状态码

HTTP状态码是服务器在处理请求时返回给客户端的数字代码,用于表示请求的处理结果。

HTTP协议状态码分类

image.png

HTTP协议常用的状态码

image.png

HTTP连接优化

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

  • 持久连接 :持久连接允许客户端和服务器之间在单个连接上发送多个HTTP请求和响应 ,而不是每个请求都要重新建立连接。

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

httpd配置

虚拟主机

httpd虚拟主机的作用是通过一个物理服务器来托管多个域名或网站,实现资源共享、个性化配置和多域名指向不同网站的功能,提高服务器资源利用率和降低成本。

基于ip地址

实际操作

[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf 
<VirtualHost 192.168.137.101:80>
    ServerAdmin support@jfedu.net
    DocumentRoot "/var/www/html/accp"
    ServerName www.accp.com
    ErrorLog "logs/www.accp.com_error_log"
    CustomLog "logs/www.accp.com_access_log" common
</VirtualHost>
​
​
<VirtualHost 192.168.137.102:80>
    ServerAdmin support@jfedu.net
    DocumentRoot "/var/www/html/accp"
    ServerName www.accp.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/www.accp.com_error_log"
    CustomLog "logs/www.accp.com_access_log" common
</VirtualHost>
​
​
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>
​
​
[root@localhost extra]#vim /etc/httpd/conf/httpd.conf
Listen 192.168.137.101:80
Listen 192.168.137.102:80

基于端口地址

[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf 
​
<VirtualHost 192.168.137.101:80>
    ServerAdmin support@jfedu.net
    DocumentRoot "/var/www/html/accp"
    ServerName www.accp.com
    ErrorLog "logs/www.accp.com_error_log"
    CustomLog "logs/www.accp.com_access_log" common
</VirtualHost>
​
​
​
<VirtualHost 192.168.137.101:8080>
    ServerAdmin support@jfedu.net
    DocumentRoot "/var/www/html/accp"
    ServerName www.accp.com
    ServerAlias www.dummy-host.example.com
    ErrorLog "logs/www.accp.com_error_log"
    CustomLog "logs/www.accp.com_access_log" common
</VirtualHost>
​
​
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>
​
​
[root@localhost extra]#vim /etc/httpd/conf/httpd.conf
Listen 192.168.137.101:80
Listen 192.168.137.101:8080

基于域名

[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf 
<VirtualHost 192.168.137.101:80>
    ServerAdmin support@jfedu.net
    DocumentRoot "/var/www/html/hzw"
    ServerName www.hzw.com
    ErrorLog "logs/www.hzw.com_error_log"
    CustomLog "logs/www.hzw.com_access_log" common
</VirtualHost>
​
​
​
<VirtualHost 192.168.137.101:80>
    ServerAdmin support@jfedu.net
    DocumentRoot "/var/www/html/hhh"
    ServerName www.hhh.com
    ErrorLog "logs/www.hhh.com_error_log"
    CustomLog "logs/www.hhh.com_access_log" common
</VirtualHost>
​
​
<Directory "/var/www">
    AllowOverride None
    # Allow open access:
    Require all granted
</Directory>
​
​
mkdir -p /var/www/html/hzw
mkdir -p /var/www/html/hhh
echo "<h1>www.hzw.com</h1>" /var/www/html/hzw/index.html
echo "<h1>www.hhh.com</h1>" /var/www/html/hhh/index.html
​
​
​
去客户机添加host文件

三种工作模式

Worker模式 工作线程(Worker)模式适用于资源利用率高的场景

Apache在启动时会创建一组预定义数量的线程池。 每个线程都可以处理多个请求,线程之间共享服务器的内存和资源。 当一个请求到达服务器时,一个空闲的线程将被选择来处理该请求。 线程可能会处理多个请求,通过线程池重用来更高效地处理请求。 这种模式下需要注意线程安全的问题,以确保多个线程间的数据访问不会导致冲突。

Event模式

事件驱动(Event MPM)模式适用于高并发场景

在事件驱动模式下,Apache使用I/O多路复用(如epoll或kqueue)来监听多个连接。 当一个连接有数据到达时,Apache将发出事件通知,表示该连接有可读数据。 Apache将事件分发给一个空闲的工作线程来处理请求。 工作线程处理请求的过程通常是非阻塞的,通过事件驱动方式读取数据和发送响应。 这种模式下可以处理大量的并发请求,因为它不需要为每个请求创建一个新的进程或线程。

Pre-Fork模式

预产生(Pre-Fork)模式适用于稳定性要求高的场景

Apache在启动时会创建一组预定义数量的子进程(称为工作进程)。 每个工作进程都是独立的,有自己的内存空间和资源。 当一个请求到达服务器时,主进程选择一个空闲的工作进程来接受该请求。 选中的工作进程处理该请求,生成响应并将其发送回客户端。 这种模式下每个工作进程只能处理一个请求,处理完请求后会继续等待下一个请求。

Cookie和Session

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

Cookie

Cookie是服务器在用户的浏览器中存储的小型文本文件。当用户访问一个网站时,服务器可以通过HTTP响应的Set-Cookie标头将一个或多个Cookie发送给浏览器。浏览器会将这些Cookie存储在用户的计算机上,并在以后的请求中将它们发送回服务器。

每个Cookie都包括一个名称、一个值和一些可选的属性,如过期时间、域名、路径等。服务器可以使用Cookie来存储用户的偏好设置、会话标识符、购物车数据等。浏览器会在每次请求中自动发送与特定域名相关联的Cookie,使得服务器能够识别用户。

Session

Session是在服务器端存储用户状态的一种机制。当用户首次访问一个网站时,服务器会为该用户创建一个唯一的会话标识符(Session ID)。这个标识符通常被存储在Cookie中,但也可以通过其他方式(如URL参数)进行传递。

服务器使用Session来存储用户信息和其他相关数据。在每个请求中,浏览器会将Session ID作为Cookie发送给服务器,使得服务器能够识别并恢复与该用户相关联的会话数据。Session数据通常存储在服务器的内存或持久化存储中。