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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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请求报文分析

 

 状态码空行最后一

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

 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表示服务器当前不能够处理客户端的请求在一段时间之后服务器可能会恢复正常;

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

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

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

 网址解析

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

协议http, https, ftp
主机或主机名www.baidu.com/www.csdn.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.csdn.net/xc_zhou/article/details/80907101;xxx?name=123&gender=1#fragment
https: 协议
blog.csdn.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: 允许用户利用AllowDeny与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的安全通信机制

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

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

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

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

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

X.509通用的证书格式包含三个文件keycsrcrt。

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.测试

 代码测试

浏览器测试

 

 

 实验完成

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

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 服务器