成为一个合格的前端工程师 - HTTP - 3

http 第五章

个人感觉这章说了很多废话

服务器都做了啥

大多数服务器都做了啥

  1. 建立连接
  2. 接受请求
  3. 处理请求
  4. 访问资源
  5. 构建响应
  6. 发送响应
  7. 记录日志

处理新连接

服务端当接受到TCP新建连接请求的时候,会通过IP地址去判断时候为为其不想接受的地址,如果是就不接受。但是接受服务器就会把连接添加到WEB服务器连接列表中。

客户端主机名识别

占坑

ident 协议

占坑

接受报文

  1. 解析请求行
    请求行的分隔符是空格,解析结束符号 CRLF。
  2. 读取以CRLF为分隔的报文首部,两个CRLF标志全部请求首部的结束
  3. 以 Content-Length 为长度标志的请求体

注 :有时一个TCP包不够存放一个HTTP请求,这是会现将不完整的TCP包放在内存中等待下一个报文,解析完后把个个信息放在内存中。

处理请求的模式

  1. 单线程服务器
  2. 多线程服务器
  3. 复用 I/O 服务器
  4. 复用 I/O 加多线程

注: 下面这条全属胡扯
单线程与复用I/O的区别是 单线程服务器一次只会开一个线程去处理请求,我们知道只有一个请求一次只能做一件事情,那么当服务器在处理请求的任何时候,对其他请求就像是不可见的都是没有的。复用式 I/O 服务器就开能够去同时监听多个已连接的请求,看其是否有变化,有的处理并关闭监听,处理完回到监听状态。

docroot

web 服务器支持各种不同类型的资源映射。最简单的就是 base + uri 的方式。意思就是:服务器设置 base 目录,在加上http请求中的的URI 。
例如:base 设置为 /usr/local/http/ , 客户端发来的 url 为 http://www.ahole.cn/I-love-u 那么计算完就是 /usr/local/http/I-love-u;
有一点需要注意的事,web服务器为了安全除设置的 base 目录以外的文件对外是不可见的,也就是客户端不能访问 /usr/local/http 外的文件。比如 发 ../xxx 不会访问 /usr/local/xxx 的文件。

目录列表

当服务器以上面的方式拼接起来是一个目录的时候,web 服务器会有多种解决方式,1.返回错误、2.扫描目录,返回像 index.html index.htm home.html 这样的页面、3. 返回一个索引页面,供用户选择(比较危险)

动态内容资源映射

我们知道我们的 web 存在动态内容。那么什么时候执行动态内容,什么时候作为静态内容直接返回呢。这些在每个服务器上都有不同,Apache 的机制是在配置文件中设置,URI 为某些特殊字符开头的就去跑动态内容。当然还有些就是都写特殊后缀去跑动态机制,比如 .php

构建响应

服务器构建响应有两个通用的过程。1、书写content-type 2、Content-Length 首部。 书中写的很初略

重定向

重定向的可能情况:

  • 永久删除资源
  • 临时删除资源
  • URL 增强
  • 负载均衡
  • 服务器关联
  • 规范目录名称

负载均衡: 当其中一个服务器超载时,重定向到另一个服务器,就位负载均衡。
服务器关联: 重定向到一个资源更相近的服务器上

你可能感兴趣的:(成为一个合格的前端工程师 - HTTP - 3)