www.example.com
之后都发生了什么非持久 HTTP 连接
持久 HTTP 连接
前面提到 HTTP 服务器为无状态的,而一个 Web 站点通常希望能够识别用户,可能是因为服务器希望限制用户的访问,或者因为它希望把内容与用户身份联系起来。为此,HTTP 使用了 cookie(最初被称作 magic cookie)🍪
Magic_cookie
cookie technology has four components:
Cookies 跟踪用户
cookies 允许网站更加了解你
你可以提供名字和 e-mail 给网站
广告公司通过网站获得信息
Cookies 不适合游动用户
Cookie 可用于
跟踪用户在给定网站上的行为(第一方 cookie)
在多个网站上跟踪用户行为(第三方 cookie),而无需用户选择访问跟踪器网站!
跟踪可能对用户不可见:可能是一个不可见的链接
通过 Cookie 进行的第三方跟踪:在 Firefox、Safari 浏览器中默认禁用,将于 2023 年在 Chrome 浏览器中禁用
Web 缓存器 Web cache,也称代理服务器 proxy server,设计它的目标是代表**初始 Web 服务器(origin server)**满足 HTTP 请求;一般的,Web 缓存器既是服务器又是客户机,典型的缓存器由 ISP 提供(大学、公司或居民 ISP);引入 Weh 缓存器减少了对客户机请求的响应时间,内部网络与接入链路上的通信量,并从整体上大大降低因特网上的 Web 流量
如图,加入 cache 后,客户端请求的对象可能在缓存器中(称作缓存命中),缓存器直接返回给客户端;图中接入链路(access link)的速率为 15Mbps,远低于局域网的网络速率,$total delay = LAN delay + access dalay + Internet delay$,可见接入时延为该例中提升传播速率的瓶颈;可选择更快的接入链路,但这需要更多的费用;而缓存器可以减少接入链路上的流量,从而减少接入时延,同时费用相对较低
LAN delay: 在局域网中传输一个报文所需的时间
Access delay: 在两个路由器之间传输一个报文所需的时间
Internet delay: 在因特网中传输一个报文所需的时间
Request Steps:
尽管高速缓存器能减少用户感受到的响应时间,但引入了一个新的问题,即存放在缓存器中的副本可能陈旧的。为验证缓存器中的副本是否仍然有效,你可以使用条件 GET 请求,参照如下 python 代码
import socket# 定义报文内容和首部request = "GET /index.html HTTP/1.1\r\n"request += "Host: www.baidu.com\r\n"request += "If-Modified-Since: Sat, 01 Jan 2022 00:00:00 GMT\r\n"request += "Connection: close\r\n\r\n"# 创建套接字并连接目标服务器s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.connect(('www.baidu.com', 80))# 发送报文s.send(request.encode())response = b""while True: data = s.recv(4096) if not data: break response += dataprint(response.decode())s.close()[OUTPUT]HTTP/1.1 200 OKAccept-Ranges: bytesCache-Control: no-cacheContent-Length: 9508Content-Type: text/htmlDate: Fri, 29 Mar 2024 13:00:29 GMTP3p: CP=" OTI DSP COR IVA OUR IND COM "P3p: CP=" OTI DSP COR IVA OUR IND COM "Pragma: no-cacheServer: BWS/1.1Set-Cookie: BAIDUID=E79C6BEF6A7F8AA35FBC1FD6742520D8:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: BIDUPSID=E79C6BEF6A7F8AA35FBC1FD6742520D8; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: PSTM=1711717229; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.comSet-Cookie: BAIDUID=E79C6BEF6A7F8AA30F2B2E6688EB66DE:FG=1; max-age=31536000; expires=Sat, 29-Mar-25 13:00:29 GMT; domain=.baidu.com; path=/; version=1; comment=bdTraceid: 1711717229235279668210477533425964763324Vary: Accept-EncodingX-Ua-Compatible: IE=Edge,chrome=1X-Xss-Protection: 1;mode=blockConnection: close# html filedata data ... data
邮箱系统的 3 个主要组成部分:
**SMTP(Simple Mail Transfer Protocol)**是一种用于电子邮件传输的标准协议。它定义了电子邮件客户端(如邮件程序)和邮件服务器之间的通信规则,以便可靠地将邮件从发送方传递到接收方。
特性 | SMTP | HTTP |
---|---|---|
协议类型 | 推协议 push protocol | 拉协议 pull protocol |
数据编码 | 要求采用 7 比特 ASCII 码格式 | 不受 7 比特 ASCII 码限制 |
消息传递 | 发送文件的机器发起 TCP 连接 | 接收文件的机器发起 TCP 连接 |
报文封装 | 所有报文对象放在一个报文中 | 每个对象封装在不同的 HTTP 响应报文中 |
一般格式如下:
To:发件人地址From:收件人地址Subject:邮件主题...邮件正文
MIME: Multipurpose Internet mail Extensions 多用途因特网邮件扩展, RFC 2045, 2046;增添额外的信头头部声明 MIME content-type,实现多媒体邮件
From: [email protected]To: [email protected]Subject: Picture of yummy crepe.MIME-Version: 1.0Content-Transfer-Encoding: base64Content-Type: image/jpegbase64 encoded data ....................................base64 encoded data
收件人的用户代理不能使用 SMTP 得到报文,因为取得报文是一个 pull 操作,而 SMTP 协议是一个 push 协议。通过引用一个特殊的邮件访问协议来解决这个问题,该协议将收件人邮件服务器上的报文传送给他的本地
POP3 VS IMAP
特性 | POP3 | IMAP |
---|---|---|
邮件存储 | 下载邮件至本地客户端 | 在服务器上保留邮件副本 |
邮件同步 | 单设备上的邮件删除操作不会同步更新 | 多设备上的邮件操作同步更新 |
邮件管理 | 仅支持简单的邮件收发操作 | 支持复杂的邮件管理功能 |
应用层 ApplicationLayer Part Ⅰ