浅谈HTTP服务

Socket套接字

在建立通信连接的每一端,进程间的传输要有两个标志:

  • IP地址和端口号,合称为套接字地址(socket address)
  • 客户机套接字地址定义了一个唯一的客户进程
  • 服务器套接字地址定义了一个唯一的服务器进程
    在这里插入图片描述
    Socket:套接字,进程间通信(IPC)的一种实现,允许位于不同主机(或同一主机)上不同进程之间进行通信和数据交换
  • Socket API:封装了内核中所提供的socket通信相关的系统调用
  • Socket Domain:根据其所使用的地址
    • AF_INET:Address Family,IPv4
    • AF_INET6:IPv6
    • AF_UNIX:同一主机上不同进程之间通信时使用
  • Socket Type:根据使用的传输层协议
    • SOCK_STREAM:流,TCP套接字,可靠地传递、面向连接
    • SOCK_DGRAM:数据报,UDP套接字,不可靠地传递、无连接
    • SOCK_RAW:裸套接字,无须TCP或UDP,应用直接通过IP包通信
  • Socket位于传输层与应用层之间,连接了应用层细节与通信细节,负责用户进程与系统内核的交互

HTTP超文本传输协议

浏览器如何访问网站

在这里插入图片描述

HTTP协议通信过程

  • HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。
  • HTTP是万维网的数据通信的基础设计HTTP最初的目的是为了提供一种远距离共享知识的方式,借助多文档进行关联实现超文本,连成相互参阅的WWW
    在这里插入图片描述

HTTP协议分层

在这里插入图片描述

HTTP相关术语

  • http(hyper text transfer protocol):超文本传输协议,TCP连接端口80

  • html(hyper text markup language):超文本标记语言,一种描述网页结构的编程语言

    • http与html的关系:http协议传输的文本文件依据使用的编程语言,可以分为html, css, javascript文件等
  • MIME(Multipurpose Internet Mail Extensions):多用途互联网邮件拓展,支持在互联网上传输各种格式的文件

    • 在文件/etc/mime.types中详细列举了支持的文件类型
    • 格式:major/minor ,一级类型/二级类型,如:
      text/html, image/jpeg, video/mp4

HTTP协议发展版本差异

  • http/0.9,1991年发布,只有GET命令GET /index.html ,服务器只能回应HTML格式字符
    串,不能回应别的格式

  • http/1.0,1996年5月发布,增加了POST, HEAD命令

    • 支持cache, MIME, method
    • 每个TCP连接只能发送一个请求
    • 头信息是ASCII 码,后面数据可为任何格式
    • Content-Type字段说明数据格式,包含在MIME中
  • http/1.1(目前最普遍),1997年1月发布,新增命令PUT, PATCH, OPTIONS, DELETE

    • 持久连接(persistent connection):TCP连接默认不关闭,可以被多个请求复用
    • 管道机制(pipelining):同一个TCP连接里可以同时发送多个请求
    • 队头堵塞(Head-of-line blocking):服务器顺序处理请求,前方请求回应慢,造成很多请求排队
    • http协议不带状态,连接断开后服务器将失去客户端信息,每次请求需发送相同信息,浪费带宽
      在这里插入图片描述
  • HTTP1.0和1.1的问题

    • HTTP1.x在传输数据时,每次都需要重新建立连接,无疑增加了大量的延迟时间,特别是在移动端更为突出
    • HTTP1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,无法保证数据的安全性
    • HTTP1.x在使用时,header里携带的内容过大,增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端增加用户流量
    • 虽然HTTP1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站),keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间
  • HTTP2.0协议2015年,HTTP2.0是谷歌SPDY的升级版

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

HTTP工作机制

  • 事务:包含http请求和http响应

  • web资源:多个资源组成一个网页

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

    • 并行连接:通过多条TCP连接发起并发的HTTP请求
    • 持久连接:重用TCP连接,以消除连接和关闭的时延,以事务个数和时间来决定是否关闭连接
    • 管道化连接:通过共享TCP连接发起并发的HTTP请求
    • 复用的连接:交替传送请求和响应报文(实验阶段)
  • 传统HTTP连接:串行连接,每个事务都需要建立和断开连接一次
    在这里插入图片描述

  • 并行连接:同时进行多个事务,事务之间并行运行
    在这里插入图片描述

  • 持久连接: 一个连接过程依次完成多个事务,减少了建立和断开连接的时间
    在这里插入图片描述

  • 管道连接: 一个连接过程同时进行多个事务,进一步减少了时间开销
    在这里插入图片描述

URI和URL

  • URI(Uniform Resource Identifier):统一资源标识,分为URN和URL
  • URN(Uniform Resource Naming):统一资源命名,用于给资源定义一个唯一的命名
  • URL(Uniform Resource Locator):统一资源定位,用于描述某服务器某特定资源的位置
  • URL的组成:
    在这里插入图片描述

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

  • scheme:方案,指定连接服务器使用的协议
  • user:用户名
  • password:密码
  • host:服务器的主机名或IP地址
  • port:端口号
  • path:服务器资源本地名
  • params:参数,参数为名/值对,多个参数用";"分隔
  • query:查询,用"?“分隔,多个查询用”&"分隔
  • frag:片段,在客户端使用,用"#"分隔

HTTP 请求访问的完整过程

在这里插入图片描述
1️⃣建立连接:
接收或拒绝连接请求
2️⃣接受请求:
接收客户端请求报文中对某资源的一次请求的过程
在这里插入图片描述
Web访问响应模型(Web I/O)

  • 单进程I/O模型:启动一个进程处理用户请求,而且一次只处理一个,多个请求被串行响应
  • 多进程I/O模型:并行启动多个进程,每个进程响应一个连接请求
  • 复用I/O结构:启动一个进程,同时响应N个连接请求
    • 实现方法:多线程模型和事件驱动
    • 多线程模型:一个进程生成N个线程,每线程响应一个连接请求
    • 事件驱动:一个进程处理N个请求
  • 复用的多进程I/O模型:启动M个进程,每个进程响应N个连接请求,同时接收M*N个请求

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

  • 常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS

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

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

5️⃣构建响应报文:
服务器执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体。

  • 响应报文通常包括:

    • Content-Type:响应首部元素,描述响应主体的MIME类型
    • Content-Length:响应首部元素,描述响应主体的长度
  • 识别MIME类型的策略:

    • 魔法分类:服务器扫描资源的内容,并将其与一个已知模式表(被称为魔法文件)进行匹配
    • 显示分类:强制特定文件或目录内容拥有某个MIME类型
    • 类型协商: 有些Web服务器经过配置,可以以多种文档格式来存储资源。在这种情况下,可以配置Web服务器,使其可以通过与用户的协商来决定使用哪种格式(及相关的MIME类型)“最好”
    • 默认先根据文件的后缀名判断MIME类型,如果没有后缀名再通过魔法分类识别

6️⃣发送响应报文:

  • 非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。
  • 持久连接来说,连接可能仍保持打开状态。

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

8️⃣http服务器应用

  • http服务器程序
    httpd apache
    nginx
    lighttpd
  • 应用程序服务器
    IIS .asp
    tomcat .jsp
    jetty 开源的servlet容器,基于Java的web容器

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值