浅谈HTTP相关原理


HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

一、HTTP的缓存机制

强缓存和协商缓存

强缓存&协商缓存

控制强制缓存的字段:添加Expires和Cache-Control Header,其中Cache-Control优先级比Expires高

  • Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求结果缓存的到期时间
  • HTTP/1.1,Expire已经被Cache-Control替代,原因在于Expires控制缓存的原理是使用客户端的时间与服务端返回的时间做对比,那么如果客户端与服务端的时间因为某些原因(例如时区不同;客户端和服务端有一方的时间不准确)发生误差,那么强制缓存则会直接失效

控制协商缓存的字段:Last-Modified / If-Modified-Since和Etag / If-None-Match, 其中Etag / If-None-Match优先级高于Last-Modified / If-Modified-Since,同时存在则只有Etag / If-None-Match生效

Cache-Control: 控制网页的缓存,位于通用信息头
(1)public:所有内容都将被缓存(客户端和代理服务器都可缓存)
(2)private:所有内容只有客户端可以缓存,Cache-Control的默认取值
(3)no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
(4)no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
(5)max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效

缓存的三种情况

  1. 不存在缓存结果和缓存标识
    发送服务器请求
  2. 存在缓存结果和标识,但结果已失效

使用协商缓存

  1. 存在缓存结果和标识,且结果未失效
    直接返回结果

在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)

浏览器如何缓存?

浏览器缓存的过程

  • 浏览器每次发起请求,都会先在浏览器缓存中查找该请求的结果以及缓存标识

  • 浏览器每次拿到返回的请求结果都会将该结果和缓存标识存入浏览器缓存中

总结

强制缓存优先于协商缓存进行,若强制缓存(ExpiresCache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-SinceEtag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存,主要过程如下:
浏览器取缓存的过程

二、HTTP的常见请求

  • get: 通过url传参,长度有限,仅支持url,请求浏览器cache,参数会保留在历史记录,产生一个TCP数据包
  • post: 放在request body中,长度无限制,支持多种编码,参数不保留,产生两个TCP数据包
  • head: 类似于get请求,只不过返回的响应中没有具体的内容,用户获取报头
  • options:允许客户端查看服务器的性能,比如说服务器支持的请求方式,通常用于跨域请求发起的预检请求,以检测请求是否被浏览器接收
  • put: 和post类似,html表单不支持,发送资源与服务器,并存储在服务器指定位置,要求客户端事先知道该位置
  • delete: 请求服务器删除某资源。和put都具有破坏性,可能被防火墙拦截。如果是https协议,则无需担心
  • connect: HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。就是把服务器作为跳板,去访问其他网页。然后把数据返回回来,连接成功后,就可以正常的get、post了
  • trace: 回显服务器收到的请求,主要用于测试或诊断。一般禁用,防止被恶意攻击或盗取信息

简单请求:HEAD GET POST

请求 GET POST
定义 从指定的资源请求数据 向指定的资源提交要被处理的数据
大小 不同的浏览器和服务器不同,一般限制在2~8K之间,更加常见的是1k以内 ——
底层协议 TCP/IP TCP/IP
数据包 一个TCP包 两个TCP包
具体请求情况 浏览器会把http header和data一并发送出去,服务器响应200(返回数据) 浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)

三、HTTP的状态码

状态码分类

常见的状态码:

  • 200 OK:表示从客户端发送给服务器的请求被正常处理并返回;

  • 204 No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回);

  • 206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容。

  • 301 Moved Permanently永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改的URL;

  • 302 Found临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL;

    301与302的区别:前者是永久移动,后者是临时移动(之后可能还会更改URL)

  • 303 See Other:表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;

    302与303的区别:后者明确表示客户端应当采用GET方式获取资源

  • 304 Not Modified:表示客户端发送附带条件(是指采用GET方法的请求报文中包含if-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since中任一首部)的请求时,服务器端允许访问资源,但是请求为满足条件的情况下返回改状态码;

  • 307 Temporary Redirect:临时重定向,与303有着相同的含义,307会遵照浏览器标准不会从POST变成GET;(不同浏览器可能会出现不同的情况);

  • 400 Bad Request:表示请求报文中存在语法错误;

  • 401 Unauthorized:未经许可,需要通过HTTP认证;

  • 403 Forbidden:服务器拒绝该次访问(访问权限出现问题)

  • 404 Not Found:表示服务器上无法找到请求的资源,除此之外,也可以在服务器拒绝请求但不想给拒绝原因时使用;

  • 500 Inter Server Error:表示服务器在执行请求时发生了错误,也有可能是web应用存在的bug或某些临时的错误时;

  • 503 Server Unavailable:表示服务器暂时处于超负载或正在进行停机维护,无法处理请求;

四、HTTP2.0、HTTP1.0、HTTPS

http: 无状态的协议
https:基于SSL加密的http协议
http2.0的改进:

  • 内容安全
  • 提升访问速度
  • 允许多路复用
  • 二进制分帧
  • 首部压缩
  • 服务器端推送

HTTPS

HTTP协议是直接通过明文在浏览器和服务器之间传递信息的,而HTTPS协议则是采用对称加密和非对称加密结合的方式来保护浏览器和服务器之间的通信安全。

HTTPS为了追求性能,又要保证安全,采用了共享密钥加密公开密钥加密混合的方式进行报文传输。

HTTPS协议通信:HTTPS是HTTP报文直接将报文信息传输给SSL套接字进行加密,SSL加密后将加密后的报文发送给TCP套接字,然后TCP套接字再将加密后的报文发送给目的主机,目的主机将通过TCP套接字获取加密后的报文给SSL套接字,SSL解密后交给对应进程。

HTTPS原理图
HTTPS站点认证&密码协商

图引自《清晰图解HTTPS如何防范中间人攻击》

  • https的加密过程
    https加密过程

  • HTTP协议的优缺点
    优点: 安全可靠、确保数据的完整性、可以防止中间人攻击
    缺点:https握手费时,增加页面加载时延;缓存不如http高效,增加数据开销;ssl证书费用高,且需要绑定ip

  • https如何防止中间人攻击
    CA证书判定,公证人
    HTTPS不仅进行加密,还进行身份验证服务器。当客户端连接时,服务器会显示其域具有有效且可信任的证书。这个证书不能简单地被中间人欺骗或重播。

中间人攻击(MITM):服务器向客户端发送公钥。攻击者截获公钥,保留在自己手上。然后攻击者自己生成一个【伪造的】公钥,发给客户端。客户端收到伪造的公钥后,生成加密hash值发给服务器。攻击者获得加密hash值,用自己的私钥解密获得真秘钥。同时生成假的加密hash值,发给服务器。服务器用私钥解密获得假秘钥。

  • 为什么https不会被捕获
    它是HTTP的安全版,在HTTP基础上添加了SSL加密(传输层实现),建立了一个可以加密传输、身份认证的信息安全通道

HSTS(Http Strict Transport Security):HTTP 严格传输协议,作用是强制客户端和服务端之间建立安全的HTTPS连接,而非不安全的HTTP连接,可以很大程度上防止SSLTrip

参考文章:


Author: Casey Lu
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Casey Lu !
评论
 Current
浅谈HTTP相关原理 浅谈HTTP相关原理
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。 一、HTTP的缓存机制 强缓存和协商缓存 控制强制
2020-09-19
Next 
操作系统的相关基础 操作系统的相关基础
操作系统基础 操作系统的概念: 管理硬件、提供用户交互的软件系统 OS统一管理系统资源(处理器资源、IO设备资源、存储器资源、文件资源),实现了对系统资源的抽象 并发性、共享性、虚拟性、异步性 并行🆚并发:并行是同一时刻、并发是同一
2020-09-01
  TOC