http 头

  • If-Modified-Since:请求头中可以指定资源修改时间,服务器判断如果没有更改则返回 304 状态,并且不携带消息体,更改了则返回 200 携带上最新的资源。常用于缓存控制。
  • Retry-After:响应头中可以指示客户端在多久后再次尝试请求。通常和 503(Service Unavailable) 或者 429(Too Many Requests) 一起使用,但也可以与其他一些表示暂时性失败的状态码配合使用。这个头部字段可以帮助服务器进行流控,尤其在高负载或者服务器维护期间。
  • Via:报文经过代理或者网关的时候,会先在首部字段 Via 中附加该服务器的信息,然后再进行转发。这个做法和 traceroute 以及电子邮件的 Received 首部的工作机制类似。首部 Via 不仅可以用于追踪报文的转发,还可以避免请求回环的发生,所以在经过代理的时候必须附加该首部。经常和 TRACE 方法一起使用,用于追踪报文的转发路径。

持久连接

HTTP keep-alive 带来的一个好处是可以进行管线化(pipelining)发送请求 —— 不用等待响应就可以直接发送下一个请求,可以做到同时并行发送多个请求。

内容协商

客户端和服务器就响应的资源内容进行交涉,然后提供给客户端最适合的资源。内容协商会以响应资源的语言、字符集、编码等方式作为判断的基准。包含在请求头中的下列字段可以作为判断标准:Accept, Accept-Charset, Accept-Encoding, Accept-Language, Content-Language。

虚拟主机

同一台服务器上可以运行多个网站(域名),例如 NGINX 可以配置多个 vhost。浏览器在访问网站的时候已经是 IP 了,换而言之 a.com 和 b.com 都在 1.2.3.4 这个地址上,浏览器请求的时候怎么知道访问的是哪个网站呢?这个时候就需要靠请求头中的 Host 字段了。请求头中的 Host 字段必须存在

网关和代理的区别

代理通常只负责转发请求,不转换协议,通常用于访问控制、缓存加速、匿名访问等,典型代表室 NGINX 反向代理,shadowsocks;网关支持不同协议之间的转换(http -> grpc),常用于系统间集成、api 聚合、协议适配,典型应用有 API 网关、支付网关。

利用网关可以提高通信安全性,可以在客户端和网关之间的通信链路上加密以确保连接的安全。

Cookie

Secure 表示仅在 https 协议下传输,HttpOnly 表示不能通过 JavaScript 访问(主要目的是为了防止 XSS 攻击)。