这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
HTTP协议
本篇文章主要介绍以下部分
- HTTP协议简介
- HTTP协议的基本结构与发展历程
- 常见场景中的HTTP协议应用
- 在不同的环境中发起HTTP请求
- 知识扩展,了解更多网络通信协议
HTTP协议简介
HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写,HTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。从层次的角度来看,HTTP是面向事务的应用层的协议,使用了面向连接的TCP作为运输层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。HTTP是一个可扩展、无状态的协议。无状态指的是同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时相同(假定服务器未更新页面),因为服务器不记得曾经访问过这个客户。
HTTP协议的发展进程
目前很多实际使用中切换到HTTP/2的版本,传输得更快,更稳定,更简单。
- 帧:是HTTP/2通信中最小的单位,每个帧包含帧头,至少也会表示出当前帧所属的数据流,使用二进制编码。
- 消息:各种帧聚合起来,与逻辑请求或响应消息对应的完整的一系列帧
- 数据流:已经建立的连接内的双向字节流,可以承载一条或者多条信息。
HTTP/2的连接是永久的,而且仅需要每个来源一个连接,控制流可以阻止发送方向接收方发送大量数据的机制。服务器推送,为了加快处理效率,服务器可以主动推送给接收端信息。
HTTPS是HTTP在传出过程中经过TSL/SSL加密,有对称加密和非对称加密,两者混用。
- Requests 请求报文--从客户端向服务器发送
- Responses 响应报文--从服务器到客户的回答
HTTP请求报文的一些方法如下
每一个请求报文发出以后都能收到一个响应报文,响应报文的第一行就是状态行。状态行包括三项内容:HTTP的版本,状态码,以及解释状态码的简单短语。状态码都是三位数字的,分为5大类,主要如下:
RESTful API 一种API的设计风格
- 每一个URL代表一种资源
- 客户端和服务器之间,传递这种资源的某种表现层
- 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”
常用请求头
常用响应头
缓存 缓存的过程
Cookie
HTTP的场景分析
静态资源方案:缓存+CDN(内容分发)+文件名hash
CDN:Content Delivery Network
通过用户就进性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。
跨域
scheme,host name,port三个中有任何一个不相同都认为是跨域的(默认https的端口号是443,如果省略和非省略可以认为是非跨域的,如果端口号改变了就认为是跨域)。同源策略是浏览器的一个安全策略。
跨域解决方案:
- CORS(Cross-Origin Resource Sharing),先发送与请求,获知服务端是否允许该跨域请求(复杂请求)。
- 用代理服务器,绕开浏览器。部署一个和当前域名同域下的代理服务器,在真实地做接受转发地服务策略
- Iframe通信:限制比较多,实际使用得比较少
- Session+cookie
- JWT(JSON web token)
SSO:单点登录(Single Sign On)