Tomcat和搜索引擎网络爬虫的攻防

简介:

不知道广大程序员朋友们注意到一个现象么?使用百度是无法搜索到淘宝网的网页。为什么会造成这种现象?这就要从网络爬虫说起了。

咱们程序员假如自己搭设个人网站,在上面分享少量自己的技术文章,面临的一个重要问题就是让搜索引擎能够搜索到自己的个人网站,这样才能让更多的读者访问到。

而搜索引擎如百度和微软Bing搜索,Google搜索等通过什么方式才能收录我们的个人网站呢?

答案是搜索引擎的网络爬虫。 网络爬虫是一个很形象的名词,是属于搜索引擎的工具,只有被这些网络爬虫“爬过”的内容才有机会出现在对应搜索引擎的搜索结果中。

个人站长对网络爬虫是又爱又恨。一方面,网络爬虫可以让我们的个人网站出现在搜索结果里,对我们的个人网站进行扩散。另一方面,假如网络爬虫太多太频繁地访问个人网站,会肯定程度上影响正常使用户的请求解决。

于是就有了文章开头我提到的百度搜不到淘宝产品信息的文章。

在浏览器里输入https://www.taobao.com/robots.txt

能看到淘宝网的一个文件robots.txt:

随意选一段解释:这个robots.txt的意思是,淘宝网做出了规定,假如网络请求来自百度爬虫(Baiduspider), 那么只允许(allow)百度爬虫读取article, oshtml和/ershou, 不允许读取的是product。

User-agent: Baiduspider

Allow: /article

Allow: /oshtml

Allow: /ershou

Disallow: /product/

Disallow: /

那么淘宝网怎样知道一个请求是来自百度爬虫,还是来自真正的使用户访问呢?答案就是HTTP请求的User-agent字段。

下图是我使用Chrome访问淘宝网的HTTP请求的User-agent:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36

再回到Tomcat。假如有大量来自网络爬虫的读取请求,Web服务器需要为每一个请求创立一个session。当Session数量变得巨大时,消耗的服务器内存和资源也是巨大的。

因而,Tomcat对于来自网络爬虫的请求,用同一个session来解决。

我们打开Tomcat的源代码来学习。

Tomcat的源代码可以到其官网去下载:

https://tomcat.apache.org/download-70.cgi

点这个链接:

我下载的是7.0.90版本,只有7MB大。

这里需要注意,即便Spider显式的传了一个 sessionId过来,也会弃使用,而是根据client Ip 来进行判断,即对于 相同的 Spider 只提供一个Session。

在下载好的源代码文件夹里,找到这个子文件夹:apache-tomcat-7.0.90-srcjavaorgapachecatalinavalves

打开CrawlerSessionManagerValve.java:

可以看到从第192行代码开始都是Tomcat使用来检测进来的网络请求能否是网络爬虫:

通过这个类里定义的正则表达式检测HTTP请求的user-agent字段来判断究竟该请求能否来自网络爬虫:

".[bB]ot.|.Yahoo! Slurp.|.Feedfetcher-Google."

一旦正则表达式在第205行匹配成功,将第206行的标志位设成true。

假如检测到是网络爬虫,则使用clientIdSessionId.get这个API获取Tomcat专门为网络爬虫预留的sessionId, 而后在第226行把该sessionId分配到进来的网络爬虫请求,这样就避免了白费太多的资源申请session来服务海量的网络爬虫请求,节省了Web服务器的资源。

要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

相关文章
|
2月前
|
SQL 安全 算法
网络安全与信息安全:攻防之间的技术博弈
【4月更文挑战第20天】在数字化时代,网络安全与信息安全已成为维护国家安全、企业利益和个人隐私的重要屏障。本文深入探讨了网络安全漏洞的成因、加密技术的进展以及提升安全意识的必要性,旨在为读者提供全面的网络安全知识框架,同时分享最新的防御策略和技术手段。通过对网络攻防技术的分析,本文揭示了安全防御的复杂性,并强调了持续教育和技术创新在网络安全领域的重要性。
37 6
|
2月前
|
SQL 安全 算法
网络安全与信息安全:防护之道与攻防之策
【2月更文挑战第31天】在数字化时代,网络与信息安全已成为全球关注的焦点。本文深入探讨了网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。通过分析当前网络环境中的安全威胁,我们提出了一系列防御策略和最佳实践,旨在帮助个人和组织构建更为坚固的信息安全防线。
|
2月前
|
安全 网络安全 PHP
深入理解PHP的命名空间与自动加载机制网络安全与信息安全:防护之道与攻防之术
【5月更文挑战第29天】在PHP的开发实践中,命名空间和自动加载机制是两个重要的概念,它们共同构成了现代PHP代码组织的基础。本文将详细解释命名空间在PHP中的应用,探讨其解决代码冲突和提高代码复用性的能力,同时深入研究自动加载机制的原理及其在项目中的实际运用,帮助开发者构建更加高效、易于维护的PHP应用。
|
2月前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:防护之道与攻防之策
【5月更文挑战第29天】在数字化时代,网络安全与信息安全已成为维护个人隐私、企业资产和国家安全的重要屏障。本文深入探讨了网络安全漏洞的成因、加密技术的应用以及提升安全意识的必要性,旨在为读者提供一个全面的安全防护知识框架。通过对当前网络威胁的分析,我们揭示了安全漏洞的本质及其对信息系统的潜在影响,并介绍了最新的加密技术如何作为防御工具来保护数据传输的安全。此外,文章还强调了培养全民网络安全意识的重要性,提出了一系列实用的安全建议和最佳实践。
|
2月前
|
SQL 安全 网络安全
网络安全与信息安全:防护之道与攻防之策
【5月更文挑战第13天】 在数字化时代,网络安全和信息安全已成为维护信息空间稳定的关键。本文深入探讨了网络安全漏洞的成因、加密技术的应用以及提升安全意识的重要性。通过对现有安全威胁的分析,提出了一系列防御策略,并强调了持续教育和技术创新在构建坚固防线中的作用。
|
9天前
|
SQL 安全 网络安全
网络安全攻防实战:黑客与白帽子的较量
【6月更文挑战第29天】网络安全战场,黑客与白帽子的博弈日益激烈。黑客利用漏洞扫描、DDoS、SQL注入等手段发起攻击,而白帽子则通过防火墙、入侵检测、数据加密等技术防守。双方在技术与智慧的较量中,未来将更多融入AI、区块链等先进技术,提升攻防效率与安全性。面对网络威胁,提升技能与意识至关重要。
|
2月前
|
SQL 安全 算法
网络安全与信息安全:防护之道与攻防之术
【5月更文挑战第29天】 在数字化时代,数据成为了新的石油。然而,随之而来的网络威胁却如同无形的盗贼,时刻觊觎着这些价值连城的“黑金”。本文将深入探讨网络安全漏洞的本质、加密技术的进展,以及提升安全意识的重要性。我们将透过技术的视角,分析如何构建一道坚固的数字防线,并讨论攻防双方的策略变化。通过案例剖析和最新研究成果,本文旨在为读者提供一份全面的网络安全与信息安全知识图谱。
|
2月前
|
安全 算法 网络安全
网络安全与信息安全:攻防之间的智慧博弈
【5月更文挑战第17天】在数字化时代,网络安全与信息安全已成为维系信息社会正常运行的关键。本文将深入探讨网络安全漏洞的成因、加密技术的进展以及提升安全意识的重要性。通过对这些领域的分析,旨在为读者提供一幅全面的网络安全与信息安全图景,并强调在这场看不见硝烟的战争中,技术革新和人类警觉性的不断提升是保障我们数字生活安全的双翼。
|
1月前
|
缓存 安全 前端开发
(转)浅谈tomcat优化(内存,并发,缓存,安全,网络,系统等)
(转)浅谈tomcat优化(内存,并发,缓存,安全,网络,系统等)
|
2月前
|
安全 算法 网络安全
网络安全与信息安全:防护之道与攻防之策
【5月更文挑战第3天】 在数字化时代,数据成为了新的石油,而网络安全则是保护这些宝贵资源不被非法开采的关键。本文将深入探讨网络安全漏洞的本质、加密技术的最新进展以及提升个人和企业的安全意识的重要性。我们将分析网络威胁的常见形式,探索如何通过多层次防御策略来增强信息系统的安全性,并讨论如何培养一个安全先行的文化环境。文章的目的是为读者提供一个全面的网络安全知识框架,使他们能够更好地理解和应对不断变化的网络风险。
45 12