学习笔记 HTTP权威指南 第5章 Web服务器

133 阅读4分钟

整个Web结构由很多个部分组成,这一章主要介绍其中一个组成部分,Web服务器,介绍什么是Web服务器,以及它如何为客户端提供资源

5.1 各种形式的Web服务器

Web服务器是一种设备或应用程序.用来处理请求,提供资源响应.

Web服务器有如下几种:

  • 通用软件: 自己下载安装配置,如Apache,IIS等
  • 服务器设备: 厂商把软件硬件给你配好直用.
  • 嵌入式服务器: 功能很少嵌入小型设备的服务器,如路由和打印机上的网页功能

书上对每一种类型都有简单的介绍,感觉有点过时且对前端开发没有实际生产价值,所以就不做笔记了

5.2 Perl Web 服务器

书上介绍说这是一个只有30行的Web服务器,主要用于网络诊断用.但是简单百度了一下,都是Perl编程语言,没有服务器这个东西. 且生产中感觉没有接触到说是要自己诊断网络流量的场景,所以也不做笔记了

5.3 Web服务器做些什么工作

5.3.1 建立连接

  • 处理的4个步骤

    • 从TCP中提取IP信息
    • 与此IP建立链接
    • 将这个链接放入一个连接列表中
    • 监视这个列表连接上的数据流动
  • 为什么可以随时关闭连接

    • 发现这个IP没经过认证
    • 这个IP是黑名单里面的
    • 其他认证措施
  • 什么是反向DNS

    • 在Web服务器上通过IP地址解析客户端的主机名
  • 反向DNS的问题

    • 解析主机可能会消耗很长时间
    • 影响事务进度
  • 什么是ident协议

    • 通过向客户端发起一个113请求查询客户端主机名
  • ident的问题

    • 由于各种原因,没有被应用起来,具体原因见P123
  • 为什么要用反向DNS和ident协议

    • 在记录日志时,可以记录客户端主机名,让记录更详细

5.3.2 接收请求

  • 解析请求报文的步骤

    • 以空格和CRLF为标志读取请求行
    • 以CRLF为标志读取请求首部
    • 以空行为标志,检测首部结束
    • 读取请求主体
  • 什么时候完成解析

    • 收到请求后会放在内存里面
    • 直到收到足够数据并完全理解报文的意义为止
  • 报文解析后以什么格式存放在内存中

    • 有一个专门的数据结构,具体的参考P124
  • 为什么要以单独的结构存放报文

    • 可以加快查询首部字段的时间
  • 连接的4种输入/输出处理结构

    • 单线程
    • 多线程
    • 单线程复用
    • 多线程复用

5.3.3 处理请求

这个书上没说...或许建立连接后的所有操作都叫处理请求吧.那就不应该分这样一个步骤出来呀~~~

5.3.4 映射/访问资源

  • 映射什么资源

    • 静态文件
    • 动态生成的内容
  • 什么是文档根目录

    • document root,用于存放web资源的目录
  • 如何映射静态资源

    • 解析请求的资源路径
    • 找出文档根目录
    • 将两者组合在一起
  • 映射静态资源的注意事项

    • 防止../等相对路径,访问到其他目录去了
  • 什么是虚拟托管的docroot

    • 就是不同的host,对应不同的文档根目录
    • 实际一台电脑多个Web服务器的功能
    • 即虚拟主机
  • 什么是私有docroot

    • 这玩意儿没看懂,只是public_html在php里面见过
  • 如何响应目录请求

    • 访问目录下默认的文件,如index.html
    • 返回错误
    • 返回整个目录结构
  • 如何映射动态资源

    • 通过应用程序服务器
    • 将请求映射到后端服务器获取动态生成的内容
  • 有哪些动态映射程序

    • CGI
    • ASP
    • Java servlet等
  • 什么是服务器端包含项

    • 指明该资源需要通过模板编译后才能发送给客户端
    • 是不是指的theamleaf,handbars这一类的后端渲染模板哟
  • 什么是访问控制

    • 就是在映射资源前,验证客户端是否有权限访问对应资源

5.3.5 构建响应

  • 响应包含哪些东西

    • 响应主体(如果有的话)
    • MIME Type类型
    • 各种重定向
  • 如何确定MIME Type类型

    • 魔法分类
      • 提取文件扩展名
      • 在一个包含所有扩展名的表时查询对应MIME Type
    • 显示分类
      • 不考虑扩展名,直接指定
    • 类型协商
      • 同个文件可以用多种类型表示时
      • 由服务器和客户端协商决定.具体怎么协商就搞球不懂了
  • 哪些情况需要重定向

    • 资源永久迁移
    • 资源临时迁移
    • 生成胖URL
    • 负载均衡
    • 规范目录名称
    • 服务器关联
      • 这个没太懂它的作用

5.3.6 发送响应

发送响应完成之后,对连接的管理..但是书上没讲具体怎么管理

5.3.7 记录日志

这个好像没什么好说的~!~...

TODO

5.3.2 复用IO到底是啥意思,没太明白说上讲的.

5.3.5 胖URL是啥,有什么用