简述HTTP协议的工作原理_HTTP请求结构有哪几部分组成「建议收藏」

简述HTTP协议的工作原理_HTTP请求结构有哪几部分组成「建议收藏」HTTP原理部分一、web服务器1、WEB服务器:指的是网站服务器,是在因特网上的某种计算机程序,可以向浏览器等web客户端提供文档,让全世界浏览和下载2、目前主流的服务器是:Apache、Microsoft、Inter

HTTP原理部分

一、web服务器
1、WEB服务器:指的是网站服务器,是在因特网上的某种计算机程序,可以向浏览器等web客户端提供文档,让全世界浏览和下载
2、目前主流的服务器是:Apache、Microsoft、Internet信息服务器,Unix NGINX
3、特点:

  • WEB服务器也称为WWW服务器(world wide web),主要功能是提供网上信息浏览服务。WEB服务器是可以向发出请求的浏览器提供文档的程序。
  • 服务器是一种被动程序:只有当Internet上运行其他计算机中的浏览器发出的请求时,服务器才会响应。
  • Internet上的服务器也称为WEB服务器,是一台在Internet上具有独立的IP地址的计算机,可以向Internet上的客户机提供WWW、Email和FTP等各种Internet服务。
  • 当WEB浏览器(客户端)连接到服务器上并请求文件时,服务器将处理该请求并将文件反馈到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)。服务器使用HTTP与客户机浏览器进行信息交流,这就是人们常把他们称为HTTP服务器的原因。
  • WEB服务器不仅能够存储信息,还能在用户通过WEB浏览器提供的信息的基础上运行脚本和程序。
  • 而Linux下的WEB服务器软件使用的是apache,开放源代码的apache服务器起初由Illinois大学Urbana-Champaign的国家高级计算程序中心开发,后来Apache被开放源代码团体的成员不断地发展和加强。逐渐,它开始在功能和速度上超越其他Web服务器。

二、HTTP(Hyper Text Transfer Protocal):超文本传输协议,是互联网上最广泛的一种网络协议,所用的WWW文件东必须遵守这个标准。
1、访问格式
http://域名/资源
http://IP地址:端口号
2、HTTP是应用层协议
3、HTTP协议的端口号是80、8080
4、URL:统一资源标识符
5、HTTP链接过程:
(1)客户端在web浏览器地址栏输入访问的地址http://www.baidu.com
(2)web浏览器请求DNS服务器域名www.baidu.com解析成web服务器地址
(3)web浏览器将端口号从访问地址url解析出来
(4)web浏览器通过解析后的IP地址及端口号与web服务器之间建立一条TCP连接
(5)建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文
(6)web服务器响应并读取浏览器请求的信息,然后返回一条http响应报文
(7)web服务器关闭HTTP连接,关闭TCP连接,web浏览器将内容显示在屏幕

请求的方法
在这里插入图片描述
响应是通过返回状态码来完成的
–200 正常,请求成功
–401 禁止访问,未授权(没有登录或者登陆失败)
–403 禁止访问,通常代表已认证通过,但没有访问权限
–404 未找到资源
–500 服务器内部错误(服务器内部出现问题,服务器内部故障,或者访问过多没有显
示就可能会出现500错误)
6、服务器提供网站的类型
静态网页:客户端只能服务服务器的内容,可以进行一些查看浏览等操作,和后台数据没有交互
动态网页:客户端可以和服务器的数据进行一些交互信息

HTTP搭建部分

1、安装HTTPD

[root@localhost ~]# yum install httpd -y

2、查看ect/httpd的子目录

[root@localhost ~]# tree /etc/httpd/
/etc/httpd/
├── conf#httpd的主要配置文件的目录
│   ├── httpd.conf#主配置文件
│   └── magic
├── conf.d#httpd的子配置文件目录
│   ├── autoindex.conf
│   ├── README
│   ├── userdir.conf
│   └── welcome.conf
├── conf.modules.d#模块化的配置文件
│   ├── 00-base.conf
│   ├── 00-dav.conf
│   ├── 00-lua.conf
│   ├── 00-mpm.conf
│   ├── 00-proxy.conf
│   ├── 00-systemd.conf
│   └── 01-cgi.conf
├── logs -> ../../var/log/httpd#httpd的日志文件目录
├── modules -> ../../usr/lib64/httpd/modules
└── run -> /run/httpd

配置注意事项:
(1)/etc/httpd/conf/httpd.conf主要配置文件
(2)/etc/httpd/conf/*.conf额外配置的参数文件,如果不想修改原始的/etc/httpd/conf/httpd.conf文件,那么就将/etc/httpd/conf/httpd.conf文件独立复制出来,在启动Apache时,这个文件会被读入主配置文件当中
(3)/var/www/html/这是默认的首页所在目录,当输入网址时所显示的数据,就是放在这个目录当中的首页文件默认为index.html

3、主配置文件的介绍

 31 ServerRoot "/etc/httpd" #服务器配置文件的根
 42 Listen 80 #默认监听80端口
 56 Include conf.modules.d/*.conf #读取主配置文件时,会加载conf.modules.d/下的所有.conf配置文件
 66 User apache #安装HTTPD后就会默认在root用户下创建一个APACHE用户,执行是由root执行的,但是进程是由APACHE用户来完成的
 67 Group apache #用户的所属组是Apache组
 86 ServerAdmin root@localhost #服务器的管理,出现问题将邮件发送给管理用户
 95 #ServerName www.example.com:80 建议修改为ServerName 0.0.0.0:80,若是不修改也不会影响服务的正常启动

# <Directory /></Directory>这类似HTML语言,这是一个容器,这里是对根的权限进行定义的
102 <Directory />
103     AllowOverride none #当访问根的时候,是否允许根目录下访问控制文件更改这里设置,这里是不允许
104     Require all denied #不允许访问web服务器的用户来访问根目录
105 </Directory>
119 DocumentRoot "/var/www/html" #访问网站首页目录
#<Directory "/var/www"></Directory>这个容器是对/var/www的目录权限进行定义的
124 <Directory "/var/www">
125     AllowOverride None #不允许别人的控制文件的权限来更改这里的权限
126     # Allow open access:
127     Require all granted #允许别人来访问这里的设置
128 </Directory>
#<Directory "/var/www/html"></Directory>这个容器是对/var/www/html的目录权限进行定义的
131 <Directory "/var/www/html">
144     Options Indexes FollowSymLinks #是否可以通过软连接的方式来访问真正的目录
151     AllowOverride None #不允许别人的控制文件更改这里的权限
156     Require all granted #允许别人来访问该目录
157 </Directory>
#定义访问/var/www/html/index.html
163 <IfModule dir_module>
164     DirectoryIndex index.html #定义默认目录下访问的文件是index.html文件,可以进行更改
165 </IfModule>
#AllowOverride None定义是否允许访问.ht*这些文件
171 <Files ".ht*">
172     Require all denied #默认不允许访问
173 </Files>
#错误日志
182 ErrorLog "logs/error_log" #错误日志的存放相对路径
189 LogLevel warn #日志等级,等级分为debug, info, notice, warn, error, crit,alert, emerg.
191 <IfModule log_config_module> #日志的配置模块
196     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combine    d
197     LogFormat "%h %l %u %t \"%r\" %>s %b" common
198 
199     <IfModule logio_module>
201       LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O"     combinedio
202     </IfModule>
217     CustomLog "logs/access_log" combined #谁来访问过我
218 </IfModule>
#别名的模块
220 <IfModule alias_module>
247     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/" #脚本的别名
249 </IfModule>
#对访问别名模块的目录权限设定
255 <Directory "/var/www/cgi-bin">
256     AllowOverride None
257     Options None
258     Require all granted
259 </Directory>
#多用途邮件扩展
261 <IfModule mime_module>
266     TypesConfig /etc/mime.types #文件类型
283     AddType application/x-compress .Z
284     AddType application/x-gzip .gz .tgz
305     AddType text/html .shtml
306     AddOutputFilter INCLUDES .shtml
307 </IfModule>
316 AddDefaultCharset UTF-8 #设置默认字符集
318 <IfModule mime_magic_module>
324     MIMEMagicFile conf/magic
325 </IfModule>
348 EnableSendfile on
353 IncludeOptional conf.d/*.conf #将conf.d/下的所有*.conf文件加载到主配置文件(/etc/httpd/conf/)下运行

4、服务一些启动配置

[root@localhost conf]# systemctl start httpd #启动HTTPD服务
[root@localhost conf]# systemctl restart httpd #重新启动HTTPD服务
[root@localhost conf]# systemctl enable httpd #开机自启
[root@localhost conf]# systemctl disable httpd #关闭开机自启
[root@localhost conf]# systemctl stop httpd #停止服务
[root@localhost conf]# systemctl status httpd #查看服务的状态
[root@localhost conf]# systemctl reload httpd #重新加载

5、HTTP的搭建

基于主机的搭建

(1)配置两台主机的IP地址,分别是192.168.X.10和192.168.X.20

[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.79.10/24
[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.79.20/24
[root@localhost ~]# nmcli connection up eno16777736 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@localhost ~]#

(2)在/var/www目录下创建目录10和20分别存放网页的内容,并且添加网页内容

[root@localhost www]# mkdir 10
[root@localhost www]# mkdir 20
[root@localhost conf.d]# cd /var/www/10
[root@localhost 10]# ll
total 748
drwxr-xr-x. 2 root root     24 Aug 25 00:55 css
-rw-r--r--. 1 root root  33992 Aug 25 00:55 digital-7_mono.ttf
-rw-r--r--. 1 root root   7540 Aug 25 00:55 index.html
drwxr-xr-x. 2 root root     57 Aug 25 00:55 js
-rw-r--r--. 1 root root 718076 Aug 25 00:55 Ч??ͼ.jpg
[root@localhost 10]# cd /var/www/20
[root@localhost 20]# ll
total 240
-rw-r--r--. 1 root root  17787 Aug 25 00:55 index.html
-rw-r--r--. 1 root root 221890 Aug 25 00:55 Ч??ͼ.jpg
[root@localhost 20]# 



(3)在/etc/httpd/conf.d目录下创建一个*.conf文件,并且进行编辑内容,,参考的配置文件目录在/usr/share/doc/httpd-2.4.6/httpd-vhosts.conf

<VirtualHost 192.168.79.10:80>
    ServerAdmin 192.168.79.10 #报错后,将错误信息发往管理员的地址
    DocumentRoot "/var/www/10" #访问网易的html代码目录
    ServerName 192.168.79.10 #该网站服务器的地址
    ServerAlias www.10.com
    ErrorLog "/var/log/httpd/10-error_log"
    CustomLog "/var/log/10/10-access_log" common
</VirtualHost>
<directory /var/www> #定义访问HTML代码目录的权限,由于www下包含目录10和目录20之所以就之间定义/var/www
        allowoverride none
        require all granted
</directory>

<VirtualHost 192.168.79.20:80>
    ServerAdmin 192.168.79.20
    DocumentRoot "/var/www/20"
    ServerName 192.168.79.20
    ServerAlias www.20.com
    ErrorLog "/var/log/httpd/20-error_log"
    CustomLog "/var/log/httpd/20-access_log" common
</VirtualHost>

(4)启动服务

[root@localhost log]# systemctl restart httpd

(5)查看服务状态

[root@localhost log]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-08-25 01:03:13 EDT; 11s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 62685 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
 Main PID: 62723 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─62723 /usr/sbin/httpd -DFOREGROUND
           ├─62724 /usr/sbin/httpd -DFOREGROUND
           ├─62725 /usr/sbin/httpd -DFOREGROUND
           ├─62726 /usr/sbin/httpd -DFOREGROUND
           ├─62727 /usr/sbin/httpd -DFOREGROUND
           └─62728 /usr/sbin/httpd -DFOREGROUND

Aug 25 01:03:13 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Aug 25 01:03:13 localhost.localdomain systemd[1]: Started The Apache HTTP Server.

(6)关闭seLinux

[root@localhost conf.d]# setenforce 0

(7)浏览器中测试
在这里插入图片描述
在这里插入图片描述

基于端口的搭建

端口分别是80端口和1000端口,目录分别是/var/port/80和/var/port/10000
(1)创建目录,写入html网页

[root@localhost ~]# mkdir /var/port/{80,10000} -pv
mkdir: created directory ‘/var/port’
mkdir: created directory ‘/var/port/80’
mkdir: created directory ‘/var/port/10000’
[root@localhost ~]#
[root@localhost 80]# ll
total 92
-rw-r--r--. 1 root root 21547 Aug 25 01:40 index.html
-rw-r--r--. 1 root root 67215 Aug 25 01:40 www.iqshw.com.jpg
[root@localhost 10000]# ll
total 236
-rw-r--r--. 1 root root   6180 Aug 25 01:40 index.html
-rw-r--r--. 1 root root 232330 Aug 25 01:40 Ч??ͼ.jpg
[root@localhost 10000]# 

(2)编辑host.conf文件

<VirtualHost 192.168.79.100:80>
    ServerAdmin 192.168.79.100
    DocumentRoot "/var/port/80"
    ServerName 192.168.79.100
    ServerAlias www.port80.com
    ErrorLog "/var/log/httpd/port80-error_log"
    CustomLog "/var/log/httpd/port80-access_log" common
</VirtualHost>
<directory /var/port>
        allowoverride none
        require all granted
</directory>
listen 10000
<VirtualHost 192.168.79.100:10000>
    ServerAdmin 192.168.79.100
    DocumentRoot "/var/port/10000"
    ServerName 192.168.79.100
    ServerAlias www.port10000.com
    ErrorLog "/var/log/httpd/port10000-error_log"
    CustomLog "/var/log/httpd/port10000-access_log" common
</VirtualHost>
                

(3)重启HTTPD服务

[root@localhost conf.d]# systemctl restart httpd

(4)测试
在这里插入图片描述
在这里插入图片描述

基于域名的搭建

1、浏览器基于域名的访问流程:
(1)首先浏览器会缓存DNS记录
(2)接下来,若是在浏览器的缓存中没有找到域名对应的IP地址,那么就会去找操作系统中的hosts文件。
hosts文件:是一个没有扩展名的系统文件,作用就是将一些常用的网址域名与其对应的IP地址建立一个关联数据库
(3)若是在操作系统中没有找到,则系统再将此网址提交给DNS域名服务器进行IP地址解析
2、Windows下的hosts文件路径:C:\Windows\System32\drivers\etc
3、Linux下的hosts文件路径:/etc/hosts
4、基于域名搭建步骤
域名分别是www.jll.com和www.jialeilei.com
(1)创建html的根目录

[root@localhost ~]# mkdir /var/name

(2)配置host.conf文件

<directory /var/name>
        allowoverride none
        require all granted
</directory>


<VirtualHost 192.168.79.100:80>
    ServerAdmin 192.168.79.100
    DocumentRoot "/var/name"
    ServerName www.jll.com
    ServerAlias www.jialeilei.com
    ErrorLog "/var/log/httpd/name-error_log"
    CustomLog "/var/log/httpd/name-access_log" common
</VirtualHost>


(3)重启服务

[root@localhost conf.d]# systemctl restart httpd
[root@localhost conf.d]# 

(5)修改操作系统配置文件

#	127.0.0.1       localhost
#	::1             localhost
	192.168.79.100	www.jll.com	www.jialeilei.com

(6)测试
在这里插入图片描述
在这里插入图片描述

HTTPS

SSL原理介绍

1、HTTPS超文本传输安全协议,是以安全为目标的HTTP通道,HTTPS不是一个新协议,而是HTTP和SSL,在之前的传输层和应用层切入一层SSL。
2、SSL是“Secure Sockets Layer”的缩写,叫做“安全套接字”,1999年广泛应用,最后被IETF给标准化,标准化后SSL被改为TLS传输安全协议。
在这里插入图片描述
3、SSL协议分为两层
(1)SSL记录协议:它建立在可靠的传输协议之上,为高层协议提供数据封装、压缩、加密等基本功能。
(2)SSL握手协议:它建立在SSL记录协议之上,用于实际数据的传输,开始前,通讯双方进行身份认证、协商加密算法、交换加密秘钥等
4、SSL协议提供的服务
(1)认证用户和服务器,确保发送正确的客户端和服务器
(2)加密数据防止中途被人窃取
(3)维护数据的完整性,防止中途被人篡改
5、HTTPS传输的信息交互过程
(1)客户端给服务器发送的信息如下:

  • 客户端支持的SSL/TLS协议的版本号进行协商
  • Cipher Suite(秘钥算法套件)
  • 客户端生成随机数,稍后用于生成会话秘钥

(2)服务器给客户端发送的信息如下:

  • 确认使用的加密通信协议版本,若浏览器与服务器不一致,服务器关闭加密通信
  • 确认使用的加密方法
  • 服务器证书

6、SSL建立过程
三次握手
协商算法
服务器发送证书给客户端
客户端生成对称密钥
客户端发送http请求
服务器通过对称密钥加密后把网页送到客户端

最后服务器生成证书的内容如下:
在这里插入图片描述
服务器生成的数字签名形成的过程:整个过程使用的是非对称加密算法
在这里插入图片描述
7、pki:public key Infrastructure 公钥基础设施,是一种遵循标准的利用公钥加密技术为电子商务的开展提供了一套安全基础平台的技术规范。
提供公钥加密和数字签名服务的系统或平台,目的是为了管理密钥和证书。

证书的格式  认证中心所发放的证书均遵循X.509 V3 标准
X.509通用的证书格式包含三个文件:key,csr,crt。
key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息

HTTPS搭建

1、在搭建https之前需要安装mod_ssh包
2、mod_ssh是一种以OpenSSL的工具箱为基础专门为apache webserver提供密码保护的软件
3、搭建HTTPS过程
(1)安装提供密码保护的软件mod_ssl

[root@localhost ~]# yum install mod_ssl.x86_64 -y

(2)查看安装mod_ssl后产生的软件

[root@localhost certs]# rpm -ql mod_ssl
/etc/httpd/conf.d/ssl.conf #ssl的配置文件
/etc/httpd/conf.modules.d/00-ssl.conf
/usr/lib64/httpd/modules/mod_ssl.so #库文件
/usr/libexec/httpd-ssl-pass-dialog #库可执行的命令
/var/cache/httpd/ssl

(3)查看selinux的状态

[root@localhost certs]# getenforce 
Permissive #标识忽略HTML根目录的安全检测
[root@localhost certs]# getenforce 
Enforcing #表示进行HTML根目录的检测,若是根目录不是/var/www/html这个目录将会无法访问到html页面
#设定selinux的值
[root@localhost certs]# setenforce 0

(4)检查防火墙的状态

[root@localhost certs]# systemctl status frewalld
● frewalld.service
   Loaded: not-found (Reason: No such file or directory) #表示防火墙是关闭的
   Active: inactive (dead)

(5)创建IP地址192.168.79.200

[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.79.200
[root@localhost ~]# nmcli connection up eno16777736 


(6)编辑配置文件

SSLEngine on #开启SSL引擎
SSLProtocol all -SSLv2 #出去SSLv2版本
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA #秘钥算法套件
SSLCertificateFile /etc/pki/tls/certs/localhost.crt #定义公钥证书文件的路径
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key #私钥文件的路径


(7)在本地创建公钥和私钥

[root@localhost certs]# make https.crt

在这里插入图片描述
(8)生成的公钥和私钥路径

[root@localhost certs]# pwd
/etc/pki/tls/certs
[root@localhost certs]# ll
total 24
lrwxrwxrwx. 1 root root   49 Jun 17 20:42 ca-bundle.crt -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
lrwxrwxrwx. 1 root root   55 Jun 17 20:42 ca-bundle.trust.crt -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
-rw-------. 1 root root 1383 Aug 26 03:28 https.crt
-rw-------. 1 root root 1766 Aug 26 03:25 https.key
-rw-------. 1 root root 1468 Aug 26 02:23 localhost.crt
-rwxr-xr-x. 1 root root  610 Jun 23  2015 make-dummy-cert
-rw-r--r--. 1 root root 2388 Jun 23  2015 Makefile
-rwxr-xr-x. 1 root root  829 Jun 23  2015 renew-dummy-cert
[root@localhost certs]# 

(9)修改主配置文件里边的私钥.key的路径

# HTTPS
<directory /var/www/https>
        allowoverride none
        require all granted
</directory>

<VirtualHost 192.168.79.200:443>
    ServerAdmin 192.168.79.200
    DocumentRoot "/var/www/https"
    ErrorLog "/var/log/httpd/https-error_log"
    CustomLog "/var/log/httpd/https-access_log" common
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA
SSLCertificateFile /etc/pki/tls/certs/https.crt
SSLCertificateKeyFile /etc/pki/tls/certs/https.key
</VirtualHost>

(10)启动HTTPD服务

[root@localhost certs]# systemctl restart httpd
Enter SSL pass phrase for bogus_host_without_reverse_dns:443 (RSA) : ******
[root@localhost certs]# 

(11)测试

在这里插入图片描述

WEB服务器搭建过程

1、安装相应的软件
2、创建和配置相应的html目录和文件
3、编辑/etc/httpd/conf.d/*.conf文件
4、重启服务
5、关闭防火墙
6、测试

今天的文章简述HTTP协议的工作原理_HTTP请求结构有哪几部分组成「建议收藏」分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/64831.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注