Skip to main content

计算机网络

  • 分层结构
  • TCP/UDP
    • 区别
    • TCP 三次握手,四次挥手
  • HTTP/HTTPS
    • 区别
    • 无状态
    • 长链接、短链接
  • 状态码
  • Cookie 和 Session
  • URI 和 URL

问题

http 服务中静态文件的 Last-Modified 是根据什么生成的

一般会选文件的 mtime,表示文件内容的修改时间

nginx 也是这样处理的,源码见: ngx_http_static_module.c(opens new window)

r->headers_out.status = NGX_HTTP_OK;
r->headers_out.content_length_n = of.size;
r->headers_out.last_modified_time = of.mtime;

文件系统中 mtime、ctime 和 atime 指什么,都有什么不同

在 linux 中,

  • mtime:modified time 指文件内容改变的时间戳
  • ctime:change time 指文件属性改变的时间戳,属性包括 mtime。而在 windows 上,它表示的是 creation time

所以 ctime 会比 mtime 要大一些,使用 stat 查看文件属性如下

$ stat hello.txt
File: ‘hello.txt’
Size: 30 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 917526 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-12-10 16:15:55.253325208 +0800
Modify: 2019-12-10 16:15:52.740653330 +0800
Change: 2019-12-10 16:15:52.742653069 +0800
Birth: -

而 http 服务选择 Last_Modified 时一般会选择 mtime

http 响应头中 content-type 为 application/octet-stream,代表什么

代表二进制流,一般用以下载文件

http 响应头中 Date 与 Last-Modified 有什么不同,网站部署时需要注意什么

  • Date: 报文在源服务器的产生时间,由此可查看报文已缓存了多久时间
  • Last-Modified: 源服务器上资源的上次修改时间

LM-Factor 与它俩有关。

简而言之,一个静态资源没有设置 Cache-Control 时会以这两个响应头来设置强制缓存时间:(Date - LastModified) * n,而非直接进行协商缓存。在涉及到 CDN 时,表现更为明显,体现在更新代码部署后,界面没有更新。

什么情况下会发送 OPTIONS 请求

当一个请求跨域且不是简单请求时就会发送 OPTIONS 请求

满足以下条件就是一个简单请求:

Method: 请求的方法是 GET、POST 及 HEAD Header: 请求头是 Content-Type、Accept-Language、Content-Language 等 Content-Type: 请求类型是 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 而在项目中常见的 Content-Type: application/jsonAuthorization: <token> 为典型的非简单请求,在发送请求时往往会带上 Options

更详细内容请参考 CORS - MDN