linux学习42-HTTP服务和APACHE

HTTP服务和APACHE

1. 跨Internet的主机间通讯

要通过Internet进行通信,至少需要一对套接字;其中一个运行在客户端,定义了一个唯一的客户进程,称之为ClientSocket,另一个运行于服务器端面,定义了一个唯一的服务器进程,称为ServerSocket。根据连接启动的方式以及本地要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听、客户端请求、连接确认

  • Socket套接字

    1. 套接(Socket)字作用
      进程间通信(IPC)的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换

      进程间通信(IPC,Inter-Process Communication)指至少两个进程或线程间传送数据或信号的一些技术或方法

    2. Socket组成
      IP地址和端口号,合称为套接字地址(socket address)

    3. 开发程序时如何实现Socket通讯
      调用Socket API(封装了内核中所提供的socket通信相关的系统调用),需要指定两项内容

      1. Socket Domain:根据其所使用的地址
        1. AF_INET:Address Family,IPv4 <==常用
        2. AF_INET6:IPv6
        3. AF_UNIX:UNIX文件,同一主机上不同进程之间通信时使用,不需要封装解封装,通过此文件通讯
      2. Socket Type:根据使用的传输层协议
        1. SOCK_STREAM:流,tcp套接字,可靠地传递、面向连接 <==常用
        2. SOCK_DGRAM:数据报,udp套接字,不可靠地传递、无连接
        3. SOCK_RAW:裸套接字,无须tcp或udp,APP直接通过IP包通信

          #API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节

    4. 应用程序通讯过程
      开发一个可以和网络通讯的应用程序,客户端和服务端相互通讯,需要调用Socket相关的一些函数
      在这里插入图片描述

    5. 通讯过程

      1. 服务器端先创建一个ServerSocket,绑定用到的协议,ip地址,端口(低于1023的端口只有管理员可用)
      2. 绑定成功后服务器端不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态(监听)
      3. 在客户端,需要连接服务器也需要创建Socket(ClientSocket不需要绑定地址和端口),需要指出服务器端套接字的地址和端口号,创建成功后发起连接请求
      4. 服务器监听到请求,创建新的套接字描述符,用accept函数接收请求
      5. 连接成功后,便可以相互发送数据
    6. 套接字相关的系统调用:

    函数 描述
    socket() 创建一个套接字
    bind() 绑定IP和端口
    listen() 监听
    accept() 接收请求
    connect() 请求连接建立
    write() 发送
    read() 接收
    close() 关闭连接

2 HTTP服务基础理论

  • HTTP相关术语

    1. http(Hyper Text Transfer Protocol, 80/tcp)
      超文本的传输协议

      超文本是由信息结点和表示信息结点间相关性的链构成的一个具有一定逻辑结构和语义的网络,可以使单一的信息之间相互交叉“引用”

    2. html(Hyper Text Markup Language )
      http协议传输使用的文件大部分为html(也可以封装传输其他类型文件),使用超文本标记语言,编程语言编写,
      示例:超文本标记语言
      <html>
      <head>
      <title>html语言
      </title>
      </head>
      <body>
      <img src="http://www.alidns.com/static/img/logo.png" >
      <h1>标题1</h1>
      <p><a href=http://www.alidns.com/>linux</a>welcome</p>
      </body>
      </html>
      
      超文本(index.html)显示效果
      在这里插入图片描述
      普通文本显示效果
      在这里插入图片描述
    3. CSS (Cascading Style Sheet )
      层叠样式表:控制网页样式并允许将样式信息与网页内容分离的一种标记性语言,相当于定义一个标准,可以应用于其他页面,不需要每个页面重复编制
    4. js javascript(与java没有关系)
      JavaScript:一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型,在网页上使用时,用来给HTML网页增加动态功能。
    5. MIME(Multipurpose Internet Mail Extensions)
      多用途互联网邮件扩展 :服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件
      MIME支持传输的类别:/etc/mime.types
      参考站点:http://www.w3school.com.cn/media/media_mimeref.asp
  • HTTP协议历史
    HTTP 协议不带有状态(记不住访问者是谁),每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度

    1. http/0.9:1991,原型版本
      功能简陋,只有一个命令GET。GET /index.html ,服务器只能回应HTML格式字符串,不能回应别的格式

    2. http/1.0:1996年5月

      1. 支持缓存(cache)

      2. 开始执行MIME,

      3. 引入更多method

        1. GET
          请求服务器发送某个资源
        2. POST
          起初是用来向服务器写入数据的;实际上,通常会用它来支持HTML的表单。表单中填好的数据通常会被发送给服务器,然后服务器将其发送到他要去的地方
        3. HEAD
          请求服务器发送某个资源,服务器在响应中只返回首部,不会反回实体的主体部分
      4. 头信息是 ASCII 码,后面数据可为任何格式,服务器回应时会告诉客户端,数据是什么格式,即Content-Type字段的作用。

      5. 缺点
        每个TCP连接只能发送一个请求,发送数据完毕,连接就关闭,如果还要请求其他资源,就必须再新建一个连接

    3. http/1.1:1997年1月

      1. 引入了持久连接(persistent connection),
        即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。对于同一个域名,大多数浏览器允许同时建立6个持久连接
      2. 引入了管道机制(pipelining),
        即在同一个TCP连接里,客户端可以同时发送多个请求,进一步改进了HTTP协议的效率
      3. 新增方法(method)
        1. PUT
          从客户端发送数据取代指定的文档内容
        2. TRACE
          用于诊断请求报文在发送给最终目标服务器时,中间HTTP程序组是否以及如何被损坏或者修改过
        3. OPTIONS
          可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法
        4. DELETE
          请服务器删除请求URL所指定的资源
      4. 缺点
        同一个TCP连接里,所有的数据通信是按次序进行的。服务器只能顺序处理回应,前面的回应慢,会有许多请求排队,造成"队头堵塞"(Head-of-line blocking)
        为避免上述问题,两种方法
        1. 减少请求数
        2. 同时多开持久连接
          网页优化技巧,如合并脚本和样式表、将图片嵌入CSS代码、域名分片(domain sharding)等
    4. Spdy:2009年
      谷歌研发,解决 HTTP/1.1 效率不高问题

    5. http/2.0:2015年

      1. 头信息和数据体都是二进制,称为头信息帧和数据帧
      2. 复用TCP连接
        在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了“队头堵塞“,此双向的实时通信称为多工(Multiplexing)
      3. 引入头信息压缩机制(header compression),
        头信息使用gzip或compress压缩后再发送;客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,不发送同样字段,只发送索引号,提高速度
      4. 服务器推送(server push)
        HTTP/2 允许服务器未经请求,主动向客户端发送资源
        HTTP工作机制
  • 工作机制
    一次HTTP操作称为一个事务,其工作过程可分为四步

    1. 首先客户机与服务器需要建立连接
    2. 客户机发送一个请求给服务器(http request)
      请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容
    3. 服务器响应请求(http response)
      服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容
    4. 断开连接
      客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接
  • Web资源:web resource
    一个网页由多个资源构成,打开一个页面,会有多个资源展示出来,但是每个资源都要单独请求。因此,一个“Web 页面”通常并不是单个资源,而是一组资源的集合

    1. 静态文件:无需服务端做出额外处理
      文件后缀:.jpg, .html, .txt, .js, .css, .mp3, .avi
    2. 动态文件:服务端执行程序,返回执行的结果
      文件后缀:.asp, .php, .jsp
  • HTTP连接方式

    1. 串行连接
      访问网站时,页面文件可能包含诸多资源,需要将资源从服务器上下载下来,串行连接方式为,每个资源都要经过连接请求(三次握手),下载完成后才能开始下一个连接请求,再次(三次握手)
    2. 并行连接
      同时发起多次请求,服务器端口是固定不变的,客户端要同时打开多个端口分别发起连接请求,服务器同时回应
    3. 持久连接(keep-alive)
      也叫长连接,重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接;只建立一次连接请求(三次握手),得到第一个资源后,TCP连接不会断开,可以继续发送获取数据请求而不需要经过三次握手,直到将所有资源下载下来,属于是串行传输
    4. 管道化持久连接
      通过共享TCP连接发起并发的HTTP请求
      在持久连接的基础上,在第一条请求发出后,不需要等待服务器回应,可以继续发送第二条请求、第三条请求,使多条请求处于列队状态,
  • URI(Uniform Resource Identifier)
    统一资源标识,分为URL和URN,URN使用的较少,所以很多时候说URI就是在说URL

    1. URN(Uniform Resource Naming)
      统一资源命名,典型的就是P2P下载使用的磁力链接,将需求资源标识为名字,而不是指向一个地址,通过搜索资源名,在互联网上找那些主机上有此资源,然后发起并行连接,连接到所有有资源的主机上,进行下载
    2. URL(Uniform Resorce Locator)
      1. 概念
        统一资源定位符,用于描述某服务器某特定资源位置
      2. URL组成
        <scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>
        
        1. schame
          方案,访问服务器以获取资源时要使用哪种协议(例如http、ftp、rtsp等),指定资源的主要标识符,负责告诉负责解析URL的应用程序应该使用什么协议;
          由一个字母符号开始,由第一个[ : ]将其与URL的其余部分分隔开,方案名不区分大小写
        2. user
          用户,某些方案访问资源时需要的用户名
        3. password
          密码,用户对应的密码,中间用:分隔
        4. Host
          主机,资源宿主服务器的主机名或IP地址或FQDN
        5. port
          端口,资源宿主服务器正在监听的端口号,很多方案有默认端口号
        6. path
          路径,服务器资源的本地名,由一个/将其与前面的URL组件分隔,称为短URL
        7. params
          参数,指定输入的参数,参数为名/值对,多个参数,用[ ; ]分隔
        8. query
          查询,传递参数给程序,如数据库,用[?]分隔,多个查询用[ & ]分隔
        9. frag
          片段,一小片或一部分资源的名字,此组件在客户端使用,用[ # ]分隔
      3. 示例
        query查询
        https://list.jd.com/list.html?cat=670,671,672&ev=149_2992&sort=sort_totalsales15_desc&trans=1
        
        片段
        http://apache.org/index.html#projects-list
    3. 两者区别
      URN如同一个人的名称,而URL代表一个人的住址。换言之,URN定义某事物的身份,而URL提供查找该事物的方法。URN仅用于命名,而不指定地址
  • 网站访问量

    1. IP(独立IP)
      即Internet Protocol,指独立IP数。一天内来自相同客户机IP地址只计算一次,记录远程客户机IP地址的计算机访问网站的次数,是衡量网站流量的重要指标
    2. PV(访问量)
      即Page View, 页面浏览量或点击量,用户每次刷新即被计算一次,PV反映的是浏览某网站的页面数,PV与来访者的数量成正比,PV并不是页面的来访者数量,而是网站被访问的页面数量
    3. UV(独立访客)
      即Unique Visitor,访问网站的一台电脑为一个访客。一天内相同的客户端只被计算一次。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的
      网站统计:http://www.alexa.cn/rank/
    4. QPS(request per second,每秒请求数)
      QPS= PV* 页面衍生连接次数/ 统计时间(86400)
      页面衍生连接数:一个页面的资源数
    5. 并发连接数
      并发连接数 =QPS * http平均响应时间
    6. 峰值时间
      每天80%的访问集中在20%的时间里,这20%时间为峰值时间
      峰值时间每秒请求数(QPS)=( 总PV数 *页⾯衍⽣连接次数)*80% ) / ( 每天秒数 * 20% )
    7. 网站访问统计示例
      甲乙丙三人在同一台通过ADSL上网的电脑上(中间没有断网),分别访问www.magedu.com网站,并且每人各浏览了2个页面,那么网站的流量统计是:
      IP: 1 PV:6 UV:1
      若三人都是ADSL重新拨号后,各浏览了2个页面,则
      IP: 3 PV:6 UV:1

3. Web服务请求处理步骤

  • 处理步骤
    在这里插入图片描述

    1. DNS解析
      1. 客户端发出访问www.taobao.com请求,先从本地host文件解析,不能解析,交给本机DNS缓存
      2. 本机没有解析记录的话,发送给本地解析服务器,本地DNS服务器查询缓存,是否有记录可以回应
      3. 本地DNS服务器缓存没有记录,发往DNS根服务器开始寻址,根服务器返回一级域名.com
      4. 本地DNS服务器拿到一级域名后,访问一级域DNS服务器,返回二级域名taobao.com
      5. 本地DNS服务器访问二级域名,得到IP地址www.taobao.com,本地DNS服务器将全称域名缓存至本地,然后发送给客户
    2. 建立连接
      1. 用户向淘宝发送一个数据包SYN=1,seq=x
      2. 如果淘宝可以收到,则发送SYN=1,ACK=1,seq=y,ack=x+1
      3. 客户收到淘宝的回应包,再发送ACK=1,seq=x+1,ack=y+1,淘宝收到后,则建立成功
    3. web服务请求回应
      1. 建立连接
        客服向服务器发起请求,此请求包括一些数据报文的头部,包括(method:GET、POST/PUT/HEAD/DELECT等)

      2. 接收请求(可能会拒绝)
        接收客户端请求报文中对某资源的一次请求的过程

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

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

      5. 构建响应报文
        一旦Web服务器识别出了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中 包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体

      6. 发送响应报文
        Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束了

      7. 记录日志
        最后,当事务结束时,Web服务器会在日志文件中添加一个条目,来描述已执行的事务

  • 元数据:请求报文首部

    	1. 请求行:  <method> <URL> <VERSION>    示例:GET /search?hl=zh-CN&source=
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值