HTTP缓存
HTTP缓存是一种存储和重用HTTP响应的机制,以减少服务器的延迟和网络负载。HTTP缓存可以存在于多个位置,包括客户端(如浏览器缓存)、代理服务器(如公司或ISP的缓存服务器)以及原始服务器的附近(如反向代理缓存,例如Varnish或CDN节点)。
缓存的实现通常遵循以下步骤:
-
缓存存储:
- 当一个HTTP请求发出时,缓存会检查其存储,查看是否有匹配的响应副本。
- 如果找到有效的缓存条目,并且没有过期(根据
Cache-Control
和Expires
头部),缓存将返回该响应。
-
新鲜度检查:
- 如果缓存的副本被认为是过时的(即已超过其
max-age
或Expires
时间),缓存可能需要向原始服务器进行新鲜度检查。 - 新鲜度检查可以通过条件GET请求实现,使用
If-Modified-Since
或If-None-Match
头部来询问服务器内容是否有更新。
- 如果缓存的副本被认为是过时的(即已超过其
-
验证和更新:
- 如果服务器返回
304 Not Modified
响应,这意味着缓存的副本仍然是最新的。缓存可以更新其头部信息,并将其作为响应发送给客户端。 - 如果服务器返回一个新的
200 OK
响应,缓存将替换其存储中的旧副本,并将新响应发送给客户端。
- 如果服务器返回
-
缓存控制头部:
Cache-Control
头部中的指令控制着响应是否可以被缓存,以及可以被缓存多久。ETag
和Last-Modified
头部提供了内容的版本信息,用于在后续请求中进行验证。
-
缓存策略:
- 缓存可能实施不同的策略来决定何时淘汰旧的缓存条目,例如最少使用(LRU)策略。
- 缓存还可能根据
Vary
响应头部对请求进行细粒度的匹配,确保内容的正确版本被提供给正确的客户端。
HTTP缓存是一个复杂的主题,具体实现取决于许多因素,包括HTTP协议的细节、缓存服务器的配置以及原始服务器的响应头部。然而,基本原则是相同的:缓存通过保存并重新使用HTTP响应来减少重复的数据传输,从而提高性能并减少延迟。
例如,如果你想要确保一个响应不被缓存,你可以使用以下头部:
Cache-Control: no-store
如果你想要资源被缓存30分钟,可以使用:
Cache-Control: max-age=1800
Cache-Control
头部可以组合多个指令,例如:
Cache-Control: public, max-age=1800
这表示响应是公开的,并且可以被缓存最多30分钟。
正确使用Cache-Control
头部对于控制网页的加载时间和减少服务器负载都非常重要。它可以帮助开发者确保内容被适当地缓存,这样用户就可以快速访问网站,同时还能保证内容的新鲜度。
HTTP 常用的状态码及使用场景?
- 1xx:表示目前是协议的中间状态,还需要后续请求
- 2xx:表示请求成功
- 3xx:表示重定向状态,需要重新请求
- 4xx:表示请求报文错误
- 5xx:服务器端错误
常用状态码:
- 101 切换请求协议,从 HTTP 切换到 WebSocket
- 200 请求成功,有响应体
- 301 永久重定向:会缓存。这个资源只是暂时不能被访问了,但是之后过一段时间还是可以继续访问,一般是访问某个网站的资源需要权限时,会需要用户去登录,跳转到登录页面之后登录之后,还可以继续访问
- 302 临时重定向:不会缓存。与301 类似,都会跳转到一个新的网站,但是 301 代表访问的地址的资源被永久移除了,以后都不应该访问这个地址,搜索引擎抓取的时候也会用新的地址替换这个老的。可以在返回的响应的 location 首部去获取到返回的地址。
- 304 协商缓存命中
- 403 服务器禁止访问
- 404 资源未找到
- 400 请求错误
- 500 服务器端错误
- 503 服务器繁忙
计算网络分层
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
http和https之间的区别
HTTP(超文本传输协议)和HTTPS(安全超文本传输协议)之间的主要区别在于安全性。HTTPS是HTTP的安全版本,它在传输数据时提供了额外的安全层。以下是HTTP和HTTPS之间的关键区别:
-
加密:
- HTTP: 数据以明文形式传输,没有加密,这意味着如果数据被截获,第三方可以轻易阅读这些数据。
- HTTPS: 通过使用SSL(安全套接层)或TLS(传输层安全)协议在客户端和服务器之间建立一个加密的链接。这确保了传输的数据对第三方来说是不可读的,即使数据被截获,也无法解密。
-
端口:
- HTTP: 默认使用80端口。
- HTTPS: 默认使用443端口。
-
URL前缀:
- HTTP: 网址以
http://
开头。 - HTTPS: 网址以
https://
开头,‘s’代表‘安全’。
- HTTP: 网址以
-
安全证书:
- HTTP: 不需要服务器拥有安全证书。
- HTTPS: 需要服务器获取并安装SSL/TLS证书,以验证服务器的身份并建立安全连接。
-
数据完整性:
- HTTP: 不能保证数据在传输过程中不被篡改。
- HTTPS: 提供数据完整性验证,确保数据在传输过程中未被篡改。
-
搜索引擎优化(SEO):
- HTTP: 不提供搜索引擎的安全加成。
- HTTPS: 被搜索引擎(如Google)视为正面排名因素,可能会在搜索结果中获得更高的排名。
-
隐私保护:
- HTTP: 由于缺乏加密,用户的隐私可能受到侵犯。
- HTTPS: 加密保护了用户的隐私,防止敏感信息(如登录凭据、支付信息)被窃取。
由于这些区别,HTTPS已成为网站安全的标准,特别是对于那些处理敏感数据的网站。用户和网站所有者都被鼓励使用HTTPS来保护数据和通信的安全。
https如何实现数据的安全传输
HTTPS通过结合HTTP协议和加密协议(通常是TLS,传输层安全,或其前身SSL,安全套接层)来实现安全的信息传输。这个过程包括以下关键步骤:
-
TLS握手:
- 当用户的浏览器尝试与HTTPS网站建立连接时,它首先会发起一个TLS握手。
- 在握手过程中,客户端和服务器交换协议版本信息,选择加密算法,并验证服务器的身份。
-
服务器身份验证:
- 服务器必须向客户端提供其TLS证书,该证书通常由第三方可信机构(证书颁发机构,CA)签发,以验证其身份。
- 客户端将验证证书的有效性,包括证书是否未过期,是否被可信的CA签发,以及证书中的域名是否与正在访问的网站匹配。
-
密钥交换:
- 一旦服务器被验证,客户端和服务器将协商一个临时的会话密钥。
- 使用非对称加密算法安全地交换密钥信息,确保即使被第三方截获,也无法解密会话密钥。
-
对称加密:
- 一旦会话密钥被双方安全地协商出来,它将被用于对称加密后续的通信。
- 对称加密意味着客户端和服务器都使用同一个密钥来加密和解密传输的数据,这使得数据传输过程中即使被截获也无法被未授权的第三方读取。
-
数据完整性:
- TLS还提供了数据完整性检查,通常是通过消息认证码(MAC)或哈希函数实现。
- 这确保了数据在传输过程中没有被篡改,保护了数据的完整性。
-
安全会话:
- 一旦TLS握手完成,客户端和服务器之间的所有HTTP数据将被加密,创建了一个安全的会话。
- 用户与网站的所有交互(包括浏览、表单提交、API调用等)都将通过这个加密的通道进行。
HTTPS通过这种方式确保了用户数据的保密性、服务器身份的真实性以及数据完整性,大大提升了在线交易和通信的安全性。这就是为什么现代浏览器和用户都更倾向于使用HTTPS而不是不安全的HTTP。
TCP 三次握手&四次挥手过程
转自https://www.xiaolincoding.com/network/3_tcp/tcp_interview.html#tcp-%E5%9F%BA%E6%9C%AC%E8%AE%A4%E8%AF%86
标签:缓存,HTTP,网络,复习题,响应,HTTPS,服务器,客户端 From: https://www.cnblogs.com/njfl/p/18168039