HTTP协议|青训营笔记

68 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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加密,有对称加密和非对称加密,两者混用。

## HTTP的报文结构 HTTP有两类报文
  • Requests 请求报文--从客户端向服务器发送
  • Responses 响应报文--从服务器到客户的回答
HTTPde 请求报文和响应报文都是由三个部分组成:开始行、首部行和实体主体。
HTTP请求报文的一些方法如下

每一个请求报文发出以后都能收到一个响应报文,响应报文的第一行就是状态行。状态行包括三项内容:HTTP的版本,状态码,以及解释状态码的简单短语。状态码都是三位数字的,分为5大类,主要如下:

RESTful API 一种API的设计风格

  • 每一个URL代表一种资源
  • 客户端和服务器之间,传递这种资源的某种表现层
  • 客户端通过HTTP method,对服务器端资源进行操作,实现“表现层状态转化”

常用请求头

常用响应头

缓存 缓存的过程

强缓存指的是本地已经有了的缓存可以直接用,协商缓存是指不确定缓存能不能用要和Server端协商一下。Etag是资源的一个标识符号,和请求的if-None-Match对应上,Last-Modified在响应里面,if-Modified-Since在请求头里。

Cookie

Cookie.png

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)