4、http基础

http:hyper text transfer protocol,超文本标记语言。

CSS:cascading style sheet,层叠样式表。

js:javascript,客户端脚本语言。

MIME:multipurpose internet mail extesion,多用途邮件扩展,即多媒体。

MIME的作用,在发送邮件时,可以将非文本转换成文本;在接收时,可以将非文本转换成文本。

在http超文本标记语言,引入MIME以后,使得浏览器不仅可以识别文本,还可以识别图片等非文本内容,才实现了页游。

 

hhtp工作机制:

  • http请求
  • http响应

web资源:web resource

  • 静态文件:图片(.jpg,.gif),文本(.html,.txt,.js,.css),音乐视频(.mp3,.avi)
  • 动态文件:.php,.jsp,在返回这些文件之前,需要在后台做处理后才返回的文件。
  • 媒体:媒体类型(MIME类型):major/minor
    • text/html
    • text/plain
    • image/jpeg
    • image/gif  

每个web资源的唯一标识是URI:统一资源标识符,Uniform Resorce Indetifier

URI分为:

  • URL:uniform Resorce Locator,统一资源定位符。用于描述某服务器上,某特定资源的位置。由六部分组成:
    •  Scheme://Server:Port/path/resource
  • URN:Uniform Resorce Naming,统一资源命令符。

 

一次完整的http请求过程:

  1. 建立连接或拒绝请求
  2. 接收请求:
    • 接收来自于网络的请求报文中对某资源的一次请求的过程
    • 并发访问响应模型(Web I/O):
      • 单进程I/O结构:只启动一个进程处理用户请求,而且一次只处理一个请求;多个请求被串行响应
      • 多进程I/O结构:并行启动多个进程,每个进程响应一个请求  
      • I/O复用:一个进程可以响应n个请求
        • 多线程模型:一个进程生成N个线程,每个线程响应一个用户请求  
        • 基于事件驱动:一个进程响应N个请求,基于事件I/O通知机制,在N个请求之间切换
      • 多路I/O复用:启用多个(m)进程,每个进程响应n个请求
  3. 处理请求:对请求报文进行解析,并获取请求的资源及请求方法等相关信息。
    • 元数据:请求报文首部  
      • <method> <URL> <VERSION>
      • Host:www.xxx.com 请求的主机名称
      • Connection:.
  4. 访问资源:获取请求报文中请求的资源

    /var/www/html/images/1.jp ----> http://www.xxx.com/images/1.jp

    /var/www/html路径称为DocRoot

    web服务器资源路径映射,有四种方式:docroot,alias,虚拟主机docroot,用户家目录

docroot      

  5.构建响应报文:对获取到的资源,进行包装。

    资源的MIME类型:显示分类、魔法分类、协商分类

    URL重定向:web服务器构造的响应并非客户端请求的资源,而是资源另外一个访问路径。

       6.发送响应报文

 

     

 

       7.记录日志

 

 

http服务器程序,包括:

  • httpd,即apache
  • nginx
  • lighttpd
  • 应用程序服务器,包括:

    IIS

    tomcat,jetty,jboss,resin

    webshpere,weblogic,oc4j

前三种服务器,只能提供静态资源的服务。如果响应动态资源,如php,python等应用程序服务器。

应用程序服务器,既可以作为静态资源服务器,也可作为动态资源服务器。

 

URL:Unifrom Resource Location

  • 基本语法:scheme://user:password@host:port/path;params?query#frag
  • URL方案:scheme。http时,默认端口为80;https时,默认端口为443
  • 服务器地址:ip:port
  • 资源路径 :
  • params参数:如http://ww.xx.com/bbs/hello;gender=f&user=jerry
  • query查询参数:如http://ww.xx.com/bbs/hello?gender=f&user=jerry
  • frag片段:锚定符。当某页面数据很多时,可以使用frag定义到页面中的某一位置。如帮助文档。

当定义了索引Index时,访问 http://www.xx.com/bbs/index.php,可以省略index.php,即http://www.xx.com/bbs/也是一样的。

绝对URL:跨站时,通常使用绝对URL。

相对URL:相对于当前路径,跳转到另一个路径,通常在同一个站点内,通常使用相对URL。

 

http协议,是无状态的协议。服务器无法追踪客户端持续访问,同否来自同一个用户。

为了使得用户可以持续的访问,使得服务器可以追踪或识别用户。需要基于cookie。

 

早期cookie记录的信息较多,现在基本上只记录简单的用户标识信息。

因此轻cookie的情况下,站点将不能单独的通过cookie来记录购物车信息。

此时,需要使用到基于cookie的session。session除了存放cookie到客户端,如标记用户信息到cookie;还会在服务器端存放一些简单的信息。

因此,购物车信息,可通过session来保存,将用户标识信息存放在客户端的cookie中,将购物信息存放在服务器。

 

http事务:由客户端请求request 和服务器端的响应response组成。

request请求报文语法格式:

  • 请求报文的起始行: <method> <request-URL> <version>
  • <headers>
  • <entity-body>

response响应报文语法格式

  • 起始行:<version> <status> <reason-pharse>
  • <headers>
  • <entity-body>

method:请求方法,标明客户端希望服务器对资源执行的动作。

  • GET:从服务器获取一个资源
  • POST(向服务器发送要处理的数据)、
  • HEAD(只从服务器获取文档的响应首部headers)、
  • PUT(将请求的主体部分存储在服务器上,是危险的方法)...
  • DELETE:请求删除服务器上指定的文档,是危险的方法
  • TRACE:追踪请求到达服务器中间,经过的代理服务器
  • OPTIONS:请求服务器返回对指定资源支持使用的请求方法

version:HTTP/主版本号major.次版本号minor

status:响应状态码,如200....标记请求响应过程中发生的情况

reason-phrase:状态码所标记的状态的简要描述。如ok,not found

headers:首部。每个请求或响应报文可包含 任意个首部,每个首部都有首部名称,后跟一个冒号,再跟一个可选空格,接着一个值。

entity-body:实体部分,附加的数据部分。请求报文的entity-body有可能为空。

status状态码:

  • 1xx:100-101,信息提示
  • 2xx:200-206,成功
  • 3xx:300-305,重定向
  • 4xx:400-415,错误类信息,客户端错误
  • 5xx:500-505,错误类信息,服务端错误
  • 常用状态码:
    • 200:成功,请求的所有数据通过响应报文的entity-body部分发送:OK
    • 301:请求的URL指向的资源已被删除,但在响应报文中通过首部Location指明了资源现在所处的新位置:Moved Permnently
    • 302:与301相似,但在响应报文中通过Location指明资源现在所处临时 新位置:Found
    • 304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态通知客户端:Not Modified
    • 401:需要输入帐号和密码认证,才能方问资源:Unauthorized
    • 403:请求被禁止:Forbidden
    • 404:服务器无法找到客户端请求的资源:Not Found
    • 500:服务器内部错误:Internal Server Error
    • 502:代理服务器从后端服务器收到了一条伪响应:Bad GateWay

首部headers分类:

  • 通用首部:请求或响应都可以使用。
    • Date:报文的创建时间
    • Connection:连接状态,其值如keep-alive,close
    • Via:显示报文经过的中间节点
    • Cache-Control:控制缓存生效的机制。
      • 请求时:no-cache(不要缓存的实体,要求现在从WEB服务器去取) 
      • 请求时:max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象)

      • 请求时:max-stale:(可以接受过去的对象,但是过期时间必须小于 max-stale 值) 
      • 请求时:min-fresh:(接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象) 
      • 响应时:public(可以用 Cached 内容回应任何用户) 
      • 响应时:private(只能用缓存内容回应先前请求该内容的那个用户) 
      • 响应时:no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端)
      • 响应时:max-age:(本响应包含的对象的过期时间) 
      • 响应时:ALL: no-store(不允许缓存)
    • Pragma:缓存相关
    • Transfer-Encoding:如,web服务器表明自己对本响应消息体(不是消息体里面的对象)作了怎么的编码,比如是否分块chuncked。
  • 请求首部:
    • Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型
    • Accept-Charset:浏览器申明自己接收的字符集
    • Accept-Encoding:可接收的编码格式,如gzip
    • Accept-Language:可接收的语言  
    • Client-IP:客户端IP
    • Host:请求的服务器名称和端口号
    • Referer:包含当前正在请求的资源的上一级资源
    • User-Agent:客户端代理类型,即客户端程序的类型
    • 条件式请求首部:
      • Expect
      • If-Modified-Since:自己指定的时间之后,请求的资源是否发生过修改 
      • If-Unmodified-Since:自己指定的时间之后,请求的资源是否未修改 过
      • If-None-Match:本地缓存中存储的文档的ETag标签,是否与服务器文档的ETag不匹配
      • If-Match
    • 安全请求首部:
      • Authoriztion:向服务器发送认证信息,如帐号和密码
      • Cookie:客户端向服务器发送cookie
      • Cookie2  
    • 代理请求首部:
      • Proxy-Authorization:向代理服务器认证  
  • 响应首部:
    • 信息性:
      • Age:响应持续时间
      • Server:服务器程序的软件名称和版本,如nginx1.2    
    • 协商首部:某资源有多种表示方法时使用
      • Accept-Ranges:服务器可接收的请求范围类型
      • Vary:服务器查看的其它首部列表  
    • 安全响应首部:
      • Set-Cookie:向客户端设置cookie
      • Set-Cookie2:
      • WWW-Authenticate:来自服务器的对客户端的质询认证表单  
  • 实体首部:用于描述实体部分的格式相关、缓存相关
    • Allow:列出对此实体可使用的请求方法
    • Location:告诉客户端真正的实体位于何处,重定向时使用
    • Content-Encoding:实体部分的编码格式
    • Content-Language:实体的语言
    • Content-Length:实体的长度
    • Content-Location:实体真正所处的位置  
    • Content-Type:实体(主体)的对象类型
    • 缓存相关:
      • ETag:实体的扩展标签
      • Expires:实体的过期时间
      • Last-Modified:最后一次修改的时间  

 

请求headers首部示例:

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.9
Cache-Control:max-age=0
Connection:keep-alive
Cookie:acw_tc=3cc; www51cto=0AIY; 51ctologToken=dd1; pub_sauth1=FgVXAw; pub_sauth2=f4; pub_cookietime=864000; _ourplusFirstTime=1; UM_distinctid=1f; extensionListTestCourseThree=7D; zg_did=D; Hm_lvt_110fc9b2e1cae4d110b7959ee4f27e3b=154; 
Host:www.51cto.com
Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

响应headers首部示例:

Connection:keep-alive
Content-Encoding:gzip
Content-Type:text/html
Date:Sat, 02 Mar 2019 05:37:49 GMT
Load-Balancing:web03.hb2
Load-Balancing:web03.hb2
Load-Balancing:web03.hb2
Server:nginx
Transfer-Encoding:chunked
Vary:Accept-Encoding

  

PV: page view,页面访问量,即页面浏览量或点击量,用户每次刷新即被计算一次。

UV:Unique Visitor,独立访客量,统计1天内访问某站点的用户数(以cookie为依据)。

TPS(Transactions Per Second):每秒事务数。

QPS(Query Per Second):每秒请求数,QPS其实是衡量吞吐量的一个常用指标,就是说服务器在一秒的时间内处理了多少个请求。即,每秒PV数。

峰值QPS

  • 原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
  • 公式:( 总PV数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(QPS)

并发数:并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。

吐吞量:吞吐量是指系统在单位时间内处理请求的数量

响应时间(RT):响应时间是指系统对请求作出响应的时间,一般取平均响应时间

QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常用量化指标,另外还有HPS(每秒HTTP请求数)。

QPS(TPS)、并发数、响应时间它们三者之间的关系是:

  • QPS(TPS)= 并发数 / 平均响应时间
  • 并发数 = QPS * 平均响应时间

active connections:活动连接数。

举例说明:

例1:

  假设1秒钟100个请求,处理每个请求需要花2秒,

  那么  50(每秒可以处理50个请求,即QPS使50) = 100(每秒并发数) /  2 (每个请求的平均处理时间) ,

  这是一台机器的QPS,如有每秒并发数为1000,那么就需要10台这样的机器才扛得住:

例2:

  每天200万PV,那么它的QPS = (2000000 * 0.8)/ (24*60*60*0.2)≈ 93

  假设按照上面那样一台机器的QPS是50,那么抗住每天200万PV的访问量需要2台这样的机器

 

协议查看或分析的工具:

命令行的工具:tcpdump,tshark

图形界面的工具:wireshark

 

posted on 2019-02-26 22:04  myworldworld  阅读(124)  评论(0)    收藏  举报

导航