目录
6 Nginx是多进程组织模型,而且是一个由Master主进程和Worker工作进程组成。
一,WEB服务和HTTP协议
1.1 Internet 因特网
在90年代,超文本标识语言HTML,即一个可以获得因特网的图像信息的超文本因特网协议被采用,使每一个人可以产生自己的图像页面(网址),然后成为了一个巨大的虚拟超文本网络的组成部分,这个增强型的因特网又被非正式地称为万维网。因特网一词指这个网络的物理结构,包括连接所有事物的客户机、服务器和网络;而用万维网指利用这个网络可以访问的所有网站和信息。
1.2 Internet和中国
1987年9月14日,物理研究员钱天白发出来自中国的第一封电子邮件:
Across the Great Wall we can reach every corner in the world.
1.3 HTTP 超文本传输协议
互联网:是网络的网络,是所有类型网络的母集。
因特网:Internet,世界上最大的互联网网络。即因特网概念从属于互联网概念。习惯上,大家把连接在因特网上的计算机都称为主机。
万维网:WWW(world wide web) 万维网并非某种特殊的计算机网络,是一个大规模的 、联机式的信息贮藏库,是一个分布式的超媒体系统,是超文本系统的扩充。
1.4 浏览器访问网站的过程
1 DNS解析:系统缓存查询,路由器缓存、ISP缓存查询,DNS递归查询
2 CDN节点
3 TCP连接:三次握手,四次挥手
4 Web服务器处理HTTP请求
1)建立连接
2)接收清求
3)处理请求 GET、POST等方法
4)获取资源
5)构建响应报文
6)发送响应
7)记录日志
5 浏览器接收响应报文,进行页面渲染
1.5 HTTP服务通信过程
HTTP (HyperText Transfer Protocol,超文本传输协议)是一种分布式、协作式和超媒体信息系统的应用层协议。默认端口:80/tcp
1.6 HTTP 相关技术
WEB前端开发语言:html,css,javascript
html语言:Hyper Text Markup Language 超文本标记语言,编程语言,主要负责实现页面的结构
test.html建议用vscode创建文件,用记事本可能会出现乱码。
CSS:Cascading Style Sheet 层叠样式表,定义了如何显示(装扮)HTML元素,比如:字体大小和颜色属性等。样式通常保存在外部的.css文件中,用于存放一些HTML文件的公共属性,从而通过仅编辑一个简单的CSS文档,可以同时改变站点中所有页面的布局和外观。
Js: javascript,实现网页的动画效果,但实属于静态资源。
1.7 MIME
MIME:Multipurpose Internet Mail Extensions 多用途互联网邮件扩展
MIME格式:type/subtype txt html jpg bmp
范例: text/plain txt asc text pm el c h cc hh cxx hxx f90 conf log text/html html htm text/css image/jpeg jpg jpeg image/png video/mp4 application/javascript
1.8 URI和URL
URL 组成
<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
URL示例
URI: Uniform Resource Identifier 统一资源标识,分为URL 和 URN
URN:Uniform Resource Naming,统一资源命名
示例: P2P下载使用的磁力链接是URN的一种实现 magnet:?xt=urn:btih:660557A6890EF888666
URL:Uniform Resorce Locator,统一资源定位符,用于描述某服务器某特定资源位置
两者区别: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.9 网站访问量
网站访问量统计的重要指标
IP(独立IP):即Internet Protocol,指独立IP数。一天内来自相同客户机IP 地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标
PV(访问量): 即Page View, 页面浏览量或点击量,用户每次刷新即被计算一次,PV反映的是浏览某网站的页面数,PV与来访者的数量成正比,PV并不是页面的来访者数量,而是网站被访问的页面数量
UV(独立访客):即Unique Visitor,访问网站的一台电脑为一个访客。一天内相同的客户端只被计算一次。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的
网站统计:Alexa网站排名查询
例:网站访问统计
1. 甲乙丙三人在同一台通过 ADSL 上网的电脑上(中间没有断网),分别访问 www.baidu.com 网站, 并且每人共用一个浏览器,各个浏览了2个页面,那么网站的流量统计是: IP: 1 PV:6 UV:1 2. 若三人都是ADSL重新拨号后,各个使用不同的浏览器,分别浏览了2个页面,则 IP: 3 PV:6 UV:3
网站访问量统计:
QPS:request per second,每秒请求数
PV,QPS和并发连接数换算公式
QPS= PV * 页面衍生连接次数/ 统计时间(86400)
并发连接数 =QPS * http平均响应时间
峰值时间:每天80%的访问集中在20%的时间里,这20%时间为峰值时间
峰值时间每秒请求数(QPS)=( 总PV数 页面衍生连接次数)80% ) / ( 每天秒数 * 20% )
2.0HTTP工作机制
一次http事务包括:
http请求:http request
http响应:http responseWeb资源:web resource, 一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web 页面”通常并不是单个资源,而是一组资源的集合
资源类型:
静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同,常见文件后缀:.html, .txt, .jpg, .js, .css, .mp3, .avi
动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
常见文件后缀:.php, .jsp ,.asp
提高HTTP连接性能:
并行连接:通过多条TCP连接发起并发的HTTP请求
持久连接:keep-alive,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
管道化连接:通过共享TCP连接,发起并发的HTTP请求
复用的连接:交替传送请求和响应报文(实验阶段)
2.1 HTTP 请求访问的完整过程
1)建立连接:接收或拒绝连接请求
2)接收清求:接收客户端请求报文中对某资源的一次请求的过程
3)处理请求:服务器对请求报文进行解析,并获取请求的资源及GET、POST等请求方法相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
4)获取资源:服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
5)构建响应报文:响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
6)发送响应报文
7)记录日志:最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务
2.1.1 请求方法
请求方法:标明客户端希望服务器对资源执行的动作
GET: 从服务器获取一个资源
HEAD: 只从服务器获取文档的响应首部
POST: 向服务器输入数据,通常会再由网关程序继续处理
PUT: 将请求的主体部分存储在服务器中,如上传文件
DELETE: 请求删除服务器上指定的文档
TRACE:追踪请求到达服务器中间经过的代理服务器
OPTIONS:请求服务器返回对指定资源支持使用的请求方法
CONNECT:建立一个到由目标资源标识的服务器的隧道
PATCH:用于对资源应用部分修改
2.2 HTTP请求报文
报文由三个部分组成:开始行,首部行,和实体主体。在请求报文中,开始行就是请求行。
开始行格式:方法,URL,版本
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
2.3 HTTP响应报文
响应报文的开始行是状态行。
状态行的格式内容:HTTP版本,状态码,以及解释状态码的简单短语。
<version> <status> <reason-phrase> <headers> <entity-body> 范例: 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
2.4 status 状态码
http协议状态码分类
1xx:100-101 信息提示
2xx:200-206 成功
3xx:300-307 重定向
4xx:400-415 错误类信息,客户端错误
5xx:500-505 错误类信息,服务器端错误http协议常用的状态码 200: 成功,请求数据通过响应报文的entity-body部分发送;OK 301: 请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位 置;Moved Permanently 302: 响应报文Location指明资源临时新位置 Moved Temporarily 304: 客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端; Not Modified 307: 浏览器内部重定向 401: 需要输入账号和密码认证方能访问资源;Unauthorized 403: 请求被禁止;Forbidden 404: 服务器无法找到客户端请求的资源;Not Found 499: 客户端读超时关闭连接的错误码 499是客户端读超时关闭连接造成的,推荐从超时时间或者优化响应 速度入手,web服务器发现客户端主动关闭连接后,记录到access日志中的。可能是客户端接收响应超时了,可 以先在客户端统计下是不是这个原因,再调查为什么会导致超时 500: 服务器内部错误;Internal Server Error,比如:cgi程序没有执行权限 502: 代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway,比如后端服务端口没 有打开 503: 服务不可用,临时服务器维护或过载,服务器无法处理请求,比如:php服务停止,无法处理php程序 504: 网关超时,或者后端服务器无回应报文
2.5 Cookie 和 session
无状态协议是指协议对事物处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它应答就很快。
HTTP是超本文传输协议,顾名思义,这个协议支持超文本的传输。什么是超文本?说白了就是使用 HTML编写的页面。通常,我们使用客户端浏览器访问服务器的资源,最常见的URL也是以html为后缀 的文件,因此可以说超文本是网络上最主要的资源。
既然HTTP协议的目的是在于支持超文本的传输,也就是资源的传输,那么客户端浏览器向HTTP服务器 发送请求,继而HTTP服务器将相信资源发回给客户端这样一个过程中,无论对于客户端还是服务器,都 没有必要记录这个过程,因为每一次请求和响应都是相对独立的,一般而言,一个URL对应着一个唯一 的超文本,正是因为这样的唯一性,使得记录用户的行为状态变得毫无意义,所以,HTTP协议被设计为 无状态的连接协议符合它本身的需求。
HTTP协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求"点到为止",不会造成不必要 的连接占用,缺点在于如果为了保留状态,每次请求都会传输大量的重复信息内容。
可是随着 Web 的不断发展,很多业务都需要对通信状态进行保存。如登录场景,购物场景。
以上场景都需要保留会话数据,需要会话管理机制。
会话管理: 管理浏览器客户端和服务器端之间会话过程中产生的会话数据。
为了会话管理,HTTP就需要传输大量重复信息内容的问题,造成大量的网络带宽消耗。于是 Cookie 和 Session 技术闪亮登场了,它们可以为用户进行会话管理,实现保存状态。
2.6 Cookie工作原理和过程
Cookie 又称为"小甜饼”。类型为"小型文本文件”,指某些网站为了辨别用户身份而储存在用户本地终端 (Client Side)上的数据(通常经过加密)。
Cookie基于HTTP协议,也叫Web Cookie或浏览器Cookie,是服务器发送到用户浏览器并保存在客户端 本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它 用于告知服务端两个请求是否来自同一浏览器,如保持用户的登录状态。Cookie使基于无状态的HTTP 协议记录稳定的状态信息成为了可能。
Cookie主要用于以下三个方面:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
在进行页面 Cookie 操作的时候,应该尽量保证 Cookie 的个数小于 20 个,总大小小于 4KB,这是一个 安全且保险的范围。
cookie的获取过程: #第一次请求过程 浏览器第一次发送请求时,不会携带任何cookie信息 服务器接收到请求之后,发现请求中没有任何cookie信息 服务器生成和设置一个cookie.并将此cookie设置通过set_cookie的首部字段保存在响应报文中返回给浏览器 浏览器接收到这个响应报文之后,发现里面有cookie信息,浏览器会将cookie信息保存起来 #第二次及其之后的过程 当浏览器第二次及其之后的请求报文中自动 cookie的首部字段携带第一次响应报文中获取的cookie信息,服务器再次接收到请求之后,会发现请求中携带的cookie信息,这样的话就认识是谁发的请求了 之后的响应报文中不会再添加set_cookie首部字段
Cookie主要用于以下三个方面:
会话状态管理(如用户登录状态、购物车、游戏分数或其它需要记录的信息)
个性化设置(如用户自定义设置、主题等)
浏览器行为跟踪(如跟踪分析用户行为等)
2.7 Session工作原理
session是相对于cookie的另外一个状态保持的解决方案,它是通过服务器来保持状态的。
session指的是服务器上为每个客户端所开辟的独立存储空间,在其中保存的信息就是用于保存状态的。
Session是服务器端程序运行的过程中创建的,不同语言实现的应用程序有不同创建session的方法。在创建了session的同时,服务器会为该session生成唯一的sessionid,而这个sessionid被创建了之后, 就可以调用session相关的方法往session中增加内容,而这些内容只会保存在服务器中,每个 sessionid就像数据库中主键,可以根据Sessionid 关联每个session的相关信息。比如:购物车里的商品,登录用户等。但发送给客户端浏览器的只有sessionid。当客户端浏览器再次发送http请求时,会自动地将这个sessionid 附加在请求报文中 ,服务器收到请求之后就会根据sessionid找到对应的 session,从而再次使用,使得用户的状态得以保持。
每个session都有一个sessionid,这个ID存放有两种方式:
1、通过URL存取,比如:Java程序中,URL会带上一个jsessionId=xxxxxx等,这样每次重新请求的时候 都传了sessionId给服务器,但此方式不安全,所以很少使用,所以一般session是依赖于cookie的.即如果浏览器禁用了cookie,则session无法实现
2、通过cookie存取(Tomcat默认如此&#