前言
http相关概念
互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。 又称为超文本传输协议
扩展:
- 互联网:是网络的网络,是所有类型网络的母集
- 因特网:世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都成为主机。
- 万维网:WWW(world wide web)万维网并非某种特殊的计算机网络,是一个大规模的、联机式的信息贮藏库,使用链接的方法能非常方便地从因特网上的一个站点访问另一个站点(超链技术),具有提供分布式服务的特点。万维网是一个分布式的超媒体系统,是超文本系统的扩充,基于B/S架构实现
- 为了解决"怎样使不同作者创作的不同风格的万维网文档,都能在因特网上的各种主机上显示出来,同时使用户清楚地知道在什么地方存在着链接”这一问题,万维网使用超文本标记语言(HyperText Markup Language),使得万维网页面的设计者可以很方便地用链接从页面的某处链接到因特网的任何一个万维网页面,并且能够在自己的主机品目上将这些页面显示出来
浏览器通信过程
简单概括可以理解为:
域名解析成IP地址
浏览器与服务器进行TCP连接(三次握手)
发送与接收数据(浏览器与服务器开始HTTP访问过程)
浏览器与服务器断开TCP连接(四次挥手)
1.域名解析 域名解析服务器DNS负责把域名解析成对应的IP,客户端再根据对应IP地址访问服务器。 2.tcp三次握手
第一次握手,客户端先向服务器发送一个请求连接的报文,SYN=1,ACK=0 ack=x;
第二次握手,服务器收到客户端发送的请求,若服务器同意连接,则服务器发送一个数据包进行回应,同步SYN=1,确认ACK=1 ack=x+1 seq=y;
第三次握手,客户端收到服务器的确认,再给服务器发送一个数据包,同步seq=y+1,确认ACK=1,这样TCP连接就建立好了。
3.发送和接收数据
用户在浏览器发起请求,浏览器会向服务器发起TCP连接请求;
如果服务器接收请求并建立连接,浏览器会将生成的HTTP格式数据包发送至服务器;
服务器便会解析HTTP格式的数据包并执行请求,然后服务器将生成HTTP格式的数据包发送至浏览器;
浏览器解析HTTP格式的数据包,最后呈现HTML响应给用户,完成发送与收取数据。
4.四次挥手
第一次挥手,客户端向服务器发送连接释放的请求报文,并停止发送数据,终止FIN=1,确认ACK=0;
第二次挥手,服务器收到连接释放的报文,给客户端发送确认报文,从客户端到服务器这个方向上的连接就释放了,
TCP连接处于半关闭状态,此时客户端没有数据要发给服务器了,但是服务器还有数据要发送给客户端,客户端仍可以接收,
终止FIN=0,确认ACK=1;
第三次挥手,如果服务器已经没有向客户端发送数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文,终止FIN=1,
确认ACK=1;
第四次挥手,客户端收到服务器的连接释放报文段后,向服务器发出确认报文,终止FIN=0,确认ACK=1。
http相关技术
http 应用层协议 端口号:80 /tcp. web前端开发语言:
- html
- css
- javascript 其中html 超文本标记语言,编程语言,主要负责实现页面的结构 。CSS层叠样式表, 定义了如何显示(装扮) HTML 元素,比如:字体大小和颜色属性等 javascript,实现网页的动画效果,但实属于静态资源 。
URL
定义:统一资源定位符 分为URL 和 URN (YRN统一资源命名) URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地URL组成 URI:统一资源标识符 URL:统一资源定位符 URN:统一资源名称 格式:
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
<scheme> :方案
<scheme>:用户名
<scheme>:密码
<host>:主机
<host>:端口
<path>:路径 服务器资源本地名
<query>:传递参数给程序,如数据库,用?分隔,多个查询用&分隔
Protocol+Domain Name+Port+Path to the file+Parameters+Anchor
协议+域名+端口+路径(网络服务器上资源的路径)+查询字符串(提供给网络服务器的额外参数)+锚点(资源本身的另一部分的锚点)
网站访问量
1.网站访问量统计的重要指标
- IP(独立IP):即Internet Protocol,指独立IP数。一天内来自相同客户机IP 地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标
- PV(访问量): 即Page View, 页面浏览量或点击量,用户每次刷新即被计算一次,PV反映的是浏览某网站的页面数,PV与来访者的数量成正比,PV并不是页面的来访者数量,而是网站被访问的页面数量
- UV(独立访客):即Unique Visitor,访问网站的一台电脑为一个访客。一天内相同的客户端只被计算一次。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的
2.http工作机制
一次http事务包括:
- http请求:http request
- http响应:http response
Web资源:web resource, 一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web 页面”通常并不是单个资源,而是一组资源的集合
资源类型:
- 静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同 常见文件后缀:.html, .txt, .jpg, .js, .css, .mp3, .avi
- 动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同 常见文件后缀: .php , .jsp , .asp
连接模式:
- 串行连接:HTTP有无连接的特性,即每次连接只能处理一个请求,收到响应后立即断开连接 通信成本很高
- 持久连接:最初是为了解决串行连接问题,一定时间内,同一客户机发出的的HTTP请求,只要两端都没有提出断开连接,则持久保持TCP连接状态,其他请求可以复用这个连接通道。
- 并行连接:通过多条TCP连接发起并发的HTTP请求
- 管道化持久连接:管道化则可以不用等待响应返回而发送下个请求并按顺序返回响应,现代浏览器并未默认开启管道化。
- 复用的连接:交替传送请求和响应报文(实验阶段)
!!#ff0000 注:!! 1.HTTP是无连接的,即每次连接只处理一个请求,服务器处理完客户请求,并收到客户的应答后,就断开连接。 2.HTTP是无状态的,即HTTP协议对事务处理没有记忆能力,处理一件事情并不会有记忆 ,所以当后续的处理需要先前的消息时,需要重传。 可以理解为脸盲还路痴。同样的人来 每次都需要重新介绍 还不认路。 3.HTTP是媒体独立的,主要客户端和服务器知道如何处理数据内容,任何的数据内容都可以通过HTTP传送,客户端以及服务器指定使用适合的 MIME-type 内容类型。
http协议版本
目前版本主要应用是1.0版本
0.9-----1.0------1.1----2.0(概念)
区别:
0.9版本 :原型版本,功能简陋,只有一个命令GET。
1.0:版本:当前主流版本 支持多种请求方式
1.1版本:以上的基础上支持长链接
http请求的完成过程
1.完整过程
1.建立链接 接收或拒绝连接请求 2.接受请求 接收客户端请求报文中对某资源的一次请求的过程
- 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
- 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
- 复用I/O结构:启动一个进程,同时响应N个连接请求
- 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求 3.处理请求 服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理 常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS 4.访问资源 服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源 5.构建响应报文 一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体 6.发送响应报文 Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束
7.记录日志 最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务 。
2.http请求报文
请求报文和响应报文都是由4部分组成 1.请求行(开始行) 2.请求头 3.空行 4.消息主体 方法:
- 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:参数,但是这个不常用,指定一些参数,譬如指定传输方式
qurey:查询参数
frag:html资源片段,譬如html文档过大的时候,frag定位到html的一部分
3.响应报文
开始行是状态行 包括 http版本 状态码 以及描述状态码的短语。
4.状态码
状态码由三位数字,标记请求处理过程中发生的情况。 浏览器检查即可查看到。
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误
常用状态码:
1xx :信息型状态码,表示服务器正在处理请求
| 状态码 | 信息 | | ------ | ------ | | 100 | 表示客户端应继续其请求。 | | 101 | 表示切换协议。服务器根据客户端的请求切换协议,只能切换到更高级的协议。 | | 102 | 表示由WebDAV(RFC 2518)扩展的状态码,意思是处理将被继续执行。 |
2xx:成功状态码,表达请求已经正常处理完毕
| 状态码 | 信息 | | ------ | ------ | |200 | 请求成功完成,请求的的响应头或数据响应正常返回,网站网页应当正常表现的一个状态码。 | | 201 | 成功请求并创建了新的资源。 | | 202 | 已经接受请求,但未处理完成。 | | 203| 非授权信息,请求成功。但返回的meta信息不在原始的服务器,而是一个副本。 | | 204 | 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息。 | | 205 | 服务器成功处理了请求,且没有返回任何内容。 | | 206 | 服务器已经成功处理了部分 GET 请求。 | | 207 | 由WebDAV(RFC 2518)扩展的状态码,代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。 |
3xx:重定向状态码,需要进行额外操作以完成请求。
|状态码 | 信息 | | ------ | ------ | | 300 | 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于客户终端。 | | 301 | 请求的网页已永久移动到新位置。 资源新位置Moved Permanently | | 302 | 临时性重定向 | |303 | 临时性重定向,且总是使用 GET 请求新的 URI | | 304 |自从上次请求后,请求的网页未修改过。 | | 305 | 表示所请求的资源必须通过代理访问 | | 306 | 已经被废弃的HTTP状态码。 | | 307 | 临时重定向,与302类似,使用GET请求重定向。浏览器内部重定向 |
4xx:客户端错误状态码,导致服务器无法处理请求。
| 状态码 | 信息 | | ------ | ------ | | 404 |网页错误 服务器无法找到客户端请求的资源;Not Found | | 401 | 访问错误、被拒绝。它们指明更为具体的错误原因。如 需要输入账号和密码认证方能访问资源;Unauthorized | | 401.1 | 表示登录失败。| | 401.2 | 服务器配置导致登录失败。 | | 401.3 | 由于 ACL 对资源的限制而未获得授权。 | | 401.4 | 筛选器授权失败。 | | 401.5 | ISapi/CGI 应用程序授权失败。 | | 401.7 | 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。 | | 403 | 请求被禁止;Forbidden |
403.1状态码:表示执行访问被禁止。
403.2状态码:表示读访问被禁止。
403.3状态码:表示写访问被禁止。
403.4状态码:表示要求 SSL。
403.5状态码:表示要求 SSL 128。
403.6状态码:表示IP 地址被拒绝。
403.7状态码:表示要求客户端证书。
403.8状态码:表示站点访问被拒绝。
403.9状态码:表示用户数过多。
403.10状态码:表示配置无效。
403.11状态码:表示密码更改。
403.12状态码:表示拒绝访问映射表。
403.13状态码:表示客户端证书被吊销。
403.14状态码:表示拒绝目录列表。
403.15状态码:表示超出客户端访问许可。
403.16状态码:表示客户端证书不受信任或无效。
403.17状态码:表示客户端证书已过期或尚未生效。
403.18状态码:表示在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
403.19状态码:表示不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
403.20状态码:表示Passport 登录失败。这个错误代码为 IIS 6.0 所专用。
404状态码:表示未找到,表示没有找到文件或目录。
404.1状态码:表示无法在所请求的端口上访问 Web 站点。
404.2状态码:表示Web 服务扩展锁定策略阻止本请求。
404.3状态码:表示MIME 映射策略阻止本请求。
405状态码:表示用来访问本页面的 HTTP 谓词不被允许(方法不被允许) 414状态码:表示请求 URI 太长。
5xx:服务器错误状态码,服务器原因导致处理请求出错。
|状态码 | 信息 | | ------ | ------ | | 500 | 服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限 | | 501 | 页眉值指定了未实现的配置,在参数中有语法错误 | | 502 | Web 服务器用作网关或代理服务器时收到了无效响应| | 502.1 | 表示CGI 应用程序超时 | | 502.2 | CGI 应用程序出错,未执行命令 | | 503 | 服务不可用,错误的命令序列 | | 504 | 网关超时,未执行该参数的命令 | | 505 | HTTP 版本不受支持 | | 509 | 服务器达到带宽限制。这不是一个官方的状态码,但是仍被广泛使用。 |
500.12状态码:表示应用程序正忙于在 Web 服务器上重新启动。
500.13状态码:表示Web 服务器太忙。
500.15状态码:表示不允许直接请求 Global.asa。
500.16状态码:表示UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
500.18状态码:表示URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。
500.100状态码:表示内部 ASP 错误。
apache 简单了解
功能:
- 提供http协议服务
- 多个虚拟主机:IP、Port、FQDN
- CGI:Common Gateway Interface,通用网关接口,支持动态程序
- 反向代理
- 负载均衡
- 路径别名
- 丰富的用户认证机制:basic,digest
- 支持第三方模块
apache特性:
- 高度模块化:core + modules
- DSO:Dynamic Shared Object 动态加载/卸载
- MPM:multi-processing module 多路处理模块
MPM 三种工作模式
prefork:多进程I/O模型,每个进程响应一个请求 worker:复用的多进程I/O模型,多进程多线程,IIS使用此模型 event:事件驱动模型(worker模型的变种)
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 -l
**查看静态编译及动态装载的模块:**httpd -M
[root@xyy1 ~]# httpd -l
Compiled in modules:
core.c
mod_so.c
http_core.c
event.c
[root@xyy1 ~]# httpd -M
Loaded Modules:
core_module (static)
so_module (static)
http_module (static)
mpm_event_module (static)
authn_file_module (shared)
省略。。。。