初识 HTTP 协议| 青训营

88 阅读4分钟

初识 HTTP 协议

什么是HTTP

从浏览器地址栏输入地址 到 看到页面 这之间发生了什么

简单来说,用户在地址栏输入信息后,浏览器进程根据输入的信息补全地址(比如,输入的是toutiao.com,那浏览器进程判断你是要访问这个网站,将地址补全为www.toutiao.com; 又或是输入的是掘金,那浏览器进程判断你是要搜索这个内容,将地址自动补全为https://cn.bing.com/search?q=%E6%8E%98%E9%87%91);然后将补全后的地址交给浏览器内核发起请求; (中间请求是通过网络传播);服务器拿到请求后,处理后将结果返回浏览器(客户端),浏览器读取响应后......(渲染等部分内容这里就不展开了,主要关注HTTP)

HTTP的基本特征
  • 超文本传输协议 -> 它能承接HTML,CSS,JavaScript,Web APIs等的内容
  • 基于TCP协议 -> 应用层的下一层是传输层,HTTP协议的传输层用的是TCP协议
  • 请求 响应 -> 每个HTTP请求都可以分为请求和响应两个部分
  • 简单可扩展 -> 请求是相对简单的,语义也是相对直白的; 设计上也提供很多扩展的能力,比如自己也可以自定义一些header, 只要client 和 server之间能互相理解就行
  • 无状态 -> 每个请求之间是孤立的,当前的请求是不知道之前的请求是做了什么事的(当然我们有很多种方法,让无状态的协议,帮我们带上状态信息)

协议分析

协议细节
  • Request的重要信息:请求的方法,目标地址等

  • Response的重要信息:请求处理的结果(状态码)等

  • 定义补充:幂等的 与 安全的,(我们会使用这些词来描述具有某些特征的请求)

常用请求头
  • Cache-Control, If-Modified-Since, Expires, Max-ageIf-None-Match这些都是和缓存有关的一些请求头
  • Cookie 可以用来带一些信息,比如用户的登录信息等等(虽然HTTP是个无状态的协议,但实际中,人们总是希望它能携带一些信息)
  • RefererOrigin都是和请求来源有关的一些字段,也可以利用Origin来做一些接口访问的权限控制
  • 补充知识:CSRF(Cross-site request forgery),也被称为:one click attack/session riding,中文名称:跨站请求伪造
常用响应头
  • Cache-Control, Last-Modified, Expires, Max-age, 与ETag是与缓存相关的响应头
  • Set-Cookie -> 告诉浏览器要设置什么cookie,以及它们的权限控制
  • Access-Control-开头的一系列响应头,常被用来做和访问控制相关的事情
缓存(强缓存 与 协商缓存)
  • 强缓存:本地有 -> 直接用

    • Cache-Control下,和可缓存性相关的还有public, private等关键字
    • must-revalidate通常是和max-age一起使用的(比如让缓存过期后,必须经过与服务器验证后,才能继续使用该缓存)
  • 协商缓存:本地有 -> 和服务器进行一个验证 -> 再用

    • 由于协商缓存需要客户端和服务器之间进行通信,所以有成对的请求头和响应头
    • Etag位于响应头里,If-None-Match位于请求头里
    • Last-Modified位于响应头里,If-Modified-Since位于请求头里

HTTP2

  • 相较于HTTP1.x 是发送整个文本(消息),HTTP2是以帧为最小单位(一个或多个帧组成原有的消息),且通过二进制传输(并加入了一些压缩算法),提升了效率,更快了

  • 标记出当前帧所属的数据流 -> 交错发送,接收方重组织(不必串行发送,提高了效率)

  • HTTP2不必每次请求都重新建立连接

  • 流控制

  • 服务器推送:比如浏览器向服务器请求了一个HTML文件,然后服务器经过分析后发现,该HTML文件引用了另外的一个JS文件和CSS文件,由于后续大概率会使用到这两个文件,所以除了HTML文件,服务器也主动将另外两个文件(JS文件, CSS文件)主动推送给浏览器了

    (当然这也取决于浏览器和服务器的支持了,比如在大部分线上的环境中,JS文件和CSS文件被视为是被当作静态资源的,并不会放在服务器上,如果我们强行将静态资源放在服务器上,只为了利用服务器推送能力,也许会反而降低浏览器获取到这些资源的速率,可能会得不偿失)

HTTPS

(在HTTPS中,是对称加密和非对称加密混用的,以提高安全性)