http 协议深入介绍(二)

简介: http 协议深入介绍(二)

http 协议深入介绍(一):https://developer.aliyun.com/article/1525318

九  httpd  安装

http 服务基于 C/S 结构  (客户端和服务端)

(一)常见http 服务器程序

  • httpd apache,存在C10K(10K connections)问题
  • nginx 解决C10K问题lighttpd
  • IIS .asp 应用程序服务器
  • tomcat .jsp 应用程序服务器
  • jetty 开源的servlet容器,基于Java的web容器
  • Resin CAUCHO公司,支持servlets和jsp的引擎
  • webshpere:IBM公司
  • weblogic:BEA,Oracle
  • jboss:RedHat,IBM
  • oc4j:Oracle

(二)apache 功能

  • 提供http协议服务
  • 多个虚拟主机:IP、Port、FQDN
  • CGI:Common Gateway Interface,通用网关接口,支持动态程序
  • 反向代理
  • 负载均衡
  • 路径别名
  • 丰富的用户认证机制:basic,digest
  • 支持第三方模块

(三)apache 特性

  • 高度模块化:core + modules
  • DSO:Dynamic Shared Object 动态加载/卸载
  • MPM:multi-processing module 多路处理模块

(四)MPM multi-processing module 工作模式

1,prefork

多进程I/O模型,每个进程响应一个请求,CentOS 7 httpd默认模型一个主进程:生成和回收n个子进程,创建套接字,不响应请求多个子进程:工作 work进程,每个子进程处理一个请求;系统初始时,预先生成多个空闲进程,等待请求

Prefork MPM预派生模式,有一个主控制进程,然后生成多个子进程,每个子进程有一个独立的线程响应用户请求,相对比较占用内存,但是比较稳定,可以设置最大和最小进程数,是最古老的一种模式,也是最稳定的模式,适用于访问量不是很大的场景

优点:稳定

缺点:慢,占用资源,不适用于高并发场景

2,worker

复用的多进程I/O模型,多进程多线程,IIS使用此模型

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n

worker MPM是一种多进程和多线程混合的模型,有一个控制进程,启动多个子进程,每个子进程里面包含固定的线程,使用线程程来处理请求,当线程不够使用的时候会再启动一个新的子进程,然后在进程里面再启动线程处理请求,由于其使用了线程处理请求,因此可以承受更高的并发。

优点:相比prefork 占用的内存较少,可以同时处理更多的请求

缺点:使用keep-alive的长连接方式,某个线程会一直被占据,即使没有传输数据,也需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)

生产环境不用, 线程处理完 空着 资源浪费

3,event

事件驱动模型(worker模型的变种),CentOS8 默认模型

一个主进程:生成m个子进程,每个子进程负责生个n个线程,每个线程响应一个请求,并发响应请求:m*n,有专门的监控线程来管理这些keep-alive类型的线程,当有真实请求时,将请求传递给服务线程,执行完毕后,又允许释放。这样增强了高并发场景下的请求处理能力

优点:单线程响应多请求,占据更少的内存,高并发下表现更优秀,会有一个专门的线程来管理keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放  生产环境用的最多

缺点:没有线程安全控制

4,更改 httpd  模式为  event

找到更改模式的   配置文件

(五)安装httpd

1, yum 安装

yum install httpd  -y

2, 编译安装

(六)httpd  相关配置文件

1,主要配置文件

  • /etc/httpd/conf/httpd.conf 主配置文件
  • /etc/httpd/conf.d/*.conf 子配置文件
  • /etc/httpd/conf.d/conf.modules.d/ 模块加载的配置文件

2,服务单元文件

  • /usr/lib/systemd/system/httpd.service
  • 配置文件:/etc/sysconfig/httpd

3,服务控制和启动

  • systemctl enable|disable httpd.service
  • systemctl {start|stop|restart|status|reload} httpd.service
  • apachectl start|stop|restart|configtest
  • service httpd start|stop|restart|configtest

4,站点网页文档根目录

/var/www/html

5,模块文件路径

  • /etc/httpd/modules
  • /usr/lib64/httpd/modules

6,主服务器程序文件

/usr/sbin/httpd

(七)httpd 命令

1,     -v显示版本

2,      -t检查语法

有一个小报错,去到主配置文件,将95行取消注释

(八)httpd  包含其他配置文件

说明:

  • Include和IncludeOptional功能相同,都可以包括其它配置文件
  • 但是当无匹配文件时,include会报错,IncludeOptional会忽略错误

1,include 子配置文件

2, 总目录

(九) 主页面的位置

1,为什么站点网页文档根目录/var/www/html

因为配置文件写了

2,为什么 默认去index.html这里找

因为配置文件写了

(十)监听地址

1,格式

写到配置文件中

Listen [IP:]PORT

说明:

(1) 省略IP表示为本机所有IP

(2) Listen指令至少一个,可重复出现多次

2,示例

注释掉  主配置文件  监听80这一行

手搓一个子配置文件  

检查语法并重启

客户机去连  9527端口

(十一) 隐藏服务器版本信息

1,格式

语法:

ServerTokens Major|Minor|Min[imal]|Prod[uctOnly]|OS|Full

相关指令:

ServerTokens Prod[uctOnly] :Server: Apache

ServerTokens Major: Server: Apache/2

ServerTokens Minor: Server: Apache/2.0

ServerTokens Min[imal]: Server: Apache/2.0.41

ServerTokens OS: Server: Apache/2.0.41 (Unix)

ServerTokens Full (or not specified): Server: Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2 此为默认值

2,具体示例

当客户机访问服务机,能看到服务机的版本信息

服务机可以做下列配置    写到主配置文件中

检查语法   并重启

客户机看不到   服务机的版本信息了

(十二) 持久连接

1, 如果没有持久连接

100张图片   会经历700次

2,持久连接理解

持久连接解决三次握手问题

只建立一次三次握手,请求后,就不断开了

就是:

无持久连接:一次三握手 下载一个资源

有超时连接:一次三次握手 下载多个资源

3,持久连接结束方式

1,超时时间

2,下载的资源个数

4,持久连接相关指令

KeepAlive On|Off

#  On  表示开启持久连接

KeepAliveTimeout 15    

 #连接持续15s,可以以ms为单位,默认值为5s

MaxKeepAliveRequests 500  

#持久连接最大接收的请求数,默认值100,

5, 持久连接实例

服务机写到子配置文件

服务机  检查语法  并重启

客户机手搓http 请求报文

可以发现 下了两次资源断开

(十三)查看模块

1,查看静态编译的模块

2, 正在运行的模块有哪些

(十四)MPM (Multi-Processing Module)多路处理模块

httpd 支持三种MPM工作模式:prefork, worker, event      修改

1,修改event 模式

2,prefork模式相关的配置

3, worker和event 模式相关的配置

4,   示例更改预留进程

找到mpm 多路处理模块  

添加以下配置

检查并重新启动

可以看到预留进程变为10个

(十五)更改默认主页面

默认主页面为      /var/www/html

因为主配置文件:

除了指定httpd  的根          还要授权

(十六) 别名 更改默认主页面

alias  替换

(十七)没有index.html 也能访问服务器

想要支持软连接:

(十八)  虚拟主机

1,三种方式

基于ip

基于端口

基于域名

2, 原理

写到子配置文件

3,基于ip地址

[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf 
<VirtualHost 192.168.91.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.91.188: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.91.101:80
Listen 192.168.91.188:80

4,基于端口地址

[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf 
 
<VirtualHost 192.168.91.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.91.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.91.101:80
Listen 192.168.91.188:80

5, 基于域名

[root@node2 conf.d]#vim /etc/httpd/conf.d/test.conf 
<VirtualHost 192.168.91.101:80>
    ServerAdmin support@jfedu.net
    DocumentRoot "/var/www/html/kgc"
    ServerName www.kgc.com
    ErrorLog "logs/www.kgc.com_error_log"
    CustomLog "logs/www.kgc.com_access_log" common
</VirtualHost>
 
 
 
<VirtualHost 192.168.91.101: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>
 
 
mkdir -p /var/www/html/kgc
mkdir -p /var/www/html/accp
echo "<h1>www.kgc.com</h1>" /var/www/html/kgc/index.html
echo "<h1>www.accp.com</h1>" /var/www/html/accp/index.html
 
 
 
去添加host文件

(十九)  黑名单  白名单

7-2 可以访问

真机禁止

相关文章
|
9月前
|
数据采集 数据可视化 API
QUIC协议优化:HTTP/3环境下的超高速异步抓取方案
本文介绍了一种基于QUIC和HTTP/3的异步爬虫方案,用于抓取知乎热榜数据并生成趋势图。通过HTTPX与aioquic结合实现高性能连接复用,配合代理IP绕过反爬限制,提取标题、热度等信息。利用Python代码示例展示了异步抓取流程,并借助Matplotlib绘制话题热度变化图表。分析显示突发热点生命周期短,而深度话题热度更稳定。此方案可优化内容运营策略,快速捕捉潜在爆款话题。
405 4
QUIC协议优化:HTTP/3环境下的超高速异步抓取方案
|
4月前
|
缓存 负载均衡 网络协议
HTTP 与 SOCKS5 代理协议:企业级选型指南与工程化实践
面向企业网络与数据团队的代理协议选型与治理指南,基于流量特征选择HTTP或SOCKS5协议,通过多协议网关统一出站,结合托管网络降低复杂度,实现稳定吞吐、可预测时延与合规落地。
|
7月前
|
缓存 监控 搜索推荐
301重定向实现原理全面解析:从HTTP协议到SEO最佳实践
301重定向是HTTP协议中的永久重定向状态码,用于告知客户端请求的资源已永久移至新URL。它在SEO中具有重要作用,能传递页面权重、更新索引并提升用户体验。本文详解其工作原理、服务器配置方法(如Apache、Nginx)、对搜索引擎的影响及最佳实践,帮助实现网站平稳迁移与优化。
762 68
|
6月前
HTTP协议中请求方式GET 与 POST 什么区别 ?
GET和POST的主要区别在于参数传递方式、安全性和应用场景。GET通过URL传递参数,长度受限且安全性较低,适合获取数据;而POST通过请求体传递参数,安全性更高,适合提交数据。
634 2
|
6月前
|
应用服务中间件
HTTP协议中常见的状态码
HTTP协议状态码分为1xx、2xx、3xx、4xx、5xx五类,常见状态码包括:101(请求已接受)、200(请求成功)、302(重定向)、400(请求错误)、401(未认证)、403(无权限)、404(资源不存在),以及500(服务器错误)、502(网关错误)、503(服务不可用)、504(网关超时)等。
267 0
|
6月前
|
网络协议 安全 网络安全
什么是HTTP协议
HTTP协议是超文本传输协议,基于TCP,规定了客户端与服务器端通信规则,但数据以明文传输,安全性低。HTTPS则通过SSL加密保障数据安全。两者默认端口不同,HTTP为80,HTTPS为443。HTTPS安全性更高,但消耗更多服务器资源。
232 0
|
6月前
|
数据采集 Web App开发 JSON
Python爬虫基本原理与HTTP协议详解:从入门到实践
本文介绍了Python爬虫的核心知识,涵盖HTTP协议基础、请求与响应流程、常用库(如requests、BeautifulSoup)、反爬应对策略及实战案例(如爬取豆瓣电影Top250),帮助读者系统掌握数据采集技能。
572 0
|
7月前
|
存储 网络协议 安全
HTTP 协议及会话跟踪机制详解
本文详解了 HTTP 协议的核心知识,包括其定义(超文本传输协议,基于 TCP,规定客户端与服务器通信规则)及与 HTTPS 的区别(安全性、端口、资源消耗)。 介绍了 GET 与 POST 请求的差异(参数限制、安全性、应用场景),以及 Restful 风格(通过 URL 定位资源,请求方式决定操作)。列举了常见 HTTP 状态码(如 200 成功、404 资源未找到),对比了转发与重定向的区别(服务器端一次请求 vs 客户端两次请求)。 还阐述了会话跟踪机制:Cookie 基于客户端存储,通过Set-Cookie和Cookie头实现,安全性较低;Session 基于服务端存储,依赖 C
652 1
|
6月前
|
缓存 网络协议 UED
深度解析HTTP协议从版本0.9至3.0的演进和特性。
总的来说,HTTP的演进是互联网技术不断发展和需求日益增长的结果。每一次重要更新都旨在优化性能,增进用户体验,适应新的应用场景,而且保证了向后兼容,让互联网的基础架构得以稳定发展。随着网络技术继续进步,我们可以预期HTTP协议在未来还会继续演化。
793 0