# HTTP 简介

# 概念

http 是一种无状态的协议,只有请求才会响应,然后断开,也没有记忆。 互联网中的设备要完成通信必须基于双方都能识别的规则,如通信的语音,格式,硬件和操作系统等等,这些规则的集合统称为 TCP/IP 协议族。

  • URL(Uniform Resource Locator,统一资源定位符)是 URI(统一资源标识符)的子集,URI 可以标识网络中的任意资源,有了 URI 才能在海量的网络资源中找到我们需要的那部分。

  • DNS(Domain Name System, 域名系统),因为 IP 地址的记忆实在是反人类,而域名机器识别不了,所以有了 DNS 将二者自由转换。

  • ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就,可以反查出对应的 MAC 地址。除了路由器外,信息要到达目标服务器地址可能还要经过代理服务器,网关等设备

# HTTP 报文详解

用于 HTTP 协议交互的信息被称为 HTTP 报文。

# Cache-Control: 操作缓存的指令。主要有以下几种用法

Cache-Control: no-cache 表示客户端不接受缓存的响应,必须请求最新的资源。 Cache-Control: no-store 表示客户端不能缓存请求或者响应的任意一部分。 Cache-Control: max-age=604800(单位 :秒) max-age 数值代表资源保存为缓存的最长时间。当指定 max-age 值为 0 或者缓存超过最大时间,那么缓存服务器通常需要将请求转发给 源服务器。


# Connection: 由于 HTTP1.1 后,客户端和服务端建立连接后可以多次通信,连接的是否中断可以依靠以下指令控制。

Connection: close 表示想断开当前连接。 Connection: Keep-Alive 表示想保持当前连接。


# Date: 表明创建 HTTP 报文的日期和时间


# Upgrade: 用于检测 HTTP 协议及其他协议是否可使用更高 的版本进行通信,其参数值可以用来指定一个完全不同的通信协议。

比如Upgrade: websocket


# Via: 为了追踪客户端与服务器之间的请求和响应报文的传输路径。之前说过,一个请求的过程除了经过路由器外,还可能经过代理,网关等设备,这些设备的路径将被记录。


# Warning: 一些警告信息。


# Accept: 用户代理能够处理的媒体类型和优先级。

Accept: text/html,image/jpeg 客户端可以处理的媒体类型,包括文本和 jpeg 格式的图片


# Accept-Charset: 用户代理支持的字符集 及字符集的相对优先顺序。

Accept-Charset: iso-8859-5, unicode-1-1;q=0.8 权重 q 值来表示相对优先级。


# Accept-Encoding: 用户代理支持的内容编码及内容编码的优先级顺序。

Accept-Encoding: gzip, deflate,compress


# Accept-Language: 用户代理能够处理的自然语言集(指中文或英文等)及优先级。

Accept-Language: zh-cn


# Authorization: 用户代理的认证信息。


# Host: 请求的资源所处的互联网主机名和端口号。


# Range: Range: bytes=5001-10000 请求获取从第 5001 字节至第 10000 字节的资源


# Referer: 请求的 URI 是哪个页面发起的。

Referer: http://www.xxx.com/index.html


# User-Agent: 创建请求的浏览器或用户代理名称等信息


# Age: 源服务器在多久前创建了响应。字段值的单位为秒。 Age: 600


# Expires: 资源失效的日期。


# Last-Modified: 说明资源最终修改的时间。


# Allow: 支持 Request-URI 指定资源的所有 HTTP 方法。Allow: GET, HEAD


# Content-Type: 实体主体内对象的媒体类型。

Content-Type: text/html; charset=UTF-8


# Content-Encoding: 服务器对实体的主体部分选用的内容编码方式。

Content-Encoding: gzip


# Content-Language: 实体主体使用的自然语言(指中文或英文等语言)


# Content-Length: 表明了实体主体部分的大小(单位是字节)

Content-Length: 15000 当我们获取下载进度信息时,常常使用使用这个信息。


和 cookie 相关的信息。

cookie相关的信息

安全相关的 2 个属性 安全相关的2个属性


Cookie: status=enable HTTP 是无状态的,其状态管理要依赖于 Cookie。


# 状态码

状态码

HTTP 的状态码表示 HTTP 请求的结果,它是一个三位数字,首位可能是 1、2、3、4、5。

  • 首位是 1 表示中间状态,请求已被接收,需要继续处理。按照规范 POST 请求会先提交 HEAD 信息,如果服务器返回 100,才将数据信息提交。

  • 首位是 2 表示请求结束,最常用的就是 200,表示正常返回。

  • 首位是 3 表示被请求的资源被重定向,最常用的是 301、302、304。

    • 301 表示资源已经被永久移动到新的位置;
    • 302 表示资源被暂时移动到新的位置;
    • 304 表示资源被缓存,这是浏览器的缓存策略。
  • 首位是 4 表示客户端请求错误,最常用的是 400、403、404。

    • 400 是服务器无法理解和处理该请求;
    • 403 表示服务器理解请求,但客户端不具有获取该请求的权限,因此服务器拒绝响应;
    • 404 表示请求的资源不存在。
  • 首位是 5 表示服务器自身存在问题,导致不能响应请求,常见的有 500、502、504。

    • 500 一般表示服务器当前状态异常;
    • 502 表示作为网关的服务器无法从上游获取到有效数据;
    • 504 表示请求的数据超时。

# 基础概念,是什么,为什么会流行,什么是请求方法,状态码都有哪些含义 优缺点

# 安全相关

# HTTP2 和 HTTP3

# nginx 和 openresty

# WAF

# CDN

# websocket

# HTTP 性能优化