HTTP 使用指南| 青训营笔记

36 阅读2分钟

HTTP(HyperText Transfer Protocol)是一种应用层协议,基于TCP协议,主要用于在Web上传输超文本数据。它是一种请求-响应协议,并且易于扩展。HTTP协议是无状态的,意味着服务器不会记录客户端的状态。

HTTP1.1协议中定义了七种方法,分别是GET, POST, PUT, DELETE, HEAD, CONNECT, OPTIONS, TRACE, PATCH。 HTTP协议定义了一些错误状态码,如200 OK表示请求成功,404表示请求资源不存在,500表示服务器内部发生了不可预期的错误。 HTTP协议的发展历程中,从HTTP/1.1到HTTP/2的变化包括了更快、更稳定、更简单等特点。HTTP/2连接都是永久的,且仅需要每个来源一个连接。流控制的引入可以阻止发送方向接收方发送大量数据。

HTTPS(HTTP Secure)是HTTP协议的安全版本,通过TLS/SSL加密来保证数据传输的安全性。加密方式分为对称加密和非对称加密,前者加密和解密都是使用同一个密钥,后者使用两个不同的密钥。

HTTP 协议的报文结构包括请求报文和响应报文, 分别由请求行、请求头、请求体和状态行、响应头、响应体组成. Cookie是在客户端存储的一些信息,当同域访问时会自动带上, 用于记录会话状态等. HTTP 缓存分为强缓存和协商缓存, 强缓存通过Expires和Cache-Control控制, 协商缓存通过Etag/If-None-Match和Last-Modified/If-Modified-Since判断是否需要重新获取资源. 静态资源的优化方案包括使用缓存, CDN和文件名hash. CDN可以确保内容以一种高效的方式提供给用户. 跨域登录可以通过CORS或者代理服务器解决, 但是使用iframe会有诸多不便.

在实际应用中, 浏览器可以使用XMLHttpRequest(XHR)或者Fetch API发起请求. XHR是传统的异步请求方式, Fetch API是XHR的升级版, 支持Promise, 模块化设计, 可以方便的处理响应数据. 在Node.js中, 可以使用标准库http/https发起请求, 但功能较为有限, 常用的第三方库是axios, 支持浏览器和Node.js环境, 拥有丰富的拦截器. 网络优化手段包括使用CDN, 预解析, 预连接, 优化HTTPS假解密. 为了网络稳定性, 可以使用重试, 缓存, 但需要注意避免加剧恶劣情况. 数据安全也是重要的考虑因素. 此外, 还有其他通信方式如WebSocket, QUIC等, 他们都具有不同的特点, 适用于不同的场景. WebSocket是基于TCP的双向通信, 支持实时性高的应用, QUIC是基于UDP的可靠传输, 支持高效, 安全的多路复用.