在过去两个月中,我在Chrome的开发者控制台上收到以下错误:
net::ERR_INCOMPLETE_CHUNKED_ENCODING
Run Code Online (Sandbox Code Playgroud)
症状:
服务器环境:
在我们内部的Apache服务器上发生了这种情况.它不会发生在任何其他人身上 - 即我们的用户都没有遇到这个问题 - 我们的开发团队也没有其他人.
其他人使用完全相同的Chrome版本访问完全相同的服务器.我还尝试禁用所有扩展程序并在隐身模式下浏览 - 无效.
我使用过Firefox并且发生了同样的事情.截断的文件和诸如此类的东西.唯一的问题是,Firefox不会引发任何控制台错误,因此您需要通过Firebug检查HTTP请求以查看问题.
来自Apache的响应标头:
Cache-Control:no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection:close
Content-Encoding:gzip
Content-Type:text/html; charset=utf-8
Date:Mon, 27 Apr 2015 10:52:52 GMT
Expires:Thu, 19 Nov 1981 08:52:00 GMT
Pragma:no-cache
Server:Apache/2.2.22 (Ubuntu)
Transfer-Encoding:chunked
Vary:Accept-Encoding
X-Powered-By:PHP/5.3.10-1ubuntu3.8
Run Code Online (Sandbox Code Playgroud)
在测试时,我能够通过在我的htaccess文件中强制HTTP 1.0来解决问题:
SetEnv downgrade-1.0
Run Code Online (Sandbox Code Playgroud)
这摆脱了问题.但是,通过HTTP 1.1强制HTTP 1.0不是一个合适的解决方案.
更新:因为我是唯一一个遇到此问题的人,我认为我需要花更多的时间来调查它是否是客户端问题.如果我进入Chrome的设置并使用"恢复默认设置"选项,问题将消失大约10-20分钟.然后它返回.
Facebook Crawler每秒都会多次点击我的服务器,它似乎忽略了Expires头和og:ttl属性.
在某些情况下,它在1-5分钟的空间内多次访问相同的og:图像资源.在一个示例中 - 爬虫使用12个不同的IP地址在3分钟的过程中访问相同的图像12次.
在我发现以下示例之前,我只需要记录10分钟的请求:
一个映像的时间列表和爬网程序IP地址:
2018-03-30 15:12:58 - 66.220.156.145
2018-03-30 15:13:13 - 66.220.152.7
2018-03-30 15:12:59 - 66.220.152.100
2018-03-30 15:12:18 - 66.220.155.248
2018-03-30 15:12:59 - 173.252.124.29
2018-03-30 15:12:15 - 173.252.114.118
2018-03-30 15:12:42 - 173.252.85.205
2018-03-30 15:13:01 - 173.252.84.117
2018-03-30 15:12:40 - 66.220.148.100
2018-03-30 15:13:10 - 66.220.148.169
2018-03-30 15:15:16 - 173.252.99.50
2018-03-30 15:14:50 - 69.171.225.134
Run Code Online (Sandbox Code Playgroud)
根据Facebook的文档,og:图像是什么:
有人将内容分享到Facebook时显示的图像的URL.有关详细信息,请参阅下文,并查看我们的最佳做法指南,了解如何指定高质量的预览图像.
我在og:image中使用的图像的Expires标头将来设置为+7天.最近,我将此更改为+1年.两种设置似乎没有任何区别.爬虫似乎忽略的标头:
Cache-Control: max-age=604800
Content-Length: 31048
Content-Type: image/jpeg
Date: Fri, 30 Mar 2018 15:56:47 GMT
Expires: Sat, 30 Mar 2019 15:56:47 GMT …Run Code Online (Sandbox Code Playgroud) 我一直在用Ratchet测试PHP websockets,并且一切都工作正常,直到ZMQSocket :: send突然开始挂起,没有明显的原因.
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'notify');
$res = $socket->send(json_encode($entryData)); //Hangs here.
Run Code Online (Sandbox Code Playgroud)
请注意,我可以使用ZMQ :: MODE_NOBLOCK,这将停止挂起,但它不能解决问题.即客户仍然没有收到任何东西.我也重新启动了我的盒子,这不能解决问题.
更新:我似乎通过将我的代码更改为:
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'notify');
$socket->setSockOpt(ZMQ::SOCKOPT_LINGER, 30); //ADDED
$socket->connect("tcp://localhost:5557"); //ADDED
$res = $socket->send(json_encode($entryData));
Run Code Online (Sandbox Code Playgroud)
现在的问题是,为什么它首先悬挂,当它工作正常一两个小时?有什么我需要注意的吗?
我注意到我们的Memcached会话处理程序出现间歇性问题.发生的错误是:
未知:无法写入会话数据(memcache).请验证session.save_path的当前设置是否正确.
笔记:
我的php.ini设置:
session.save_handler = memcache
session.save_path = "tcp://64.233.191.255:11211"
Run Code Online (Sandbox Code Playgroud)
请注意,我也使用过:
session.save_path = "tcp://64.233.191.255:11211?persistent=1&weight=1&timeout=1&retry_interval=15"
Run Code Online (Sandbox Code Playgroud)
但这似乎并不重要.
检查了memcached.log文件,在那里我发现了以下错误:
写入失败,而不是由于阻塞:由对等方重置连接.
注意:此特定错误每天至少在同一时间(上午01:07)发生一次.然后它会在一天中偶尔发生.
比方说,我有以下准备好的声明:
$sth = $dbh->prepare('SELECT `name` FROM `user` WHERE `user_id` = :user_id');
Run Code Online (Sandbox Code Playgroud)
我可以像这样绑定user_id参数:
$sth->bindValue(':user_id', $user_id_value);
Run Code Online (Sandbox Code Playgroud)
我仍然可以安全地接受SQL注入.
但是,bindValue()也是一个名为data_type的可选参数,它允许您设置显式数据类型.例:
$sth->bindValue(':user_id', $user_id_value, PDO::PARAM_INT);
Run Code Online (Sandbox Code Playgroud)
这允许我声明user_id将是一个整数.
我的问题是:为什么在使用或不使用SQL注入时可以安全地使用bindValue中的data_type参数?是否有强制数据完整性?如果您事先验证了数据,是否需要担心使用它?使用它还有其他任何我没想过的好处吗?