网络协议从入门到底层原理(11)网络爬虫,线程池底层实现原理
robots.txt 是存放于网站根目录下的文本文件,比如 [https://www.baidu.com/robots.txt](
)
用来告诉爬虫:哪些内容是不应被爬取的,哪些是可以被爬取的
因为一些系统中的 URL 是大小写敏感的,所以 robots.txt 的文件名应统一为小写
robots.txt 并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私
只能防君子,不能防小人
无法阻止不讲 “武德” 的年轻爬虫爬取隐私信息
一般格式:
例如:京东的 robots.txt:[https://www.jd.com/robots.txt](
)
User-agent: *
Disallow: /?*
Disallow: /pop/*.html
Disallow: /pinpai/.html?
User-agent: EtaoSpider
Disallow: /
User-agent: HuihuiSpider
Disallow: /
User-agent: GwdangSpider
Disallow: /
User-agent: WochachaSpider
Disallow: /
京东不允许 EtaoSpider、HuihuiSpider、GwdangSpider、WochachaSpider 爬取网站所有网页;
京东不允许一般用户爬取根目录下 pop 目录里所有 html 网页 (
Disallow: /pop/*.html
),pinpai 目录里所有 html 带?
问号的页面 (Disallow: /pinpai/*.html?*
);
不允许一般用户爬取根目录下带
?
问号的所有页面 (Disallow: /?*
)。
除了这些外,其他的都可以爬取。
[](
)无线网络
=======================================================================
[](
)HTTP 缓存(Cache)
=================================================================================
实际上,HTTP 的缓存机制远远比上图的流程要复杂
通常会缓存的情况是:GET 请求 + 静态资源(比如 HTML、CSS、JS、图片等)
Ctrl + F5:可以强制刷新缓存
[](
)缓存 - 响应头
Pragma:作用类似于 Cache-Control,HTTP/1.0 的产物
Expires:缓存的过期时间 (GMT 格式时间),HTTP/1.0 的产物
在 http 协议中规定,所有时间都要转换为 GMT 时间,例如 date: Sat, 19 May 2018 17:17:24 GMT
Cache-Control:设置缓存策略
no-storage:不缓存数据到本地
public:允许用户、代理服务器缓存数据到本地
private:只允许用户缓存数据到本地
max-age:缓存的有效时间(多长时间不过期),单位秒
no-cache:每次需要发请求给服务器询问缓存是否有变化,再来决定如何使用缓存
优先级:Pragma > Cache-Control > Expires
Last-Modified:资源的最后一次修改时间
ETag:资源的唯一标识(根据文件内容计算出来的摘要值)
优先级:ETag > Last-Modifie
[](
)缓存 - 请求头
If-None-Match
如果上一次的响应头中有 ETag,就会将 ETag 的值作为请求头的值
服务器发现资源的最新摘要值跟 If-None-Match 不匹配,就会返回新的资源 (200 OK)
否则,就不会返回资源的具体数据 (304 Not Modified)
If-Modified-Since
如果上一次的响应头中没有 ETag,有 Last-Modified,就会将 Last-Modified 的值作为请求头的值
如果服务器发现资源的最后一次修改时间晚于 If-Modified-Since,就会返回新的资源 (200 OK)
否则,就不会返回资源的具体数据 (304 Not Modified)
Last-Modified 缺陷
只能精确到秒级别,如果资源在 1 秒内被修改了,客户端将无法获取最新的资源数据
如果某些资源被修改了(最后一次修改时间发生了变化),但是内容并没有任何变化
(比如在文本中敲个空格再删除)会导致相同数据重复传输,没有使用到缓存
ETag 可以办到
只要资源的内容没有变化,就不会重复传输资源数据
只要资源的内容发生了变化,就会返回最新的资源数据给客户端
[](
)缓存的使用流程
[](
)即时通信(IM)
===========================================================================
即时通信 (Instant Messaging,简称 IM),平时用的 QQ、微信,都属于典型的 IM 应用
国内的 IM 开发者社区:[http://www.52im.net/](
)
IM 云服务:[网易云信](
)、[腾讯云](
)、[环信](
)等
常用的协议:XMPP、MQTT、自定义协议
[](
)XMPP
XMPP (Extensible Messaging and Presence Protocol)
译为:可扩展消息与存在协议,前身是 Jabber
基于 TCP,默认端口 5222、5269
特点
使用 XML 格式进行传输,体积较大
专为 IM 而开发的、比较成熟的 IM 协议,开发者接入方便
[](
)MQTT
MQTT (Message Queuing Telemetry Transport),消息队列遥测传输
基于 TCP,默认端口 1883、8883(带 SSL/TLS)
特点
开销很小,以降低网络流量,信息冗余远小于 XMPP
不是专门为 IM 设计的协议,很多功能需要自己实现
很多人认为 MQTT 是最适合 物联网 (IoT,Internet of Things) 的网络协议
评论