HTTP协议、安装组成和常见配置

一、http协议

  1.1 http相关协议

  •     互联网:所有网络的母集
  •     因特网:世界上最大的互联网网络
  •     万维网:WWW万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信息贮藏库
  •     URL:统一资源定位符
  •     HTTP:超文本传输协议
  •     HTML:超文本标记语言

  1.2 访问浏览器的过程

    浏览器是如何工作的?

    1.浏览器的职责

    2.DNS解析——2.1 为什么要进行DNS解析

                      ——2.2 系统缓存查询

                      ——2.3 路由器缓存、ISP缓存

                      ——2.4 DNS递归查询

    3.TCP连接——3.1 三次握手

                     ——3.2 四次分手

    4.HTTP请求

    5.浏览器的渲染原理——5.1 构建DOM

                                    ——5.2 构建CSS树

                                    ——5.3 构建渲染树

                                    ——5.4 合成、绘制

  1.3 http协议通信过程

    HTTP(超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP的目的是提供一种远距离共享知识的方式,借助多文档进行进行实现超文本,连成互相参阅的WWW。

    HTTP的发展是由蒂姆·伯纳斯-李(Tim Berners-Lee)于1989年在欧洲核子研究组织(CERN)所发起。HTTP的标准制定由万维网协会(W3C)和互联网工程任务组(IETF),最终发布了一些列的RFC,RFC 2616定义了HTTP协议中先进广泛使用的一个版本——HTTP 1.1版

  1.4 HTTP相关技术

  1.4.1 WEB开发语言

    http:超文本传输协议属于应用层协议,其默认端口是80/tcp

    WEB前端开发语言:

  • html
  • css
  • JavaScript

  1.4.2 MIME

    MIME:多用途互联网邮箱扩展

    文件 /etc/mime.types来自于mailcap包

    MIME格式:type/subtype  主要类型/次要类型

    范例:

text/plain

text/html

text/css

image/jpeg  jpg  jpeg

image/png

video/mp4

application/javascript

  1.4.3 URI和URL

    URI:统一资源标识分为URL和URN。

    URN:统一资源命名。简单来说就是这个资源叫什么名字。

    URL:统一资源定位符,用于描述某服务器特定资源位置。简单来说描述了自愿的具体位置。

    两者的区别:

      URN代表一个人的名称,URL代表一个人的住址。简而言之,URN定义某十五的身份,而URL提供查找该事物的方法。

     格式:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

    解释:

scheme:方案,访问服务器以获取资源时要使用哪种协议

user:用户,某些方案访问资源时需要的用户名

password:密码,用户对应的密码,中间用:分隔

host:主机,资源宿主服务器的主机名或IP地址

port:端口,资源宿主服务器正在坚挺的端口号,很多方案有默认端口号

path:路径,服务器自愿的本地名,由一个/将其与前面的URL组建分隔

params:参数,制定输入的参数,参数为名/值对,多个参数用;分隔

query:查询,传递参数给程序,如数据库,用?分隔,用多个查询用&分隔

frag:片段,一小片或一部分资源的名字,此组件在客户端使用,用#分隔

  1.4.4 网站访问量

    网站访问量统计的重要指标

  • IP(独立IP):即Internet Protocol,指独立IP数。
  • PV(访问量):即Page View,页面浏览量或点击量,PV并不是页面的访问者数量,而是网站被访问的页面数量。
  • UV(独立访客):即Unique Visitor,访问网站的一台电脑为一个访客。

    了解更多(网站统计):http://www.alexa.cn/rank/

  1.4.5 HTTP工作机制

    一次http事物包括:

  • http请求:http request
  • http响应:http response

    web资源:一个web页面通常不是单个资源,而是一组资源的集合

    资源类型:

  • 静态资源:无需服务器做出额外处理,服务器端和客户端文件内容相同

       常见文件后缀:.html,.txt,.jpg,.js,.css,.mp3,.avi

  • 动态资源:服务器执行程序,返回执行的结果,服务器端和客户端的文件而你容不相同

       常见文件后缀:.php,.jsp,asp

    HTTP连接请求

      提高HTTP连接性能

并行连接:通过多条TCP连接发起并发的HTTP请求

持久连接:keep-alive,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接

管道化连接:通过共享TCP连接,发起并发的HTTP请求

服用的连接:交替传诵请求和相应报文(实验阶段)

  1.4.6 HTTP协议版本

    HTTP常用的协议版本有0.9、1.0和1.1三种

    0.9、1.0和1.1三者的区别

  • 0.9:只有下载,没有上传
  • 1.0:没有长链接
  • 1.1:有长链接

    HTTPS协议:HTTPS就是安全版的HTTP,目前大型网站基本实现全站HTTPS

    HTTPS特点:

  1. HTTPS协议需要CA申请证书,大部分需要收费
  2. HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密
  3. HTTP和HTTPS使用的是不同的连接方式,而且端口不同,HTTP是80,HTTPS是443
  4. HTTPS可以有效的防止运营商劫持
  5. HTTPS实现过程降低用户访问速度,但经过合理优化和部署,HTTPS对速度的影响还是影响接受的

  1.4.7 HTTP请求访问的完整过程
  1. 建立连接
  2. 接收请求
  3. 处理请求
  4. 访问资源
  5. 构建响应报文
  6. 发送响应报文
  7. 记录日志

    一次完整的http请求处理过程

    1. 建立连接

      接收或拒绝连接请求

    2. 接收请求

      接收客户端请求报文中对某资源的一次请求的过程

      Web访问相应模型(Web I/O)

      这里I/O指的是INPUT/OUTPUT

      HTTP请求的报文格式:

方法method  路径URL 版本  头部

举例:get  a.jpg  http/1.1

  单进程I/O模型:启动一个进程处理用户请求,而且一次只能处理一个

  多进程I/O模型:并启动多个进程,每个进程相应一个连接请求

  复用I/O结构:启动一个进程,同时响应N个连接请求

  复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求(主流)

  多路复用I/O结构来处理客户端的请求

    3. 处理请求

      服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分请求进行处理

       常用的请求method:GETPOSTHEADPUT、DELETE、TRACE、OPTIONS

    4. 访问资源:

      服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源

    5. 构建响应报文

      web服务器除了识别资源以外就执行请求方法中描述的动作,并返回响应报文。响应报文中包含响应状态码、响应首部和响应主体,前提是生成响应主体。

    6. 发送响应报文

      web服务器通过链接数据时也会面临与接收数据一样的问题。服务器可能有很多条道各个客户端的连接,各个状态不一。服务器要记录这些状态,还要注意对持久连接的处理。在非持久连接的状态下,服务器发送完整条报文后,要关闭这一端的连接;在持久链接的状态下,可能仍然要保持着打开的状态。因此,服务器要正确的计算出Content-Length首部,不然客户端就无法知道相应什么时候结束

    7. 记录日志

      当事务结束时,web服务器会在日志文件中添加一个条目,来描述已执行的事务

  1.5 http协议及报文头部结构

    http事务:一次访问的过程

  • 请求:request
  • 响应:response

    解决http协议无状态的方法

  • cookie客户端存放
  • session客户端存放

  1.5.1 HTTP请求报文

    报文由三个部分组成:开始行、首部行和实体主体

    方法:

方法说明
GET获取资源。当前网络请求中,绝大部分使用的是GET方法
HEAD获取保温首部。主要用于确认URL的有效性以及资源更新的日期时间等
POST传输实体主体(比如传输用户名、密码等)
PUT上传文件(比如写博客)
PATCH对资源进行部分修改
DELETE删除文件
OPTIONS查询支持的方法(查看服务器可以支持那些方法)
CONNECT要求与代理服务器通信时建立隧道(类似加密)
TRACE追踪路径

    URL:指明资源的具体位置

    格式:<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

  • scheme
    •   http  超文本传输协议
    •   https 安全的http协议
    •   ftp    文件传输协议
  • user:账号
  • password:密码
  • host:主机名、域名或IP地址
  • port:服务器端口号
  • path:访问自愿的路径,相当于组件路径
  • params:参数。制定一些参数。比如制定传输方式(不常用)
  • query:查询参数
  • frag:html资源片段。比如html文档过大的时候,drag定位到html的一部分

    首部字段:使用首部字段是为了给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容,HTTP 首部字段是由首部字段名和字段值构成的,中间用冒号“:” 分隔

    首部分类:

      通用首部:请求报文和响应报文双方都会使用的首部

  • Date:报文的创建时间
  • Connection:连接状态。如keep-alive,close
  • Via:显示报文经过的中间节点(代理,网关)
  • Cache-Control:控制缓存。如缓存时长
  • MIME-Version:发送端使用的MIME版本
  • Warning:错误通知

    请求首部:从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、请求内容相关优先级等信息

  • Accept:通知服务器自己可接受的媒体类型
  • Accept-Charset:客户端可接受的字符集,如gzip
  • Accept-language:客户端可接受的语言
  • Client-IP:请求的客户端IP
  • Host:请求的服务器名称和端口号
  • Referer:跳转至dangqianURI的前一个URL
  • User-Agent:客户端代理,浏览器版本
  • Expect:允许客户端列出某请求所要求的服务器行为(条件式请求首部)
  • If-Modified-Since:自从指定的时间之后,请求的资源是否发生过修改(条件式请求首部)
  • If-Unmodified-Since:和上方相反
  • If-None-Match:本地缓存中存储的文档的Etag标签是否与服务器文档的Etag不匹配(条件式请求首部)
  • If-Match:与上方相反
  • Authorization:向服务器发送认证信息,如账号和密码(安全请求首部)
  • Cookie:客户端向服务器发送cookie
  • Proxy-Authorization:想代理服务器认证(代理请求首部)

    响应首部:从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息

  • 协商首部:某资源有多种表示方法时使用
    • Accept-Ranges:服务器可接受的请求范围类型
    • Vary:服务器查看的其他首部列表
  • 安全响应首部
    • Set-Cookie:向客户端设置cookie
    • WWW-Authenticate:来自服务器对客户端的质询列表
  • 信息性
    • Age:从最初创建开始,相应持续市场
    • Server:服务器程序软件名称和版本

    实体首部:实体首部:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的的信息

  •     缓存相关:
    • ETAG:实体的扩展标签
    • ExPIRES:实体的过期时间
    • Last-Modified:最后一次修改的时间
  • Allow:列出对此资源实体可使用的请求方法
  • Location:告诉客户端真正的尸体位于何处
  • Content-Encoding:对主体执行的编码
  • Content-Language:理解主体时最适合的语言
  • Content-Location:实体真正所处的位置
  • Content-Type:主体的对象类型,如text

    扩展首部

实体:请求时附加的数据或响应时附加的数据

    request报文格式

<method> <request-URL> <version>
<headers>
<entity-body>

     举例:

GET / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Host: www.magedu.com
User-Agent: HTTPie/0.9.4

  1.5.2 响应报文

 

     响应报文的开始行是状态行

    状态行包括三项内容,即HTTP的版本,状态码,以及解释状态码的简单短语

    response报文格式

<version> <status> <reason-phrase>
<headers>
<entity-body>

     举例:curl -v 192.168.10.3 | head

HTTP/1.1 200 OK
Cache-Control: max-age=3, must-revalidate
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Thu, 07 Nov 2019 03:44:14 GMT
Server: Tengine
Transfer-Encoding: chunked
Vary: Accept-Encoding
Vary: Accept-Encoding, Cookie

  1.5.2.1  状态码

    三个数字,标记请求处理过程中发生的情况

    http协议状态码分类

范围说明
1xx100-101信息提示
2xx200-206成功
3xx300-307重定向
4xx400-415错误类信息(客户端错误)
5xx500-505错误类信息,服务器端错误

二、httpd安装组成

  2.1 常见http服务器程序

httpd apache,存在C10K(10K connections)问题(国外主流)

nginx 解决C10K问题lighttpd(国内主流)

tomcat .jsp 应用程序服务器

  2.2 apache介绍和特点

    apache功能:

  • 提供http协议服务

  • 多个虚拟主机:IP、Port、FQDN

  • CGI:Common Gateway Interface,通用网关接口,支持动态程序

  • 反向代理

  • 负载均衡

  • 路径别名

  • 丰富的用户认证机制:basic,digest

  • 支持第三方模块

    apache特性:

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

    总结:apache功能多,稳定,善于处理静态资源。

  2.2.1 MPM工作模式

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

    优点:稳定

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

    worker:复用的多进程I/O模型,多进程多线程

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

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

    event:事件驱动模型(worker模型的变种)

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

    缺点:没有线程安全控制

    MPM的趋势:event(主流)、prefork(少用)、worker(基本不用)

  2.3 httpd安装和相关文件

  2.3.1 包安装httpd并启动httpd服务

    安装方式:

  • 包安装: centos发行版,稳定,建议使用
  • 编译:定制或特殊需求

    举例:安装httpd 2.4

yum install httpd -y

  2.3.2 httpd 2.4 相关文件

    配置文件:

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

    检查配置语法:httpd -t 或 apache2 -t

    服务单元文件:/usr/lib/systemd/system/httpd.service

    配置文件:/etc/sysconfig/httpd

    服务控制和启动

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

    站点网页文档根目录:/var/www/html

    模块文件路径:

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

    主服务器程序文件:/usr/sbin/httpd

三、httpd常见配置

  3.1 指定服务器名

  3.2 包含其他配置文件

    指令:

Include file-path|directory-path|wildcard
IncludeOptional file-path|directory-path|wildcard

    说明:

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

    include子配置文件

     总目录

  3.3 监听地址

    格式:Listen [IP:]PORT

    说明:

  1. 省略IP表示为本机所有IP
  2. Listen指令至少一个,可重复出现多次

    举例:

Listen   192.168.91.100:8080
Lsten    80


vim /etc/httpd/conf.d/test.conf
Listen 8080

  3.4  隐藏服务器版本信息

     语法: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 此为默认值

  3.5 持久链接

    Persistent Connection:连接建立,每个资源获取完成后不会断开连接,而是继续等待其它的请求完成,默认开启持久连接

    断开条件:

  • 时间限制:以秒为单位, 默认5s,httpd-2.4 支持毫秒级
  • 请求数量: 请求数达到指定值,也会断开

    副作用:对并发访问量大的服务器,持久连接会使有些请求得不到响应

    持久连接相关指令:

KeepAlive On|Off
KeepAliveTimeout 15      #连接持续15s,可以以ms为单位,默认值为5s
MaxKeepAliveRequests 500  #持久连接最大接收的请求数,默认值100

    1. 首先进入到httpd文件夹下,编辑一下文件同时创建三个新文件,重新启动发现有报错 

    2. 检查错误来源,发现9527端口未绑定 

    3. 查看一下当下剩余的端口号有哪些 

    4. 再到文件里修改一下端口号,重启后生效 

    5. 开启第二台服务器,远程连接是否成功,同时安装telnet 

     3.6 DSO

      DSO,加载动态模块配置,不需重启即生效动态模块所在路径: /usr/lib64/httpd/modules/

      主配置 /etc/httpd/conf/httpd.conf 文件中指定加载模块配置文件

ServerRoot "/etc/httpd"
Include conf.modules.d/*.conf

      配置指定实现模块加载格式: LoadModule <mod_name> <mod_path>

      模块文件路径可使用相对路径:相对于ServerRoot(默认/etc/httpd)

    查看静态编译的模块:httpd -l

    查看静态编译及动态装载的模块:httpd -M

  3.7 虚拟主机

    httpd 支持在一台物理主机上实现多个网站,即多虚拟主机

    网站的唯一标识:

  • IP相同,但端口不同
  • IP不同,但端口均为默认端口
  • FQDN不同, IP和端口都相同

    多虚拟主机有三种实现方案:

  • 基于ip:为每个虚拟主机准备至少一个ip地址
  • 基于port:为每个虚拟主机使用至少一个独立的port
  • 基于FQDN:为每个虚拟主机使用至少一个FQDN,请求报文中首部 Host:www.kgc.com

  3.7.1 基于IP地址

    实际操作

    1. 方法一:输入命令添加一块网卡,可以用ifconfig查看 

    1.1  方法二:在VM设置里手动添加一块网卡

     2. 配置test相关配置项,重新启动httpd服务。

    3. 配置项里的内容需要和您的网卡地址是一致的,请注意不要敲错 

    4. 进入html文件夹下,将文件输出到指定目录后,重新启动一下服务即可 

   5.  在第二台机器内,远程请求web服务器

  3.7.2 基于端口地址

    1. 配置配置项注意加上端口号,端口号不确定可以使用命令semanage -l port | grep http进行查看

     2. 编辑完后,重新启动httpd服务即可

  3.7.3 基于域名

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
规划子网和配置IP地址是在网络中进行必要的操作,以确保网络中的各个设备能够正确通信。下面将介绍一些综合技巧练习。 首先,在规划子网时需要考虑到网络的规模和需求。根据需要连接的设备数量,可以确定所需的子网数量,并根据设备之间的通信需求和网络拓扑结构来划分子网。一般来说,每个子网包括一个网络号和一个广播地址。 其次,配置IP地址需要遵循一定的规则。IPv4地址由32位二进制数字组成,表示为十进制数,通常分为网络地址和主机地址。网络地址用于标识子网,主机地址用于标识网络中的具体设备。 配置IP地址时,首先需要选择一个合适的网络号,并且确保该网络号在整个网络中是唯一的。然后,可以为网络中的每个设备分配一个合适的主机地址。通常,网络号的最后几位为子网位,主机地址的最后几位为主机位。 在配置IP地址时,还需要考虑到IP地址分配的方式。一种常见的方式是使用静态IP地址,即手动为每个设备分配一个固定的IP地址。另一种方式是使用动态主机配置协议(DHCP),通过DHCP服务器自动分配IP地址给设备。 最后,配置完子网和IP地址后,还需要确保网络中的设备能够正确通信。可以通过网络互联设备如路由器或交换机来实现不同子网之间的通信。同时,还需要配置设备的默认网关,以确保设备能够正确地发送数据包到其他网络中的设备。 综合技巧练习-规划子网和配置IP地址需要考虑到网络规模、设备数量和通信需求,以及选择合适的IP地址分配方式。只有合理规划和配置子网和IP地址,才能保证网络的正常运行和设备间的顺畅通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值