【问题标题】:What browser settings can cause server encoding issues?哪些浏览器设置会导致服务器编码问题?
【发布时间】:2015-10-10 16:49:39
【问题描述】:

我正在尝试重现我的 rails 网站在特定爬虫访问某个页面时生成的异常:

ActionView::Template::Error:不兼容的字符编码:ASCII-8BIT 和 UTF-8

页面采用 GET 参数。当我使用浏览器访问具有相同 GET 参数的页面时,一切都正确呈现。

爬虫的 IP 始终是基于欧盟的(我的网站是基于美国的),其中一个用户代理是:

Mozilla/5.0(兼容;GrapeshotCrawler/2.0;+http://www.grapeshot.co.uk/crawler.php

查看发送的 HTTP 标头,我看到的浏览器请求和爬虫请求之间的唯一区别是它包含 HTTP_ACCEPT_CHARSET,而我的没有:

-- HTTP_ACCEPT_CHARSET: utf-8,iso-8859-1;q=0.7,*;q=0.6

我尝试在我的请求中设置它,但我无法重现。是否有可以改变 rails 呈现方式的 HTTP 标头参数?还有其他设置我可以尝试重现吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    那不是浏览器,更可能是自动爬虫。事实上,如果你点击用户代理中的链接,你会得到以下解释

    Grapeshot 爬虫是访问页面以检查和分析内容的自动化机器人,在这个意义上它有点类似于主要搜索引擎公司使用的机器人。

    除非爬虫正在提交 POST 请求(这确实不太可能,因为爬虫倾向于通过 GET 跟踪链接而不发出 POST 请求),这意味着爬虫以某种方式在您的页面中注入一些信息,从而导致您的控制器崩溃.

    最常见的原因是格式错误的查询字符串。检查与请求关联的查询字符串:它可能包含控制器读取的非 UTF8 编码字符,并且以某种方式使其崩溃。

    检查异常的堆栈跟踪也是值得的(在 Rails 日志中或使用第三方应用程序,例如 Bugsnag)以确定堆栈的哪个组件导致异常、重现、测试和修复它。

    【讨论】:

    • 是的,我收集了很多。但我无法重现该问题。参数很简单:utf8=✓&query_string=misty。如何让我的浏览器以另一种编码发送?我可以设置任何其他 http 标头/设置来调整吗?
    • 检查堆栈跟踪并使用我建议的异常跟踪工具之一。通过这种方式,您可以收集整个环境。
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2012-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多