最专业的八方代购网站源码!

资讯热点
故障排除从错误代码406开始

发布时间:2023-2-19 分类: 行业资讯

背景

前段时间,我突然收到一位同事的报道,他说有一名来自湖江的老师无法登陆海外的胡江账户。这是一个非常常见的错误,但故障排除过程并不简单。我们有很多惊喜,并在这里与大家分享。

我们首先判断,从故障现象的角度来看,它应该独立于后端,但与前端有关,所以我们很快就看了前端日志。从日志的角度来看,它主要用于判断客户端的地理位置接口的连续错误。出现了大量HTTP状态代码406(24小时内超过1w)。根据HTTP状态代码规范,4开头的错误代码与客户端相关。考虑到该故障仅发生在教师身上,初始判断406是问题的根源。

随着获得的信息和分析的深入,我们很快解决了外籍教师的过错。不幸的是,它确认它与406无关。

但是,我们不能就此止步。毕竟,正常的HTTP状态代码应该是200,那么大数量的406是多少?为什么我们不能重现?它们是如何触发的?如此多的爆发应该引起用户的反馈?为何在线?反馈是否如此平静?

下图显示了日志平台中的406错误

故障排除过程

为了确保性能,我们的Node端不会详细记录每个请求,因此只需查看406日志就不知道具体原因。为了解决这个问题,我们紧急发布了一个在线补丁来记录每个请求的详细信息,然后在日志平台中看到以下请求

为了便于比较,我们在浏览器上截获了正常请求。如下图所示

通过仔细比较这两个请求,结合错误代码406的定义,我们的重点是Accept头。

在日志中

和普通的浏览器行为

因此,我们在Postman中模拟了错误的请求,当然,我们重现了406错误,因此我们可以确认问题是由Accept字段引起的。

406 Not Acceptable状态码表示客户端错误,表示请求的资源的content属性不能满足请求头中的条件,因此无法生成响应实体。从HTTP协议规范RFC文档转换

我们在线检查了这些信息,并与后端同事讨论了406的错误代码。我们了解到,如果请求标头的Accept不符合事先商定的合同,则会返回406错误。错误是API服务,它以application/json格式返回数据。但是,请求中的Accept表示它不支持此格式,因此将报告406错误。

我们仔细检查了普通浏览器发送的请求,发现所有包括Accept: */* ;.看起来这些触发406的请求不是普通用户发送的。那么,谁提出了这些要求?

是CDN吗?

CDN的全名是内容分发网络,即内容分发网络。目的是使用户能够获得附近所需的内容,解决因特网网络的拥塞,提高访问代购源码网站的用户的响应速度。 CDN网络可以将服务器的内容缓存到分布在世界各地的CDN节点,并根据用户的访问IP连接到CDN,以提高代购源码网站的响应速度。 (引自google.com)

现在CDN是各个公司的共同配置,而且Hujiang也不例外。我们仔细研究了请求406的源IP,发现它们都是来自北京联通的几个节点。在这种情况下,怀疑CDN非常大。可能有两种可能:1。原始请求标头的Accept字段错误; 2.原始请求标头的Accept字段是正确的,但在通过CDN节点时传递。 CDN已被篡改。由于先前CDN篡改头部的问题,我们最初判断CDN的问题。

接下来,我们暂时将北京联通的节点返回源,验证CDN已经篡改了头部并获得了最终用户IP。在Internet上搜索有关Internet的详细信息,Internet是搜索引擎的爬虫。事实证明,406不是普通用户,而是搜索引擎爬虫。

亮点

在写文章的过去几天里,我发现错误日志丢失了很多,406错误消失了。我认为某个搜索引擎悔改,所以我使用当时出错的IP来搜索日志平台,发现搜索引擎只是改变了策略。其Accept字段已被修改,并且UA标题已添加了搜索引擎的唯一徽标,该徽标已成为常规搜索引擎。

总结

对于开发人员来说,当代购源码网站遇到大量406错误时,不要过于担心,检查日志,很可能是搜索引擎爬虫造成的。

总结这406错误代码事件,当搜索引擎抓取Hujiang页面时,请求标头将Accept设置为与后端服务接受的Accept字段不同,导致大量406错误。

最后,详细解释“在标题中接受”的相关知识

接受

它在标头中用于告诉客户端客户端可以处理的内容类型。此类型的内容由MIME类型(从MDN引用)

表示

内容类型

Text/html,application/xhtml + xml,application/xml都是MIME类型,也可以称为媒体类型和内容类型。

在示例中,application是一个类型,json是一个子类型。它表明客户端只能接收此类应用程序/json的响应。如果服务器无法返回此类响应,则服务器应返回406错误。

通配符*代表任何类型

例如:Accept: /表示浏览器可以处理所有类型

Accept可以支持由

分隔的多种类型

利用内容协商机制,服务器可以选择许多备选方案中的一个用于应用程序,并使用Content-Type响应头来通知客户端它的选择。

它表明客户端只能接收三种类型的响应:text/html,application/xhtml + xml,application/xml。

因子重量(q)

q是介于0和1之间的值,q的默认值为1,q=0是不可接受的,q的值越大,请求越倾向于在< ;;< ;;“之前获得类型的内容。/p >>

它表明客户端更喜欢text/html格式的响应,然后是application/xhtml + xml,最后是application/xml,*/*。

« 代购源码网站内部优化需要从这五个方面开始 | 我理解文章中AR/VR/MR之间的区别。设计过程中有哪些坑? »