linux-web基础

web基础

[TOC]

网上冲浪

网上冲浪:在Internet互联网上获取各种信息,进行工作、娱乐,在英文中上网是" surfing the internet",因"surfing"的意思是冲浪,即称为“网上冲浪”,这是一种形象的说法。

这是一个非常上古的词汇了,小学初中写英语作文的时候还经常“surfing the internet”,当时要想上网,是需要专门找到连接互联网的电脑才可以进行上网。去“网上冲浪”是一件专门的事情,就好比现在说要去游泳,要去图书馆看书一样。

不像现在,每个人随时随地都在网上冲浪。

image-20200113102809598

image-20200113102850764

HTTP协议

你知道我们打开浏览器(Web browser)的地址栏输入网站名字(域名),web页面如何展示的吗

image-20200113103704780

当你浏览器的地址栏内输入某个URL(Uniform Resource Locator,统一资源定位符),机器可以上网,就可以看到Web页面,就算你不了解其内部原理,也能看到结构

Web页面肯定不是凭空出现的,根据浏览器地址栏指定的URL,浏览器向Web Server(Web服务器)中获取文件资源(resource),从而显示出页面。

image-20200113104128851

Web使用的是一种名为HTTP(HyperText Transfer Protocol,超文本传输协议),完成客户端到服务端的一系列请求过程。

TCP/IP协议

通常互联网就是以TCP/IP协议的基础运作,HTTP是TCP/IP的一个子集。

计算机与网络设备要相互通信,双方就必须基于相同的方法。比如, 如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通 信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之 间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为 协议(protocol)。

协议存在各式各样的内容,TCP/IP是互联网各协议的总称

  • ICMP(Internet Control Message Protocol)Internet控制报文协议。 它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。
  • Internet Protocol简称IP,又译为网际协议或互联网协议
  • DNS 协议建立在 UDP 或 TCP 协议之上,默认使用 53 号端口。客户端默认通过 UDP 协议进行通讯,但是由于广域网中不适合传输过大的 UDP 数据包,因此规定当报文长度超过了 512 字节时,应转换为使用 TCP 协议进行数据传输。
  • Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。 UDP 为应用程序提供了一种无需建立连接就可以发送封装的IP 数据报的方法。
  • FTP(File Transfer Protocol,文件传输协议) 是TCP/IP 协议组中的协议之一。 FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。 其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。
  • SNMP 是专门设计用于在 IP 网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。 SNMP 使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过 SNMP 接收随机消息(及事件报告)网络管理系统获知网络出现问题。
  • http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

TCP/IP协议分为了四层

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层

image-20200113105732826

  • 应用层,决定了向用户提供应用服务器时的活动,例如FTP,DNS,HTTP
  • 传输层,用于在网络中两台计算机之间的数据传输,TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Data Protocol,用户数据报 协议)。
  • 网络层,处理网络上传输的数据包,规定了数据传输的路线,目的地
  • 数据链路层,处理网络连接的硬件层,如操作系统,网卡等硬件设备驱动

TCP传输原理

image-20200113110505055

HTTP协议传输时,通过分层的顺序与目标机器通信。发送端从应用层向下走,接收方目的地是应用层。

  1. 客户端发起一个HTTP请求(访问一个页面)
  2. TCP/IP协议为了传输方便,在TCP传输层,将请求报文分割,且在每个报文上打上标机,转发给网络层
  3. 网络层再增加一个标机,目标机器的MAC地址发给链路层,这时候,网卡就知道数据发给谁了
  4. 接受者在链路层接收到数据,向上走,最终到应用层(web nginx)

数据包封装

image-20200113140445806

数据包在每一层传输的时候,都会加上一层对应层所属的首部信息,反之接收方在数据传输的时候,每一层都会进行相应的解包,这种称之为数据包的封装。

IP协议

IP协议(Internet Protocol)处于OSI模型(开放式系统互联模型(英语:Open System Interconnection Model,缩写:OSI;简称为OSI模型)中的网络层。

IP协议作用是把数据包发送到指定的目的地,这里的重要条件就是IP地址MAC地址

IP地址是指定了机器在网络的地址信息

MAC地址是指网卡所属的固定的地址。

IP地址可以动态分配,自由变化,而MAC地址基本不会更改,一般机器的出厂后就固定了。

IP与ARP

MAC地址属于数据链路层,IP的通信依赖于MAC地址,互联网上,局域网的通信还是很少的,通常都是经过多台计算机中转才能够到达目标机器,在进行中转时,利用下一站的中转设备的MAC地址来搜索下一个中转目标,ARP协议就是根据通信方的IP地址来解析出MAC地址。

计算机和网络设备的中转路线,是路由器、交换机等网络设备内部工作,进行路由选择(routing)。

image-20200113143217578

这就好比送快递的货车,将货物送到集散中心,明确送货后,快递公司能够查询送件的目的地,明确出一条路线,下一站送往哪一个集散中心,最终的集散中心再判断能否送到客户家里。

image-20200113143833131

TCP协议

TCP协议位于传输层,提供可靠的字节流服务(Byte Stream Service),指的是以字节流的形式传递给接收者,没有固定的报文边界限制,只能知道总共发送的数据,但是不知道一次能读取到多少数据,为了更容易传输大数据将数据切割了。

三次握手

为了数据传输的准确性,服务端和客户端之间需要三次的交互(三次握手)

  • 第一次,client发送syn(syn=j)给server,进入SYN_SEND状态,等待服务器确认
  • 第二次,server收到syn包,确认client发来的syn(ack=j+1),同时自己发送一个SYN包(syn=k),也就是SYN+ACK包,此时server进入SYN_RECV状态
  • 第三次,客户端接收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此时包发送完毕了,客户端和服务器进入ESTABLISHED状态,完成三次握手。

image-20200113153621079

DNS协议

image-20200113154222880

HTTP

http:hyper text transfer protocol

HTTP协议用于client和server之间通信,一般是请求一个静态资源称之为客户端,提供资源的一方称之为服务端。

image-20200113163224397

URL与URI

一句话理解

统一资源标志符URI就是在某一规则下能把一个资源独一无二地标识出来。 例如身份证号,定位唯一的一个人,绝对不会重复,身份证号就好比是URI

统一资源定位符URL 定位到这个人,他在哪 住址协议://地球/中国/北京/昌平/沙河/超哥 同于 http://www.luffycity.com/index/index.html

URI(Uniform Resource Identifier )

url中文叫“统一资源标识符”,是一个用于标识某一互联网资源名称的字符串,在世界范围内标识定位某一个唯一信息资源。

例如

#访问一张郭达的照片
http://www.pythonav.cn:80/man.jpg

url主要用在各种www客户端和服务器程序上,url可以用一种统一的格式来描述各种信息资源,包括文件,服务器地址和目录等

【url组成】

  1. 协议
  2. 主机ip或域名
  3. 端口
  4. 文件资源具体地址

第一部分用"://"隔开,第二部分用"/"符号隔开

HTML

超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>chaoge.linux</title>
</head>
<body>
    <h1>我的第一个标题</h1>
    <p>我的第一个段落。</p>
</body>
</html>

获取html源码的方式

curl www.pythonav.cn

浏览器检查网页源码

CSS

CSS 指层叠样式表 (Cascading Style Sheets)

CSS作用是定义如何显示HTML元素样式

image-20200113174630046

image-20200113174707198

JS

JavaScript 是互联网上最流行的脚本语言,这门语言可用于 HTML 和 web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。

JavaScript 是一种轻量级的编程语言。

JavaScript 是可插入 HTML 页面的编程代码。

JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行。

image-20200113174821025

静态资源

在网页设计中,纯HTMl格式的网页(包含图片,视频,JS,CSS等样式)通常被称作“静态网页”。

静态网页是相对于动态网页而言的,是指没有后台数据库,不包含程序,不可交互的网页。

静态网页的特点
开发人员写了什么,显示就是什么,一旦编写完成,就不会有任何改变。静态网页一般适用于更新较少的展示型网页,例如(酒水,家具,水果等宣传页),是很多中小网站的展示方式。

静态网页资源对应文件扩展名为

  • 纯文本文件,如.htm .html .xml .js .css
  • 图片或数据文档,如 .jpg .gif .bmp .txt .ppt
  • 视频类文件 .mp4 .avi .flv 等

静态网页重要特性

  • 每个页面有一个固定的url地址,url地址不含有问号"?"或"&"等符号
  • 网页一经发布到服务器,网页内容是保存在服务器文件系统上的,每个网页都是独立的一个文件
  • 网页内容固定不变,容易被搜索引擎收录(优点)
  • 网页没有数据库支撑,在网站制作和维护上工作量很大(缺点)
  • 网页的交互性很差,缺少程序的功能实现(缺点)
  • 客户端解析网址时,由于不需要读取数据库,因此服务器端可以接受更高的并发访问。请求到来时,直接从磁盘上返回数据。(优点)

举例(吃火锅,现成的蔬菜)

【有关高并发架构思想】

在高并发,高访问量的场景下做架构优化时,比较关键的就是把动态网页转化成静态网页,而不是直接请求数据库和动态服务器,并且可以吧静态内容推到缓存中,这样就提升用户体验,节约服务器压力成本。

动态网页资源

服务端需要通过执行程序做出处理,发送给客户端的是程序的运行结果
动态网页是和静态网页相对而言的,动态网页的url后缀一般是.asp  .aspx  .php .js .cgi 
并且动态网页都有标志性的符号"? &",后端都有数据库的支持。

动态网页地址

添加新随笔
https://i.cnblogs.com/EditPosts.aspx?opt=1

动态网页资源特点

  1. 网页以数据库技术为支撑,大大降低网站维护的工作量
  2. 动态网页技术的网站可以实现更多的功能,如用户注册,用户登录,投票,用户管理,博客管理等
  3. 动态网页不是独立存在服务器上的网页文件,用户请求动态程序时,服务器解析程序并且可能读取数据库返回一个完整的网页内容
  4. 搜索引擎(爬虫)一般不会抓取网址中的“?”后面的内容,因此企业都会做伪静态技术页面

举例(饭店炒菜,现做)

网站并发压力

在我们的生活中,拥挤,堵塞这些词,太常见,去超市排队,去银行排队,下班回家堵车,都很让人着急,我们都希望能快速的解决这些问题,处理效率高一点点。

这和我们日常的上网也是一样,我们浏览网页,网页迅速的给与反馈,响应我们早已觉得理所当然,然而也会在一些特殊时候,例如淘宝的双11活动,某电商的秒杀活动等,短时间内,网站浏览人数骤增,网站的压力迅速增长,能够处理请求的能力也随之变弱,这就好比一个商场搞促销活动,一下子涌进了很多人,超市整个的购买能力就会下降许多了。

并发模型

【单进程模式】

我们已知HTTP连接处理流程是一次请求,一次响应,这种工作机制如同银行的处理机制是类似的。

image-20200114093605030

1.银行起初只有一个柜台,假设处理一个客户需要5分钟,大厅来了10个人要办理业务,其他9个人只能等待,当排队的人过多的时候,大厅坐不下,保安就会拒绝后来的人进入大厅。

这就是一台服务器,单进程处理请求,一次只能处理一个请求,剩余的请求排队,当服务器连接数满了,服务器就会拒绝连接了。

单进程和单线程没有区别,因为一个进程至少有一个工作线程。循环处理请求是最初级的做法。当大量请求进来的时候,单线程一个一个处理请求,请求容易积压,得不到响应。这是无并发的模式。

【多进程模式】

2.银行规模扩大,柜台数也扩张,此时扩张为10个柜台,同时可以处理业务,当有100个用户,还有90个等待,同样的如果大厅排队人数过多,保安也禁止后续客户进入了。

有同学问,那你为啥不开一百个窗口,这不要成本的吗?朋友,一百个窗口得多大场地,招来100个客服,即使一上午只有五六个客户,你也得付钱给一百个窗口的客服,太贵!

这就是服务器的多进程工作模式,服务器有多个进程处理客户端的请求
主进程(master)监听服务器80端口以及用户连接数,当客户请求来临,主进程fork(派生)出一个子进程来处理连接,子进程处理完毕后,生成响应报文,再由父进程将其销毁。
父进程(主进程)继续等待其他客户的请求连接,但是进程占用服务器资源较多,服务器负载会升高。

父进程启动多个子进程,每个子进程响应一个请求

主进程
    子进程1
    子进程2
    子进程3
    子进程3
这样的设计好处是隔离性,即使挂掉某一个子进程也不影响父进程,缺点是对系统资源消耗较大。

image-20200114094126798

【复用的IO结构】

银行开10个柜台假设已是极限,如何还能加快事情的处理效率?

  • 原本一个柜台只有一个客服,处理一个客户要5分钟
  • 现在每个柜台安排多个工作人员,第一个人负责客户问题接待,第二个人负责票据打印,第三个人负责备案文档....
  • 如此这般,当第二个工作人员打印票票据的时候,第一个工作人员,又可以接待下一个客户
  • 对于用户而言,无感知后台的工作人员是几位,处理一个客户问题的时间大大缩短了
这种模型是一个进程响应n个请求,但并不是单纯的一个进程,而是背后的多线程在工作。

服务器接入与响应过程

image-20200114110437946

如图一次完整的http请求处理流程

  1. 建立连接,客户端发起请求,与服务器完成三次握手之后再建立连接
  2. 接收请求,服务器接收到请求后,内核根据socket把客户端请求的资源交给应用程序
  3. 处理请求,对请求报文解析,明确客户端请求的资源与请求方法等信息
  4. 访问资源,内核去磁盘中调取资源
  5. 构建响应,应用程序创建响应报文
  6. 发送响应,通过socket发给客户端
  7. 记录事务,记录日志

http协议汇总

image-20200117105521624

事务

我们再计算机领域总会听见事务一词。

事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大家同在一条船上,要活一起活,要完一起完 。

事务有四个特性(ACID)

  • 原子性(Atomicity):执行操作指令,要么全部成功,要么全部失败,只要一个失败,其他指令都失效,进行数据回滚,回到执行命令之前的操作
  • 一致性(Consistency)事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。
  • 隔离性(Isolation)隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
  • 持久性(Durability)当事务正确完成后,它对于数据的改变是永久性的。
A想要从自己的帐户中转1000块钱到B的帐户里。那个从A开始转帐,到转帐结束的这一个过程,称之为一个事务。在这个事务里,要做如下操作:

 1. 从A的帐户中减去1000块钱。如果A的帐户原来有3000块钱,现在就变成2000块钱了。
 2. 在B的帐户里加1000块钱。如果B的帐户如果原来有2000块钱,现在则变成3000块钱了。
如果在A的帐户已经减去了1000块钱的时候,忽然发生了意外,比如停电什么的,导致转帐事务意外终止了,而此时B的帐户里还没有增加1000块钱。那么,我们称这个操作失败了,要进行回滚。回滚就是回到事务开始之前的状态,也就是回到A的帐户还没减1000块的状态,B的帐户的原来的状态。此时A的帐户仍然有3000块,B的帐户仍然有2000块。

我们把这种要么一起成功(A帐户成功减少1000,同时B帐户成功增加1000),要么一起失败(A帐户回到原来状态,B帐户也回到原来状态)的操作叫原子性操作。

如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行。这种特性就叫原子性。

HTTP事务

image-20200117113513732

一道经典的面试题,当我们再浏览器输入一个站点,回车之后发生了什么,对于运维人员需要回答出什么?

1.DNS解析

1.浏览器解析www.pythonav.cn这个域名对应的IP地址
2.浏览器搜索自身的DNS缓存,是否存在域名对应的记录
3.DNS缓存中也找不到,系统读取hosts文件,查看是否存在对应IP记录
4.hosts文件也没有,浏览器会发起DNS系统调用,向本地配置的DNS服务器地址发起域名解析请求,对应的域名服务器再寻找是否存在记录

2.建立TCP连接

解析到对应的IP地址之后,User-Agent正常是浏览器,会以随机端口(1024<端口<65535)向服务器的80端口发起tcp连接
此请求经过TCP/IP的四层封包之后,进入服务器,进行解包操作,进入网卡,然后内核的TCP\IP协议栈,且通过防火墙,最后达到web应用程序,建立TCP连接。

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“第四次握手”,就是服务器和客户端交互,最终确定断开。

3.发起HTTP请求

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。

1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接求。通常 的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

经过TCP三次握手后,浏览器发起HTTP请求,使用HTTP的GET方法,请求URL是/,按照HTTP/1.0协议。

例如某一个HTTP请求日志记录

192.168.178.1 - - [17/Jan/2020:14:30:11 +0800] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36"

【request Method】

GET、向服务器获取数据,资源
POST、向服务器提交数据,登录,注册
HEAD、获取URL的响应头信息(只要脑袋),不要响应主体信息(不要身体数据)
PUT、将请求主体部分发给服务器
DELETE、删除服务器指定的资源
TRACE、追踪请求到达服务器发生的变动
OPTIONS、让服务器返回对指定的URL支持的所有请求方法

【URL请求体】

image-20200117142810462

  • Accept 就是告诉服务器端,我接受那些MIME类型

  • Accept-Encoding 这个看起来是接受那些压缩方式的文件

  • Accept-Lanague 告诉服务器能够发送哪些语言

  • Connection 告诉服务器支持keep-alive特性

  • Cookie 每次请求时都会携带上Cookie以方便服务器端识别是否是同一个客户端

  • Host 用来标识请求服务器上的那个虚拟主机,比如Nginx里面可以定义很多

  • 虚拟主机.那这里就是用来标识要访问那个虚拟主机。

  • User-Agent 用户代理,一般情况是浏览器,也有其他类型,如:wget curl 搜引擎的蜘蛛等

  • If-Modified-Since 是浏览器向服务器端询问某个资源文件如果自从什么时间修

    过,那么重新发给我,这样就保证服务器端资源.文件更新时,浏览器再次去

    求,而不是使用缓存中的文件。

  • If-None-Match:本地缓存中存储的文档的ETag标签是否与服务器文档的Etag不匹配;

【状态码】

HTTP状态码是用以表示网页服务器超文本传输协议响应状态的3位数字代码。

HTTP请求状态如何,用状态码表示结果

状态码类别

1xx    信息状态码,服务器收到请求,需要客户端继续操作
2xx 操作成功
3xx 重定向状态码,需要进一步的操作
4xx 客户端错误,请求语法错误等
5xx 服务端错误,服务器处理过程中出错了

常见状态码

一些常见HTTP状态码为:
200 – 服务器成功返回网页
404 – 请求的网页不存在
503 – 服务不可用

常见HTTP状态码大全

1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。

代码 说明
http状态码 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
http状态码 101 (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功)
表示成功处理了请求的状态代码。
代码 说明
http状态码 200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
http状态码 201 (已创建) 请求成功并且服务器创建了新的资源。
http状态码 202 (已接受) 服务器已接受请求,但尚未处理。
http状态码 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。
http状态码 204 (无内容) 服务器成功处理了请求,但没有返回任何内容。
http状态码 205 (重置内容) 服务器成功处理了请求,但没有返回任何内容。
http状态码 206 (部分内容) 服务器成功处理了部分 GET 请求。

3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

代码 说明
http状态码 300 (多种选择) 针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
http状态码 301 (永久移动) 请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
http状态码 302 (临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
http状态码 303 (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
http状态码 304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
http状态码 305 (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。
http状态码 307 (临时重定向) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx(请求错误)
这些状态代码表示请求可能出错,妨碍了服务器的处理。

代码 说明
http状态码 400 (错误请求) 服务器不理解请求的语法。
http状态码 401 (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
http状态码 403 (禁止) 服务器拒绝请求。
http状态码 404 (未找到) 服务器找不到请求的网页。
http状态码 405 (方法禁用) 禁用请求中指定的方法。
http状态码 406 (不接受) 无法使用请求的内容特性响应请求的网页。
http状态码 407 (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
http状态码 408 (请求超时) 服务器等候请求时发生超时。
http状态码 409 (冲突) 服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
http状态码 410 (已删除) 如果请求的资源已永久删除,服务器就会返回此响应。
http状态码 411 (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
http状态码 412 (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
http状态码 413 (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
http状态码 414 (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
http状态码 415 (不支持的媒体类型) 请求的格式不受请求页面的支持。
http状态码 416 (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
http状态码 417 (未满足期望值) 服务器未满足”期望”请求标头字段的要求。

5xx(服务器错误)
这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

代码 说明
http状态码 500 (服务器内部错误) 服务器遇到错误,无法完成请求。
http状态码 501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
http状态码 502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
http状态码 503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
http状态码 504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
http状态码 505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

【响应头信息】

image-20200117145856083

Connection            使用keep-alive特性
Content-Encoding      使用gzip方式对资源压缩
Content-Length: 主体的长度
Content-type          MIME类型为html类型,字符集是 UTF-8
Date                  响应的日期
Server                使用的WEB服务器
Last-Modified:最后一次修改的时间
Server:服务器程序软件名称和版本

4.浏览器解析HTML

浏览器拿到index.html文件之后,解析html网页文件,遇见静态资源(js、css、img)就去服务器再次发请求下载,这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,顺序并不一定是代码里面的顺序。

image-20200117151921428

5.浏览器对页面进行渲染

浏览器对请求到的静态资源进行渲染

dns解析
发起tcp三次握手
建立tcp连接后发起http请求
服务器响应http请求,返回html资源
浏览器解析html代码,请求html中的其他静态资源
浏览器渲染页面,呈现画面

网络流量度量术语

IP

IP(独立IP),即 Internet Protocol,这里指独立IP数,独立IP数是指不同IP地址的计算机访问网站时被计的总次数。独立IP数是衡量网站流量的一个重要指标。一般一天内(00:00-24:00)相同IP地址的客户端访问网站页面只会被计为一次,记录独立IP的时间可为一天或一个月,目前通用的标准为“一天”。假设有部分同学在教室的局域网中同时打开了博客(www.luffycity.com),请问对于51CTO网站是几个独立IP?答:是一个独立IP。

这是因为,国内所有的公司几乎都是采用局域网共享上网的,即通过路由器NAT地址转换上网,每个计算机在局域网内的私有IP是不同的,但是在外网上,就必须由路由器把每个私网地址转换成了路由器接口的固定公网IP(多IP映射暂不考虑),所以说,对于网站来说一天内多个相同IP的客户端访问会被计为一个独立IP。

再假设一个客户机用户通过ADSL等直接拨号上网,但是上网的时候偶尔掉线,一共重新拨号了3次(相近时间重新拨号IP地址相同的几率是极小的),然后每次都继续打开同一个博客地址,请问此时,网站独立IP数是多少?答:是3个独立IP。由此可见,通过独立IP数度量网站访问量,和实际的访问情况不是很匹配。国内的企业、学校等多数是用NAT上网的,一个独立IP背后可能有数十上百个客户端访问。独立IP数虽然不是很准确,但却是MT技术人员比较关心的一个衡量网站的指标。

PV

PV(访问量)即 Page View,中文翻译为页面浏览,即页面浏览量或单击量,不管客户端是不是相同,也不管IP是不是相同,用户只要访问网站页面就会被计算PV,一次计一个PV。

PV的具体度量方法就是从客户浏览器发出一个对web服务器的请求( Request),Web服务器接到这个请求后,将该请求对应的网页(Page)发送给浏览器,这样就产生了一个PV。这里有一个问题,就是只要这个请求发送给了浏览器,无论这个页面是否完全打开(或下载完成),都会被计数(1次为1个PV),一般为了防止用户快速刷PV很多网站会把PV的统计程序放在页面的最下面。

用PV衡量网站时,PV数反映的是浏览某网站的页面数量,每刷新一次页面也算次。因此,可以说PV数与来访用户的数量成正比,但PV数并不是真正的页面来访者数量,而是网站被访问的页面数量,因为一个来访者可能产生多个PV。

问:如果一个用户要访问赶集网或58同城租房,你觉得用户可能会产生多少PV?

答:平均可能会有十几到几十个PV,一个来访者访问网站的PV数的多少是和网站提供的业务直接相关的。对于分类网站,用户浏览网站可能是为了找房子、找工作,因此一个用户访问的页面会很多,自然PV也就会很多PV( Page View)是网站被访问的页面数量的一个指标,但不能直接知道有多少人访问了这个网站。

一个来访者访问网站,可能产生若干PV数,但是独立IP数就只有1个,因此,如果对比一个网站的独立IP数和PV数,不难看出,PV数一定会大于等于独立IP数,其比例视网站的业务而定,对于分类门户,可能会达到10:1,甚至更多。

UV

UV(独立访客)即 Unique Visitor,同一个客户端(PC或移动端)访问网站被计为一个访客。一天(00:00-24:00)内相同的客户端访问同一个网站只计一次UV。UV一般是以客户端 Cookie等技术作为统计依据的,实际统计会有误差。

考虑到一台客户端计算机可能会有多人使用,因此,UV(独立访客)实际上并不定是独立的自然人访问。

IP、PV、UV的区别

针对该主题,下面以一个访问示例来讲解吧。

假设某城市的一个网吧里,有10个人都进入了www.luffycity.com的网站,每个人平均访问了5个页面,但是这个网吧的对外出口是一个公网IP(注意:也可以配置多个IP出口,此处不计特殊情况),所以,对于 luffycity网站来说,只会计算一个独立IP访问

但是因为网吧里有10人在访问www.luffycity.com的网站,并且平均都访问了5次因此,对于 luffycity网站来说,PV数就是10×5=50个PV。

而因为有10个人访问,就是10个不同的客户端访问,因此,UV(独立访客)为10。

那么,在此访问示例中,网站独立IP数为1个,PV数为50个,UV(独立访客)为10个。

通过上述结果,我们不难得出一个结论,一个网站的独立IP数量要比网站实际访问的pv数量小得多。通常情况下(国内互联网环境下),网站的UV数也会大于独立IP数。

PV数高说明访问的页面数多,但是不一定就代表来访者多;但PV数一定与来访者的数量成正比,不过,PV并不直接决定页面的真实来访者数量。比如在访问某网站时,一个人也可通过不断地刷新页面,制造出非常高的PV数。PV数多,用户访问网站页面的总数量多,通常服务器的压力会大一些。

度量方法

IP

  • 可以统计Web服务器的访问日志信息,对IP地址去重后计数,得到访客IP数量
  • 在网站结尾页面嵌入JS统计代码,待用户加载完网页后,IP发给统计IP数量的服务器,一般这种是第三方统计公司的业务。
  • 用第三方的统计工具,如谷歌的GA

PV

  • 分析Web服务器的访问日志,只计算HTML、后台服务请求等数量
  • 第三方统计工具

UV

  • 通过客户端HTTP请求统计,网站服务器对客户端的(ip、时间、浏览器、操作系统)等信息,如果这些信息相同,又来自于同一个IP,就可以计算是一个UV统计。
  • 通过cookie统计,每个浏览器在访问网站之后,网站服务器会发送给客户端一个cookie文件,当下次浏览器再访问网站时候就会携带者cookie,用于记录自己的身份信息,因此两次请求都是同样的cookie就是计算一个UV值,但是也有特殊原因,浏览器禁止cookie,用户清除cookie等。
posted @ 2022-07-13 23:23  xiaohaoge  阅读(116)  评论(0编辑  收藏  举报