详解Web服务器与http https协议工作过程

时间:2023-01-11 11:53:54

Web服务器

URL

URI

URL是URI的一个子集

www 

www所用的协议

http请求报文分析

 状态码(空行:最后一

个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。)

 网址解析

网址注释实例

 HTTP 请求/响应的步骤:

httpd 目录详解

*.conf配置文件注释

 同一个IP基于不同端口来访问两个网站的配置思路

HTTPS的安全通信机制:

工作流程可大致分为三个阶段:

练习


Web服务器

指网站服务器,是指驻留与因特网上某种类型计算机的程序,可以向浏览器等WEB客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。

URL

Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址,URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL是URI概念的一种实现方式。

URI

统一资源标识符,表示Web上每一种可用的资源,如HTML文档,图像,视频片段,程序等都是由一个URI进行标识的。

URL是URI的一个子集

www 

 www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询用户所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以Internet传递到世界各处去。

 与其他服务器类似,当你连接上www网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可以解析这些数据的软件来处理,那就是浏览器。www服务器与客户端浏览器之间的连接图。

www所用的协议

 HTTP超文本传输协议(HyperText Transfer Protocal),是互联网上最广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。

 它是建立在TCP上一种的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。

开始正文

http请求报文分析

详解Web服务器与http https协议工作过程

 详解Web服务器与http https协议工作过程

 状态码(空行:最后一

个响应头部之后是一个空行,发送回车符和换行符,通知服务器以下不再有响应头部。)

 1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;

  2xx:表示服务器已成功接收到请求并进行处理;

  3xx:表示服务器要求客户端重定向;

  4xx:表示客户端的请求有非法内容;

  5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

  200 OK:表示客户端请求成功;

  400 Bad Request:表示客户端请求有语法错误,不能被服务器所理解;

  401 Unauthonzed:表示请求未经授权,该状态代码必须与 WWW-Authenticate 报头域一起使用;

  403 Forbidden:表示服务器收到请求,但是拒绝提供服务,通常会在响应正文中给出不提供服务的原因;

  404 Not Found:请求的资源不存在,例如,输入了错误的URL;

  500 Internal Server Error:表示服务器发生不可预期的错误,导致无法完成客户端的请求;

  503 Service Unavailable:表示服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常;

  Location:Location响应报头域用于重定向接受者到一个新的位置。例如:客户端所请求的页面已不存在原先的位置,为了让客户端重定向到这个页面新的位置,服务器端可以发回Location响应报头后使用重定向语句,让客户端去访问新的域名所对应的服务器上的资源;

  Server:Server 响应报头域包含了服务器用来处理请求的软件信息及其版本。它和 User-Agent 请求报头域是相对应的,前者发送服务器端软件的信息,后者发送客户端软件(浏览器)和操作系统的信息。

  Vary:指示不可缓存的请求头列表;

 网址解析

URL:  <协议>://<主机或主机名>[:port]/<目录资源,路径>

协议:http, https, ftp
主机或主机名:www.baidu.com/www.****.net/192.168.233.154
[:port]: 可以省略:使用默认值:80,443,21
路径: 协议+主机+port -》 唯一定位到一个主机,具体的某一个服务 -》 实际上就是去访问一个资源-》 静态的资源:肯定是存放在Linux上某一个目录
           web服务器:给我们提供了一个目录:来存放资源文件 -》 /var/www/html/
http://192.168.233.154/index.html -> /var/www/html/index.html -> /index.html 错误的理解-》 /index.html

路径参数
查询参数
片段: #片段的名字

网址注释实例

https://blog.****.net/xc_zhou/article/details/80907101;xxx?name=123&gender=1#fragment
https: 协议
blog.****.net: 主机
/xc_zhou/article/details/80907101: 路径
;xxx:路径参数
name=123&gender=1:查询参数
frament: 片段

 HTTP 请求/响应的步骤:

  ● 客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;

  ● 客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客户端向服务器发送一个请求报文;

  ● 服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;

  ● 释放 TCP 连接:若connection 模式为close,则服务器主动关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

  ● 客户端浏览器解析HTML内容:客户端将服务器响应的 html 文本解析并显示;

目录/etc/httpd

[root@manage html]# tree /etc/httpd/
/etc/httpd/
├── conf
│   ├── httpd.conf
│   └── magic
├── conf.d
│   ├── autoindex.conf
│   ├── README
│   ├── userdir.conf
│   └── welcome.conf
├── conf.modules.d
│   ├── 00-base.conf
│   ├── 00-dav.conf
│   ├── 00-lua.conf
│   ├── 00-mpm.conf
│   ├── 00-optional.conf
│   ├── 00-proxy.conf
│   ├── 00-systemd.conf
│   ├── 01-cgi.conf
│   ├── 10-h2.conf
│   ├── 10-proxy_h2.conf
│   └── README
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
├── run -> /run/httpd
└── state -> ../../var/lib/httpd

7 directories, 17 files

[root@manage html]# tree -L 1 /etc/httpd/
/etc/httpd/
├── conf
├── conf.d
├── conf.modules.d
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
├── run -> /run/httpd
└── state -> ../../var/lib/httpd

httpd 目录详解

这三个目录中存放的都是配置文件:
conf:  存放的主配置文件
conf.d: 存放额外的配置文件: 必须以.conf为后缀才生效
conf.modules.d: 存放有关模块的配置文件, 必须以.conf后缀才生效
在conf/httpd.conf这文件中,有这样的配置:
Include conf.modules.d/*.conf   : 
IncludeOptional conf.d/*.conf   :

logs: 日志存放的位置
modules: 指定httpd相关模块存放的路径
run: 运行的一些信息
state: 状态的一些信息

*.conf配置文件注释

192.168.233.154 -》 /var/www/html
<Directory> -> 用来设置谁可以访问这个目录,以及对这个目录具备的权限

192.168.233.154 -》 /var/www/html
192.168.233.154/index.html -> /var/www/html/index.html
/index.html  -> /var/www/html/index.html

.htaccess -> 额外的权限配置文件:allowoverride none -> 不允许额外权限配置文件来重写

require: 设置客户端的访问权限:require all denied -> 拒绝所有人

AllowOverride:
表示是否允许额外配置文件".htaccess"的权限复写?可以在httpd.conf内设置好所有的权限,如此一来若用户的个人网页想要修改权限时
将会对管理员造成困扰。因此Apache默认可以让用户以目录下面的.htaccess文件复写<Directory>内的权限设置。这个项目则规定".htaccess"可以复写的权限类型有哪些?
     ALL: 全部的权限均可被复写
     
     AuthConfig: 仅有网页认证(账号密码)可复写,允许使用与认证授权相关的指令
                 AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, Require
                 
     FileInfo: 允许使用控制文档类型的指令
               AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, 
               FancyIndexing, HeaderName, IndexIgnore, IndexOptions, ReadmeName,

     Indexes: 仅允许Indexes方面的复写
              
     Limits: 允许用户利用Allow,Deny与Order管理可浏览的权限。
     
     None: 不可复写,即".htaccess"文件失效

Require:
 Require all granted #允许所有来源访问
 Require all denied #拒绝所有来源访问
 Require expr expression #允许表达式为true时访问
 Require ip 10 172.20 192.168.2 #允许 特定IP段访问,多个段之前用空格隔开。每个段使用开头几项表示
 Require host splaybow.com #只允许来自域名splaybow.com的主机访问
 
 Require all granted
     Access is allowed unconditionally.
    Require all denied
     Access is denied unconditionally.
    Require env env-var [env-var] ...
     Access is allowed only if one of the given environment variables is set.
    Require method http-method [http-method] ...
     Access is allowed only for the given HTTP methods.
    Require expr expression
     Access is allowed if expression evaluates to true.
        Some of the allowed syntaxes provided by mod_authz_user, mod_authz_host, and mod_authz_groupfile 
         are:
 Require user userid [userid] ...
     Only the named users can access the resource.
    Require group group-name [group-name] ...
     Only users in the named groups can access the resource.
    Require valid-user
     All valid users can access the resource.
    Require ip 10 172.20 192.168.2
     Clients in the specified IP address ranges can access the resource.
    Require forward-dns dynamic.example.org
     A client the IP of which is resolved from the name dynamic.example.org will be granted access.

 Options Indexes FollowSymLinks

语法:Options [+|-]option [[+|-]option] ...
         option可以为None,不启用任何额外特性,或者下面选项中的一个或多个:
                All  除MultiViews之外的所有特性,这是默认设置。
                ExecCGI  允许使用mod_cgi执行CGI脚本。
                FollowSymLinks  服务器允许在此目录中使用符号连接,如果此配置位于<Location>配置段中,则会被忽略。
                Includes  允许使用mod_include提供的服务器端包含。
                IncludesNOEXEC  允许服务器端包含,但禁用"#exec cmd"和"#exec cgi",但仍可以从ScriptAlias目录使
                                 用"#include virtual"虚拟CGI脚本。
                Indexes  如果一个映射到目录的URL被请求,而此目录中又没有DirectoryIndex(例如:index.html),那么服务器会
                          返回由mod_autoindex生成的一个格式化后的目录列表。
                MultiViews  允许使用mod_negotiation提供内容协商的"多重视图"(MultiViews)。
                SymLinksIfOwnerMatch  服务器仅在符号连接与其目的目录或文件的拥有者具有相同的uid时才使用它。 如果此配置出
                          现在<Location>配置段中,则将被忽略。
          一般来说,如果一个目录被多次设置了Options ,则最特殊的一个会被完全接受(其它的被忽略),而各个可选项的设定彼此并不融
          合。然而,如果所有作用于Options指令的可选项前都加有"+" 或"-"符号,此可选项将被合并。所有前面加有"+"号的可选项将强制
          覆盖当前的可选项设置,而所有前面有"-"号的可选项将强制从当前可选项设置中去除。

options: 配置在directory中,还是设置目录的权限
options indexes FollowSymLinks
indexes: 如果URL访问web服务器,有path: 192.168.233.154 -> /var/www/html, 当是没有DirectoryIndex指令指定的首页文件:,他会去有mod_autoindex生成一个目录列表,即列出来我们当前目录下有哪些文件

192.168.233.1 - - [06/Jan/2023:14:26:49 +0800] "GET /index.html HTTP/1.1" 200 26 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"

注释

%…a: 远程IP地址
%…A: 本地IP地址
%…B: 已发送的字节数,不包含HTTP头
%…b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%…{FOOBAR}e: 环境变量FOOBAR的内容
%…f: 文件名字
%…h: 远程主机
%…H 请求的协议
%…{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%…l: 远程登录名字(来自identd,如提供的话)
%…m 请求的方法
%…{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%…{Foobar}o: Foobar的内容,应答的标头行
%…p: 服务器响应请求时使用的端口
%…P: 响应请求的子进程ID。
%…q 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。)
%…r: 请求的第一行
%…s: 状态。对于进行内部重定向的请求,这是指*原来*请求 的状态。如果用%…>s,则是指后来的请求。
%…t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%…{format}t: 以指定格式format表示的时间
%…T: 为响应请求而耗费的时间,以秒计
%…u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%…U: 用户所请求的URL路径
%…v: 响应请求的服务器的ServerName
%…V: 依照UseCanonicalName设置得到的服务器名字
%…a: 远程IP地址
%…A: 本地IP地址
%…B: 已发送的字节数,不包含HTTP头
%…b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%…{FOOBAR}e: 环境变量FOOBAR的内容
%…f: 文件名字
%…h: 远程主机
%…H 请求的协议
%…{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%…l: 远程登录名字(来自identd,如提供的话)
%…m 请求的方法
%…{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%…{Foobar}o: Foobar的内容,应答的标头行
%…p: 服务器响应请求时使用的端口
%…P: 响应请求的子进程ID。
%…q 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。)
%…r: 请求的第一行
%…s: 状态。对于进行内部重定向的请求,这是指*原来*请求 的状态。如果用%…>s,则是指后来的请求。
%…t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%…{format}t: 以指定格式format表示的时间
%…T: 为响应请求而耗费的时间,以秒计
%…u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%…U: 用户所请求的URL路径
%…v: 响应请求的服务器的ServerName
%…V: 依照UseCanonicalName设置得到的服务器名字

配置文件注释

<LocationMatch "^/+$">
    Options -Indexes
    ErrorDocument 403 /.noindex.html
</LocationMatch>

<Directory /usr/share/httpd/noindex>
    AllowOverride None
    Require all granted
</Directory>

Alias /.noindex.html /usr/share/httpd/noindex/index.html
Alias /poweredby.png /usr/share/httpd/icons/apache_pb3.png

注释

LocationMatch: 路径匹配: ^/+$
^: 代表以....开始
$: 代表以....结束

/: /字符串
+: 代表的是/重复1次或任意多次

192.168.233.154 -》 /hello.html  
192.168.233.154/
192.168.233.154//
192.168.233.154///

 同一个IP基于不同端口来访问两个网站的配置思路

1.同一个IP基于不同端口来访问两个网站:192.168.233.155:80, 8080
  TCP -> IP+PORT -> 形成一条连接
              IP+PORT1 -> 一个连接 (虚拟主机) -》 192.168.233.155:80
              IP+PORT2 -> 一个连接   (虚拟主机)     192.168.233.155:8080
             浏览器 -》 ip+port 访问服务器 -》 监听port端口号 : Listen 80
2. 192.168.233.126:80, 8080 -> 虚拟主机的目录
    192.168.233.127:8080 -> /var/www/html/index.html
     Listen 8080 -> 针对所有的IP的8080端口
     192.168.233.126:8080, 80 -》 对应的虚拟主机的目录
     192.168.233.127:8080 ->  /var/www/html

HTTPS的安全通信机制:

详解Web服务器与http https协议工作过程

工作流程可大致分为三个阶段:

认证服务器:浏览器内置一个受信任的CA机构列表,并保存了这些CA机构的证书。第一阶段服务器会提供经CA机构认证颁发的服务器证书,如果认证该服务器证书的CA机构,存在于浏览器的受信任CA机构列表中,并且服务器证书中的信息与当前正在访问的网站(域名等)一致,那么浏览器就认为服务端是可信的,并从服务器证书中取得服务器公钥,用于后续流程。否则,浏览器将提示用户,根据用户的选择,决定是否继续。当然,我们可以管理这个受信任CA机构列表,添加我们想要信任的CA机构,或者移除我们不信任的CA机构。

协商会话密钥:客户端在认证完服务器,获得服务器的公钥之后,利用该公钥与服务器进行加密通信,协商出两个会话密钥,分别是用于加密客户端往服务端发送数据的客户端会话密钥,用于加密服务端往客户端发送数据的服务端会话密钥。在已有服务器公钥,可以加密通讯的前提下,还要协商两个对称密钥的原因,是因为非对称加密相对复杂度更高,在数据传输过程中,使用对称加密,可以节省计算资源。另外,会话密钥是随机生成,每次协商都会有不一样的结果,所以安全性也比较高。

加密通讯:此时客户端服务器双方都有了本次通讯的会话密钥,之后传输的所有Http数据,都通过会话密钥加密。这样网路上的其它用户,将很难窃取和篡改客户端和服务端之间传输的数据,从而保证了数据的私密性和完整性。

PKI(Public Key Infrastructure)公钥基础设施是提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。一个机构通过采用PKI 框架管理密钥和证书可以建立一个安全的网络环境。PKI 主要包括四个部分:X.509 格式的证书(X.509 V3)和证书废止列表CRL(X.509 V2);CA 操作协议;CA 管理协议;CA 政策制定。

X.509通用的证书格式包含三个文件:key,csr,crt。

key是私钥文件。

csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名。

crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息

mod_ssl是一种以openssl 的工具箱为基础专门为apache webserver 提供密码保护的软件。

练习

作业: 1. 基于同一IP的不同端口访问不同的网站(可以通过域名去访问) ip+port1 -> 对应一个域名 ip+port2 -> 对应一个域名 使用域名1我应该访问到 ip+port1对应的内容 使用域名2我应该访问到 ip+port2对应的内容

1.新建目录port 9090与9091

mkdir /www/port/9090
mkdir /www/port/9091

2.编辑虚拟主机配置文件目录

vim /etc/httpd/conf.d/host.conf 

3.配置虚拟主机配置文件

<Directory "/www/port">    //#目录为根,<>为起始标志,</>为结束标志
AllowOverride None   //  #不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不用查看这个目录下的访问控制文件。
Require all granted  // #允许访问根
</Directory>  //是一组标签,目录控制容器
Listen 192.168.5.131:9090  
Listen 192.168.5.131:9091

<VirtualHost 192.168.5.131:9090>
DocumentRoot "/www/port/9090"
ServerName www.230106.com
</VirtualHost>
<VirtualHost 192.168.5.131:9091>
ServerName www.230107.com
DocumentRoot "/www/port/9091"
</VirtualHost>

4.重启httpd服务

systemctl restart httpd

 5.测试

 代码测试

详解Web服务器与http https协议工作过程

浏览器测试

 详解Web服务器与http https协议工作过程

 详解Web服务器与http https协议工作过程

 实验完成

2. 你知道的hash算法有哪些 对称加密算法有哪些 非对称加密的算法有哪些

MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMAC-SHA1。