New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有一些图标无法成功获取 #5

Closed
mcc108 opened this Issue Jul 25, 2016 · 7 comments

Comments

Projects
None yet
2 participants
@mcc108

mcc108 commented Jul 25, 2016

与google的对比:

http://www.google.com/s2/favicons?domain=https://bower.io
http://api.byi.pw/favicon/?url=https://bower.io
http://www.google.com/s2/favicons?domain=http://gruntjs.com
http://api.byi.pw/favicon/?url=http://gruntjs.com
http://www.google.com/s2/favicons?domain=http://brackets.io
http://api.byi.pw/favicon/?url=http://brackets.io
@jerrybendy

This comment has been minimized.

Owner

jerrybendy commented Jul 25, 2016

嗯,真的是这样。。 等下我检查一下看是算法的问题还是网络导致的,谢谢反馈 😁

@jerrybendy

This comment has been minimized.

Owner

jerrybendy commented Jul 25, 2016

你好,关于以上举例的三个网站我测试了下,结果如下:

  1. bower 官网的目前还没找到具体原因,表现在 curl 跟踪请求返回了 false, 将后续跟进;
  2. grunt 官网的问题在于 grunt 网站中的图标地址写错了,google 对这种错误进行了处理 (在 http://gruntjs.com 下使用了 ../img/favicon.ico 的地址,根目录下再使用 ../ 向上一级目录追溯肯定是有问题的)。目前我也对这种错误放宽了处理,忽略前面的两个点;
  3. brackets 网站是属于网络问题,默认获取图标的网络请求超时是 10秒, 10秒未返回结果就会判定为获取失败。我在删除对应网站图标的缓存后重新获取就正常了。
@mcc108

This comment has been minimized.

mcc108 commented Jul 26, 2016

thx 感谢维护 , 支持你

@jerrybendy

This comment has been minimized.

Owner

jerrybendy commented Jul 26, 2016

我又测试了下,基本可以断定 bower 官网在请求时返回 false 是使用了 http/2 的原因。

我测试了几个启用 http/2 的网站,包括我自己的博客,发现有的网站启用 http/2 后会返回 false,而有的(如 google、阿里云等)虽然也启用了 http/2 但返回的是 http/1.1。

尝试使用几乎最简的 curl 配置去请求 bower 官网,代码如下:

$url = 'https://bower.io';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$ret = curl_exec($ch);
var_dump($ret);

PHP 5.5 以下是没有 CURL_HTTP_VERSION_2_0 这个常量的,我用的 5.6 所以没报错,但仍然是返回 false。似乎还需要服务器升级 openssl 和 libcurl 的版本才能支持 http/2。 至于为什么阿里云能返回 http/1.1 就不是很清楚了,暂时还没有太深入去探索这个向下兼容的问题(不是说 http/2 能自动向下兼容的吗 😞)。

@jerrybendy

This comment has been minimized.

Owner

jerrybendy commented Jul 27, 2016

最新的代码已经部署到 api.byi.pw 上面了,http/2 的问题尚未解决,我回去试下升级 curl 版本看能不能解决

@mcc108

This comment has been minimized.

mcc108 commented Jul 27, 2016

辛苦了~~~

@jerrybendy

This comment has been minimized.

Owner

jerrybendy commented Jul 27, 2016

不用客气

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment