写点什么

网络协议从入门到底层原理(11)网络爬虫,线程池底层实现原理

用户头像
极客good
关注
发布于: 刚刚

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


[](


)缓存 - 请求头




【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码




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) 的网络协议



用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
网络协议从入门到底层原理(11)网络爬虫,线程池底层实现原理