HTTP | 青训营

120 阅读5分钟

2 协议分析

2.1 请求方法

  • GET:一般用于获取资源数据,如获取用户信息、商品信息、首页数据等。
  • POST:一般用于传输/提交资源数据,如提交表单数据、提交字节数据等。
  • HEAD:向服务器发送类似于GET方式的请求,但只要求返回头信息,不返回主体数据。
  • PUT:一般用于修改数据,向指定路径上的资源提交最新数据并将其全量替换。

2.2 请求状态码

  • 1xx/(Informational):信息性状态码,代表请求被成功接受,正在处理请求。
  • 2xx/(Success):成功状态码,客户端的请求被成功处理并返回。
  • 3xx/(Redirection):重定向状态码,请求的资源位置发生变动,需重新请求。
  • 4xx/(ClientError):客户端错误状态码,客户端请求出现错误导致请求失败。
  • 5xx/(ServerError):服务端错误状态码,请求的服务端内部错误导致请求无法处理。

2.3 常用请求头

  • Accept:代表客户端支持的数据类型,可选项如下:

    • 文本类型:

      • text/html:希望服务器返回HTML类型的数据。
      • text/plain:希望服务器返回普通文本类型的数据。
      • text/css:希望服务器返回CSS类型的数据。
      • application/xml:希望服务器返回XML类型的数据。
      • application/json:希望服务器返回JSON类型的数据。
    • 图片类型:

      • iamge/jpeg:表示希望返回.jpg格式的图片。
      • image/gif:表示希望返回.gif格式的图片。
      • image/png:表示希望返回.png格式的图片。
      • image/webp:表示希望返回.webp格式的图片。
    • 视频类型:

      • video/mpeg:希望服务器返回视频数据。
      • video/quicktime:希望服务器返回MAC电脑的视频类型数据。
    • 字节类型:

      • application/octet-stream:希望返回字节流数据。
      • application/zip:希望返回ZIP压缩字节数据。
    • */*:表示接受所有类型的数据返回。

    • Accept字段可设置多个值,服务器会依次进行匹配,会返回最先匹配到的数据类型。

    • 也可以通过参数q来设置权重,权重越高,优先级越高,取值范围0.000~1,默认为1

    • 例如text/html,application/xml;q=0.9,*/*,优先匹配HTML数据,当服务器先匹配到XML数据时,因HTML权重高一些,因此会依然继续匹配HTML数据。

  • Accept-Charset:表示客户端支持的字符集,如GB2312,ISO-8859-1,UTF-8等。

  • Accept-Encoding:表示客户端支持的内容编码格式,常用格式如下:

    • gzip:由gzip压缩算法生成的压缩数据编码格式。
    • compress:由compress压缩算法生成的压缩数据编码格式。
    • deflate:由zlib+deflate压缩算法生成的压缩数据编码格式。
    • identity:默认的编码格式,表示不压缩数据。
  • Accept-Language:表示客户端支持的语言语种,如zh-cn,en,zh等。

  • Authorization:表示客户端的认证信息。

  • Host:表示客户端访问的目标资源所在的主机,即域名,如www.baidu.com

  • Referer:资源引用链,也称为防盗链,表示获取资源的请求来自哪个页面。

  • If-Match:实体标记,该值与请求的目标资源ETag值一致时,服务器才受理该请求。

  • If-Modified-Since:效验客户端本地资源的时效性,如果本地的缓存资源没有超时则不处理请求。

  • If-None-Match:和If-Match作用相反,该值与ETag值不一致时才处理请求。

  • If-RangeIf-Match的升级版,访问的资源ETag值或时间一致时,服务器处理此请求。

  • If-Unmodified-SinceIf-None-Match的升级版,与If-Range作用相反。

  • Max-Forwards:最大传输逐跳数,也就是请求允许被转发的最大次数,转发一次就-1

  • Proxy-Authorization:客户端提供给代理服务器的认证信息。

  • Range:表示获取部分资源,如Range:bytes=50-800,代表获取第50~800字节之间的数据。

  • User-Agent:客户端程序的信息,一般情况为当前浏览器的简略信息。

  • TE:传输编码的优先级。

2.4 常用响应头

  • Accept-Ranges:表示服务器是否接受按字节范围获取数据的请求。

  • Age:表示服务器创建响应资源的时间。

  • ETag:实体的标识,资源的匹配信息。

  • Location:告诉客户端资源的重定向位置/(URL)路径。

  • Proxy-Authenticate:将代理服务器需要的认证信息返回给客户端。

  • Retry-After:请求失败后,告诉客户端多久后重试。

  • Server:告知客户端目前服务端的HTTP服务器信息,一般为Nginx

  • WWW-Authenticate:客户端请求资源失败时,告知其目标资源所需的认证方案,如Basic、Digest,一般配合401使用。

  • status:客户端请求后的响应状态。

  • Vary:代理服务器的缓存管理信息。

  • Set-Cookie:一般用于应答报文中,实现服务器给客户端传递Cookie信息,常用属性如下:

    • Key=Value:往客户端的Cookie中写入值。

    • expires=N:设置客户端Cookie的有效期。

    • domin:指定Cookie生效的域名,只有请求该域名时才会携带Cookie

    • path:指定Cookie生效的具体资源路径,只有访问该路径时才会携带。

    • Secure:设置该属性后,只有安全连接(HTTPS)情况下才会保存Cookie

    • SameSite:在跨域时是否携带Cookie

      • Strict:跨域时严禁携带本站Cookie
      • Lax:默认值,通过GET方式访问之后可允许携带。
      • None:在设置了Secure属性情况下,所有请求都允许携带。
    • HttpOnly:使Cookie不能被JS脚本访问。

3 应用场景分析

3.1 静态资源部署,

  • 使用CDN(Content Delivery Network)

  • 文件名使用文件名哈希,如果文件发生修改,文件名会改变,则用户就能请求最新的资源。

3.2 登录

  • 表单登录、扫码登录

  • SSO (单点登录 single sign on)

  • 跨域

image.png

  • 鉴权:session+cookie、token