整个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 记录日志
这个好像没什么好说的~!~...