分类: 学习

  • 如何修复WordPress不发送电子邮件的问题

    如何修复WordPress不发送电子邮件的问题

    网站所有者之间的一个常见问题是WordPress无法正确发送电子邮件或根本无法发送电子邮件。

    大多数托管WordPress托管服务提供商不提供电子邮件托管服务。但是,这并不意味着您不能从WordPress安装发送电子邮件。这意味着您的WordPress站点将能够发送通知、WooCommerce订单确认和其他类型的站点相关电子邮件。

    通常,当您尝试修复WordPress不发送电子邮件的问题时,这不是服务器上的问题,而是WordPress安装中的电子邮件设置不正确或不兼容。

    在这篇文章中,我们将向您展示如何确定WordPress不向您或您的用户发送电子邮件的原因,并向您展示如何解决它。无论您运行的是常规WordPress网站还是WooCommerce商店,我们都会向您展示如何重新启动和运行电子邮件。

    我们还将研究一些最流行的联系表单插件,并准确确定每个插件在发送电子邮件时可能出现问题的原因。

    1. 为什么WordPress不发送电子邮件
    2. 如何防止WordPress电子邮件变成垃圾邮件
    3. 如何在WordPress中设置SMTP以发送电子邮件
    4. 如何配置您的表单插件以正确发送电子邮件

    为什么WordPress不发送电子邮件

    您可能会遇到WordPress不发送电子邮件的问题的原因有几个。这些包括:

    1. 电子邮件正在发送但将成为垃圾邮件
    2. 您的服务器配置不正确
    3. 您的联系表单插件正在发送“欺骗”电子邮件

    让我们来看看如何确定哪些可能导致问题。

    1. 电子邮件正在发送但变成垃圾邮件

    在运行任何其他测试之前,请确保来自WordPress的电子邮件不会成为垃圾邮件。

    如果用户向您报告WordPress没有发送电子邮件,则可能只是他们的电子邮件将成为垃圾邮件。

    请他们检查垃圾邮件文件夹中是否有来自系统的电子邮件。一些电子邮件客户端可能会将来自WordPress的电子邮件识别为垃圾邮件,因为它们是自动化的。

    2.你的服务器配置不正确

    WordPress不发送电子邮件的一个常见原因是您的服务器未配置为发送它们。

    Web服务器不是为发送电子邮件而设计的,可能是您的服务器未配置为使用该PHP mail()功能。

    好消息是,您可以轻松检查这是否是导致问题的原因——并且您可以修复它。

    如何测试服务器是否正在发送电子邮件

    您可以做的第一件事是使用免费的Check Email插件在您的WordPress网站上运行测试。

    这是一个基本插件,旨在测试您的WordPress安装和/或服务器是否可以发送电子邮件。

    安装后,转到WordPress仪表板中的工具 > Check Email。输入要向其发送测试的电子邮件地址,然后单击“Send test email”

    发送测试邮件

    发送测试邮件

    然后您将看到确认信息。

    测试邮件确认

    测试邮件确认

    检查您的电子邮件客户端,看看您是否收到了测试电子邮件。主题行将显示为“来自 https://yourdomain.com 的测试电子邮件”。

    收到邮件测试

    收到邮件测试

    此外,请务必检查您的垃圾邮件或垃圾邮件文件夹。如果您收到一封电子邮件,则意味着WordPress可以在您的Web服务器上正常发送电子邮件。

    如果您仍然没有收到电子邮件,这意味着很可能是您的联系表单插件配置错误或不兼容。您可以随时联系插件开发人员寻求帮助。让他们知道您运行了上述测试,并且该电子邮件正在处理您的WordPress安装本身。或者按照以下步骤获取一些最常用的联系表单插件。

    如果您遇到连接问题,您可能还需要尝试其他端口。您的主机可能阻止了该端口。

    某些云平台,默认情况下会阻止端口25上的出站连接。据谷歌称,“这个出站SMTP端口被阻止,因为该端口容易受到大量滥用。” 在这种情况下,请尝试使用备用端口,例如2525。

    3. 您的联系表单插件正在发送“欺骗”电子邮件

    如果您已经运行了上面的测试并且您的服务器配置为发送电子邮件,那么这意味着从您的WordPress站点发送电子邮件的插件存在问题。

    这很可能是一个联系表单插件

    联系表单插件发送的电子邮件有时会被电子邮件客户端识别为欺骗性电子邮件。这些类似于垃圾邮件:电子邮件客户端会将它们标记为可疑。

    联系表单电子邮件区域有时被视为欺骗的原因是它们发送的地址与您收到的电子邮件中添加到发件人:字段的地址不同。

    因此,如果您已将联系表单配置为使用填写表单的人的电子邮件地址填充发件人:字段,但该电子邮件实际上来自您的 WordPress 站点,那么您的电子邮件客户端将怀疑该电子邮件并可能将其标记为恶搞。

    如果电子邮件从同一电子邮件地址发送或发送到同一电子邮件地址,您也可能会遇到问题。因此,如果您的表单插件从您的管理员电子邮件地址(默认情况下)发送电子邮件,并且您还配置了将它们发送到该地址,则某些电子邮件提供商可能不喜欢它。与“欺骗”电子邮件问题相比,这不太可能成为问题。

    对于联系表格,通知电子邮件的收件人通常是您。这意味着您可以更改联系表单插件中的设置来解决此问题,并且您可以轻松测试是否收到了电子邮件。

    联系表单插件受影响

    任何联系表单插件都可能受此问题影响。以下是您可能遇到此问题的一些插件:

    • Contact Form 7
    • Gravity Forms
    • Ninja Forms
    • Happy Form
    • weForms
    • Jetpack Contact Form
    • Formidable Forms

    我将向您展示如何解决每个联系表单的电子邮件未发送的问题。首先,让我们来看看如何解决WordPress不为我们确定的每个原因发送电子邮件的问题。

    如何防止WordPress电子邮件变成垃圾邮件

    1. 将电子邮件地址列入白名单

    如果电子邮件将成为垃圾邮件,您可以通过将您的电子邮件地址添加到他们的联系人中来要求您的用户将您的电子邮件列入白名单。

    在Gmail中,如果他们将电子邮件移至收件箱,那应该意味着将来来自该地址的电子邮件不会被移至垃圾邮件 – 但将地址也添加到联系人将是最安全的。

    2. 使用更安全的电子邮件地址

    您可能还想查看您的站点发送电子邮件的电子邮件地址。默认情况下,这将是您的管理员电子邮件地址。如果这是info@ 、contact@ 、sales@或类似的东西,那么电子邮件提供商可能会假设它是垃圾邮件。

    尝试将电子邮件地址更改为看起来更专业的内容,并确保发送到该地址的所有电子邮件都被转移到您的正常地址,这样您就不会错过任何回复。您可以通过为您的电子邮件地址创建别名来做到这一点。

    3. 设置电子邮件身份验证

    您的WordPress电子邮件可能会成为垃圾邮件的另一个原因是您的域名尚未通过电子邮件正确验证。

    遵循我们的电子邮件身份验证指南,以确保它正常工作。

    如何在WordPress中设置SMTP以发送电子邮件

    如果您已经运行了上面的电子邮件测试并且根本没有从您的站点发送电子邮件,那么您需要使用第三方SMTP提供商并将其与您的站点链接,以便它再次发送电子邮件。

    SMTP代表简单邮件传输协议。它在网络上和跨网络移动电子邮件。因此,如果您的服务器未配置为发送电子邮件,它将使其成为可能。

    有许多SMTP供应商可供选择,包括一些免费供应商(如Gmail的SMTP服务器,国内不可用;国内可以选QQ或者163企业邮箱):因此这不需要您花任何钱,只需一点时间。

    要进行设置,请按照我们的指南,在WordPress中使用免费的SMTP服务器

    如何配置您的表单插件以正确发送电子邮件

    如果您的服务器配置为发送电子邮件,但您仍然遇到无法发送表单条目的问题,这可能意味着您需要调整表单的设置。

    让我们来看看您应该为每个最流行的表单插件做什么才能让这些电子邮件再次发送。

    对于其中的每一个,我假设您已经尝试将SMTP添加到您的站点,或者您的服务器已经在发送电子邮件(并且您已经检查了垃圾邮件文件夹),但是电子邮件仍然没有通过。

    修复Contact Form 7不发送电子邮件

    Contact Form 7是最古老和最受欢迎的免费WordPress表单插件之一。

    如果您在发送电子邮件时遇到问题(并且您知道您的服务器正在发送电子邮件),则解决方法是更改​​发送电子邮件的地址。

    在您的WordPress管理后台中,转到Contact > Contact Forms

    Contact Form 7

    Contact Form 7

    选择您创建的表单并打开Mail选项卡。

    联系表格中的电子邮件选项卡

    联系表格中的电子邮件选项卡

    确保From字段包含您网站的管理员电子邮件地址,而不是表单中输入的电子邮件地址。您可以在Reply to字段中使用它,但不能在From字段中使用它。

    避免对“From和“To字段使用相同的电子邮件地址。使用与您网站使用的电子邮件地址不同的电子邮件地址。

    保存您的更改。

    现在通过自己填写表格来测试一下。

    修复Gravity Forms不发送电子邮件

    Gravity Forms是最受欢迎和备受推崇的高级表单插件之一。与使用Contact Form 7相比,您不太可能遇到不是从这个插件发送的电子邮件的问题,但如果确实发生了。您可以在插件文档中找到详细的指南。

    Gravity Forms文档

    Gravity Forms文档

    按顺序完成文档中的选项,直到一切恢复正常。

    修复Ninja Forms不发送电子邮件

    Ninja Forms有免费版和高级版。还有很多附加组件,您可以从WordPress插件库免费下载。

    如果您遇到与使用Ninja Forms的电子邮件相关的问题,推荐的解决方案是使用由同一团队开发的SendWP插件。

    SendWP

    SendWP

    SendWP旨在让SMTP在您的服务器上运行——您也可以使用免费插件来实现。如果问题与您的服务器不发送电子邮件无关,SendWP不会修复它。

    因此,如果您不想为SendWP支付每月9美元的费用,请尝试按照其文档中的电子邮件故障排除指南进行操作。

    修复HappyForms不发送电子邮件的问题

    HappyForms是另一个具有免费和高级版本的插件。

    HappyForms

    HappyForms

    HappyForms有一个帮助指南,但这并没有详细说明如果它的电子邮件没有发送该怎么办。

    要更改发送Happy Forms的电子邮件地址,您可以编辑单个表单的电子邮件设置,与Contact Form 7类似。

    转到HappyForms > All Forms并选择要编辑的表单。这将打开一个看起来像定制器的界面。

    打开Email选项卡。

    Happyforms电子邮件选项卡

    Happyforms电子邮件选项卡

    您可以在此处自定义通知和确认的ToFrom地址,以确保您不会发送欺骗性电子邮件。

    进行更改后,单击顶部的“Email按钮并测试您的表单。

    修复weForms不发送电子邮件

    weForms是另一个具有免费和高级版本的表单插件。它允许您将插件配置为通过一系列电子邮件提供商使用电子邮件,包括WordPress本身、SendGrid或其他。

    它有一个故障排除指南,可帮助您解决weForms不发送电子邮件的问题。按照指南确定问题的根源并让您的电子邮件重新正常工作。

    修复Jetpack联系表单不发送电子邮件

    如果您正在运行Jetpack插件,您可能会使用它附带的基本联系表。您可以通过向页面添加表单区块或在WordPress中发布来实现此目的。

    Jetpack没有专用表单插件那么多的配置选项,但您可以更改电子邮件发送到的地址。

    由于Jetpack不使用电子邮件的“To或“From字段中的表单字段,因此您不太可能遇到与电子邮件相关的问题。如果您确实遇到问题,那将是因为您向同一地址发送电子邮件或从同一地址发送电子邮件。

    添加表单后,单击其上方的编辑图标,将出现一个下拉菜单。使用它来更改发送表单的地址。

    Jetpack联系表

    Jetpack联系表

    如果您想更改发送表单的地址,则必须更改您网站的管理员电子邮件地址,因为这是Jetpack表单使用的地址。

    修复Formidable Forms不发送电子邮件

    Formidable Forms是另一个具有免费和高级版本的表单插件。如果您在Formidable Forms中从联系表单发送电子邮件时遇到问题,官方文档建议将SMTP添加到您的站点。

    但是,如果您已经这样做了,但仍然无法正常工作怎么办?好吧,这很可能是因为您的电子邮件被标记为“欺骗”电子邮件,因为它们是从不是真正的发送地址的地址发送的。

    在WordPress管理后台中,转到Formidable > Forms,然后选择要编辑的表单。单击顶部的Settings选项卡,然后单击侧面的Actions & Notifications选项卡。从这里,打开Email notification元框。

    Formidable Forms电子邮件通知设置

    Formidable Forms电子邮件通知设置

    您可以在此处编辑发送通知电子邮件的地址。默认情况下,它将使用管理员电子邮件地址,而不是从表单中获取的电子邮件地址。

    要更改电子邮件发送到的地址(因此它们不是从同一地址发送的),请编辑To字段并手动输入您要使用的电子邮件地址。

    设置屏幕将在您进行更改时保存更改,因此请确保检查您输入的内容是否正确。

    小结

    有时WordPress不发送电子邮件,您可能正在努力找出原因。这个问题是最常见的WordPress错误之一,可能是因为电子邮件将成为垃圾邮件,因为您的服务器未配置为发送电子邮件,或者因为您的联系表单中的设置需要更改。

    按照上面的指南诊断您的WordPress网站不发送电子邮件的原因并解决问题。您应该很快就能使电子邮件正常工作!

  • WordPress常见错误及解决方案大全

    错误类型:
    HTTP错误

    WordPress常见错误及解决方案大全

    WordPress网站出现错误是很正常的一件事情,尽管有些可能只造成较小的不便,但其他一些可能会导致严重的问题。停机,更新和安装失败以及资源丢失会导致访客无法访问或使用您的网站。这会损害网站信誉,并可能影响网站收入

    我们不可能做到100%知道每个潜在的WordPress错误。但是,了解用户体验的一些最常见的WordPress问题,当正在出现这些问题时,可以帮助站长快速解决问题。

    这篇文章涵盖了最常遇到的WordPress错误,提供了一些资源来帮助站长快速解决这些问题,使网站快速启动并重新运行。

    65+最常见的WordPress错误及其解决方法

    为了大家更好地阅读,按不同类型对这些错误进行了分组。并对WordPress网站的各个组件及其可能遇到的问题进行描述,然后是特定的错误及其解决方案。

    1. 400s错误
    2. 500s错误
    3. 与服务器相关的错误
    4. 与安全相关的错误
    5. WordPress多媒体错误
    6. 数据库错误
    7. PHP错误
    8. WordPress文件错误
    9. 浏览器错误
    10. 其他WordPress错误

    400s错误

    标记为400到499之间的数字错误是HTTP客户端错误。这通常意味着网站访问者在使用浏览器与网站服务器之间的通信过程中出现了问题。

    1. 400 Bad Request

    Google Chrome浏览器-400错误响应

    Google Chrome浏览器-400错误响应

    当网站服务器遇到客户端错误时,“400错误请求”响应是一个万能的响应,但它不属于特定类别这意味着此错误有几种可能的原因,包括:

    • 输入错误的URL或包含不允许的字符的URL。
    • 浏览器缓存或Cookie损坏。
    • 域名系统(DNS)数据和本地DNS缓存之间的差异。
    • 尝试上传太大的文件。
    • 某种常规服务器错误。

    可能的解决方案包括检查URL的输入错误,清除浏览器缓存和cookie,清除DNS缓存以及停用浏览器扩展。

    2. 403 Forbidden

    有许多措施可以确保您的WordPress网站安全,包括不同级别的“权限”。虽然此功能可以阻止不应访问您网站的用户进入,但如果权限设置不当,有时可能会引起问题。

    403 Forbidden error是一个这样的问题:

    Google Chrome中的403禁止访问响应

    Google Chrome中的403禁止访问响应

    要修复此问题,您需要重置文件权限或生成一个新的.htaccess文件。此问题也可能是由插件,内容交付网络(CDN)或热防盗链保护问题引起的

    3. 404 Not Found

    404错误  ,当用户尝试访问的网页不存在发生。他们没有找到他们想要的资源,而是看到了一个与此页面相似的页面:

    404错误页面示例

    404错误页面示例

    这个问题相对来说是无害的,但是对于用户却令人沮丧。为避免这种情况,请确保定期修复站点上无效链接,并在删除页面或将其移至新URL时应该执行重定向

    4. 405方法不被允许

    405方法不被允许错误是说,它已收到了浏览器的请求,但拒绝它由于某种原因,你的服务器的方式。

    有几种解决此问题的方法,包括回滚最近的主题和插件更新,检查服务器的配置和错误日志以及调试应用程序代码。

    5. 413请求实体太大

    如果浏览器中出现此错误,则意味着您尝试访问的站点的服务器太大,因此无法处理您发出的HTTP请求。

    如果您要上传非常“大”的文件,通常会发生这种情况。您可以通过增加最大HTTP请求大小来解决此问题

    6. 429 Too Many Requests

    如果用户在短时间内尝试访问某个资源太多次,则他们可能会收到429 Too Many Requests错误。这是服务器阻止可疑行为的方式。

    为帮助防止登录页面上的网络攻击可能导致429错误,您可以更改其默认URL。其他解决方案包括测试主题和插件冲突。

    500 Errors

    您网站上标有500到599之间的任何错误均表明您的服务器由于某种原因无法执行给定的请求。以下是一些最常见的示例。

    7. 500 Internal Server Error

    除了阻止用户访问您的网站之外,“500 Internal Server Error”(500内部服务器错误)如果不能快速解决,还会对您的SEO产生负面影响:

    Google Chrome浏览器提示内部服务器错误

    Google Chrome浏览器提示内部服务器错误

    不幸的是,500错误有许多可能的原因和解决方案,这可能会使解决此问题变得棘手。您可以先清除浏览器缓存并重新加载页面。如果这不起作用,则可以深入研究更多的技术调试方法

    8. 501 Not Implemented

    此错误意味着您的服务器不具备完成用户浏览器发出的请求所需的功能。服务器可能无法识别请求方法。

    与500内部服务错误一样,如果您在几个小时内仍未解决,则501错误可能会降低搜索引擎排名。您可以尝试重新加载页面,清除浏览器缓存以及禁用任何活动的代理设置来解决该问题。

    但是,您可能需要联系您的主机提供商以寻求帮助。

    9. 502 Bad Gateway

    如果一台服务器充当另一台服务器的代理或“网关”,则用户可能会遇到502 Bad Gateway错误。当代理从入站服务器收到无效响应时,会发生这种情况。

    502错误可能会影响您的SEO,因此最好尽快将其清除。重新加载页面并清除浏览器缓存是一个不错的起点。如果这些解决方案不起作用,请检查DNS问题,尝试禁用CDN或防火墙,或与主机联系以寻求帮助。

    10. 503 Service Unavailable

    出现503服务不可用错误时,表明由于某种原因,无法访问您的服务器。尽管您的网站正常运行,但用户将无法访问。

    这可能是由于日常维护,高流量级别或服务器出现的更严重的问题。好消息是503错误不会影响您的搜索引擎排名。但是,它仍然会使访问者非常烦恼。要解决此问题,您可以尝试:

    • 停用您的插件。
    • 切换到默认主题。
    • 禁用您的CDN。
    • 限制WordPress Heartbeat API。
    • 增加服务器的资源。
    • 启用WP_DEBUG

    如果这些解决方案都不起作用,则最好的做法是与服务器的支持团队联系。

    11. 504 Gateway Timeout

    与502错误类似,504网关超时响应是入站服务器与代理之间的通信问题的结果。从本质上讲,这意味着后者服务器在等待前者响应请求时超时。

    这种类型的错误可能会对您的SEO产生负面影响。可能的解决方案包括重新加载页面,禁用任何活动代理设置,检查DNS是否存在问题以及暂时禁用CDN。

    与服务器相关的错误

    您的服务器负责存储您所有WordPress网站的文件,并与浏览器进行通信以使您的内容可供用户使用。

    尽管已经列出的400和500错误以某种方式涉及您的服务器,但是还有一些特定于WordPress的问题可能是由服务器问题引起的。

    12. WordPress内存限制错误

    您的托管服务提供商会为您的站点分配一定数量的服务器内存。如果达到服务器的内存限制,则可能会遇到安装新插件或主题或将媒体文件上传到站点的问题。

    不会成功添加新资源,而是会显示一条消息:“fatal error: allowed memory size has been exhausted”。如果发生这种情况,您可以尝试通过编辑wp-config.php文件来增加PHP内存限制

    另外,您可以检查正在使用的磁盘空间,并考虑升级到新的托管计划,该计划为不断增长的WordPress网站提供更多空间。

    13. 上传文件超出php.ini文件upload_max_filesize指令限制 

    与此类似,主机还为可以上传到服务器的单个文件的最大大小设置了限制。您可以通过在WordPress仪表盘中导航至“ 媒体”>“添加新文件”  并查找最大上传文件大小来查看此限制:

    WordPress媒体上载程序中列出的最大上载文件大小

    WordPress媒体上载程序中列出的最大上载文件大小

    如果需要上传大于指定最大大小的文件,则可以通过编辑php.ini文件来更改限制。或者,您可以联系您的主机提供商,让他们协助解决。

    与尝试自己进行更改相比,这要简单得多,风险也要小得多,这对主机的支持团队来说应该不是问题。

    14. Fatal Error: Maximum Execution Time Exceeded

    服务器对脚本可以运行多长时间有限制(通常为30秒)。如果您的WordPress网站上的PHP脚本花费的时间超过了所分配的时间限制,您可能会看到以下消息:“致命错误:超过xx秒的最大执行时间”。

    您可以通过增加站点的执行时间限制来解决此问题。为此,您需要找到运行时间太长的脚本(可能是插件或主题的一部分),然后将其删除。

    15. Upload: Failed to Write File to Disk

    在您的文章和页面上添加图片可以使其变得更有用,更有趣,并带来更多的自然流量。但是,每当您尝试将媒体文件添加到站点时,如果看到诸如“ 上传:无法将文件写入磁盘 ”之类的消息,您将很难做到这一点。

    此错误通常是由于文件权限不正确引起的。您可以通过文件传输协议(FTP)更改文件权限来解决此问题。

    但是,这也可能是服务器的问题。当您将文件上传到WordPress时,它们首先被保存到服务器上的临时文件夹中。然后,将它们移动到适当的WordPress目录。如果更改文件权限不能解决此错误,请与您的主机联系,请他们清空您的临时文件目录,因为该目录可能已满并阻止了上传。

    16. Secure Connection Error

    当您更新WordPress安装的核心文件时,您的站点必须连接到WordPress.org。有时,由于服务器的配置,这是不可能的。结果是在WordPress仪表盘中出现警告。

    由于这是与您的服务器直接相关的问题,因此您可能需要联系主机才能解决。您的服务器可能受到DDoS攻击,在这种情况下,错误应很快自行解决。另外,您可以尝试通过安全外壳协议(SSH)将服务器指向WordPress.org来自己解决问题。

    与安全相关的错误

    在您的网站上实施WordPress安全最佳做法是明智的。网络攻击可能会造成严重破坏,需要大量资金进行修复。不幸的是,有时您采取的保护站点的措施可能会导致错误。

    17. Cloudflare Error 521

    尽管这是500个错误,就像我们在上一节中描述的那样,但它特定于Cloudflare。这个流行的平台用作CDN,用于防御DDoS和其他攻击。

    在您的网站上看到521错误意味着Cloudflare无法连接到您的服务器。它已关闭或由于某种原因阻止了该服务。一般而言,检查以确保服务器已启动并且其防火墙已将Cloudflare的所有IP范围都列入了白名单,这将使您知道导致问题的原因。然后,您可以采取步骤与主机一起工作并解决它。

    18. “抱歉,出于安全原因,不允许使用此文件类型”

    作为安全措施,WordPress具有允许的文件类型的标准列表。这样可以防止恶意方将可执行文件添加到您的站点中,这可能会损害用户的敏感信息。

    如果用户尝试上传不在该列表中的文件类型,他们将看到一条消息:“抱歉,出于安全原因,不允许使用此文件类型”:

    “抱歉,出于安全原因,不允许使用此文件类型”消息

    “抱歉,出于安全原因,不允许使用此文件类型”消息

    您可以通过编辑wp-config.php  文件来启用WordPress默认设置中不允许的文件类型上传。

    WP Extra File Types插件,也可以作为一种替代解决方案。

    19. “抱歉,您不能访问此页面”

    在本文的前面,我们简要地介绍了文件权限,但回顾一下,他们确定谁可以编辑WordPress网站上的哪些文件。这样可以使您的网站免受可能想要插入恶意代码的黑客的攻击。

    但是,如果您的权限设置不正确,它们可能会无意中阻止您或好心的用户访问您的网站。

    这可能会导致显示错误消息:“抱歉,您不能访问此页面”。

    “Sorry, you are not allowed to access this page” 错误

    “Sorry, you are not allowed to access this page” 错误

    有许多解决此问题的方法。您可能要尝试:

    • 通过安全文件传输协议(SFTP)重置文件权限。
    • 通过phpMyAdmin检查以确保为您的帐户分配了正确的用户角色。
    • 确保您的数据库前缀正确。
    • 解决插件和主题冲突。

    在最坏的情况下,您还可以还原网站的备份或重置WordPress

    20. “安装失败:无法创建目录”

    每当您在WordPress网站上安装插件主题时,其文件都会添加到您的服务器中。如果在安装或更新过程中收到消息“安装失败:无法创建目录”,则表明由于某种原因,WordPress无法将必要的文件添加到服务器。

    插件和主题更新也是如此。这是另一个与文件权限有关的错误。

    要解决此问题,请确保允许通过FTP在wp-adminwp-contentwp-includes目录中写入

    21. 不正确的文件权限

    除了拒绝您访问网站的某些区域(例如“抱歉,您不能访问此页面”错误)之外,不正确的文件权限还可能导致您无法进行以下操作:

    • 更新或安装插件和主题。
    • 发布或更新文章和页面。
    • 上传图片。

    另一方面,如果您的文件权限不太强,则会使您的网站容易受到攻击,并冒着黑客获取文件访问权的风险。他们可以在那里删除内容,窃取数据或添加自己的恶意代码。

    如果您遇到上述问题之一,或者怀疑自己已被黑客入侵,则可能需要通过SFTP验证文件权限:

    通过FileZilla更改文件夹和文件权限

    通过FileZilla更改文件夹和文件权限

    WordPress的默认数值:对于文件夹是755,对于文件是644。

    22. ERR_SSL_PROTOCOL_ERROR

    安全套接字层(SSL)证书是用于加密数据的安全措施。这样可以防止黑客窃取服务器之间传输的敏感数据,例如信用卡信息。

    如果您最近切换了托管服务提供商或在您的站点上安装了新的SSL证书,则可能会在浏览器中看到ERR_SSL_PROTOCOL_ERROR。这意味着,由于某种原因,您的服务器无法建立安全连接。

    您可以采取几个步骤来解决此问题,包括更新浏览器和操作系统,验证SSL证书,禁用浏览器扩展以及清除浏览器缓存和cookie。

    23. ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误可能表明您的浏览器或操作系统是过时的。这也可能是由SSL证书问题引起的,或者是在将WordPress网站迁移到新主机后弹出的。

    如果更新浏览器和操作系统没有帮助,请检查SSL证书中的名称不匹配。或者,清除计算机的SSL状态可以解决此问题,或者您的SSL证书可能已过时

    24. 混合内容警告

    将SSL证书添加到WordPress网站时,它将开始运行HTTPS而不是HTTP。如果您的网站尝试同时加载HTTPS和HTTP内容或脚本,则会看到混合内容警告

    这可能是以下形式的变体:“此站点不完全安全”。为了解决该错误,您需要执行一些步骤来确定要加载的HTTP资源,然后将其删除或替换为HTTPS资源。

    WordPress媒体错误

    在WordPress的世界中,“媒体”通常是指图像文件。但是,它也包括视频和音频。尽管这些元素可以为您的用户提供引人入胜且有趣的内容,但由于过程中可能会出现各种错误,因此有时很难合并它们。

    25. WordPress HTTP Error (上传图片至媒体库时)

    在尝试将文件上传到WordPress媒体库时,您可能遇到了模糊的“ HTTP错误”。通常,它会在图像上传器的右侧显示为一个小的弹出框。

    出现此问题的可能原因有几种,包括登录会话过期,文件名中不允许使用字符,错误的权限以及服务器端问题。

    首先,首先刷新页面。如果这样不起作用,请尝试调整媒体文件的大小或重命名。如果不走运,则应检查权限或暂时停用插件和主题。如果仍然无法完成上传,则可能需要与您的主机联系。

    26. “添加媒体”按钮不起作用

    在WordPress经典编辑器中,“ 添加媒体”  按钮是一项重要功能:

    WordPress经典编辑器的添加媒体按钮

    WordPress经典编辑器的添加媒体按钮

    此按钮使您可以快速上载新的媒体文件,或从媒体库中选择一个添加到文章中。但是,有时单击该按钮没有任何作用,或者它可能会完全从编辑器中丢失。

    如果是这种情况,则问题可能是由于插件或主题冲突引起的。您可以通过将定义(‘CONCATENATE_SCRIPTS’, false) 函数添加到wp-config.php文件中或通过对潜在的兼容性错误进行故障排除来解决该问题。

    27. 损坏的媒体文件

    如果您打开媒体库,发现所有图像全部消失或已被占位符替换,则文件可能被“破坏”:

    媒体库图片无法正常显示

    媒体库图片无法正常显示

    发生这种情况的原因多种多样,包括:

    • 您的服务器出现问题,例如性能问题。
    • 您的插件和/或主题之间的兼容性错误。
    • 不正确的文件权限。
    • 一个黑客或其他攻击。

    解决此问题,您可以尝试将上传目录的文件权限重置为755。如果这样不起作用,请查看是否存在任何插件冲突。此后,如果图像仍然损坏,请与您的主机提供商联系,以查看原因是否是服务器问题。

    28. “在裁剪您的图像时发生了错误”

    在WordPress媒体库中,您可以对上传的图像进行较小的编辑,例如旋转和裁剪。尝试以这种方式进行编辑时,您可能会收到消息:“裁剪图像时出错”或“There has been an error cropping your image”。

    有两个可能的原因导致此错误。首先是您正在使用过时的PHP版本,在这种情况下,您只需升级即可修复它。另一方面,您的服务器可能缺少必要的Graphics Draw(GD)软件包。

    在这种情况下,您需要按照安装步骤按照适当的步骤进行安装  。万一遇到麻烦,应联系您的主机提供商以寻求帮助。

    29. 不正确的Facebook缩略图

    社交分享是建立网站受众的有效方法。但是,有时在Facebook上分享您的文章时可能会显示错误的缩略图。

    当文章中的多个图像包含“Open Graph”(OG)标签时,通常会发生这种情况。Facebook使用此标签来猜测应该将其用于缩略图的图像,但是当包含多个图像时,平台就会感到困惑。

    解决此问题的一种方法是使用Yoast SEO的社交分享功能。通过此插件设置Facebook缩略图,可以确保正确的图像带有OG标签。

    数据库错误

    您的WordPress安装由两个关键部分组成:其文件和数据库。尽管您更有可能定期与前者进行互动,但是数据库对于站点正常运行的能力也至关重要。

    30. 建立数据库连接时出错

    如果您的网站无法与MySQL数据库建立连接,它将无法检索显示内容所需的数据。相反,您将看到如下错误:

    建立数据库连接时出错

    建立数据库连接时出错

    这将阻止用户查看您网站的前端,也将您锁定在WordPress仪表盘之外。此错误的最常见原因是您的数据库凭据不正确。您可以在wp-config.php文件中更改它们,查看相关解决方法

    31. WordPress数据库已损坏

    “损坏”是一个通用术语,适用于WordPress数据库和文件受到威胁或无法使用时。这通常会导致建立数据库连接时出错。

    理想情况下,您需要还原数据库的备份以替换损坏的版本。如果不可能,您还可以通过将define(’WP_ALLOW_REPAIR’,true)函数添加到wp-config.php文件中来解决此错误。

    建议阅读:阅读本指南,了解如何解决和修复WordPress数据库问题

    PHP错误

    PHP是WordPress不可或缺的一种编码语言。与它的功能有关的问题可能会阻止您编辑站点或导致干扰性消息和通知。

    32. WordPress中的PHP错误

    当WordPress网站的PHP出现问题时,您会在WordPress仪表盘顶部看到一条消息或警告,指出问题是什么以及哪些文件受到了影响。

    这些消息是供开发人员使用的,因此他们可以深入研究其站点的代码并修正问题。如果您没有PHP的经验,尝试解决这些错误可能会给您的网站造成更多问题。

    如果这描述了您的情况,请不要担心。PHP错误不应阻止您的网站运行或阻止用户访问它。

    理想情况下,您需要与可能导致问题的任何相关插件或主题的开发人员联系。否则,您可以聘请开发人员来修复它。

    33. “缺少临时文件夹”

    每当您将文件上传到WordPress网站时,该文件都会先存储在一个临时文件夹中,然后再移到其永久目录中。但是,服务器上不正确的PHP设置可能会阻止对该临时文件夹的访问,从而导致WordPress网站上出现错误。

    要解决此问题,您需要通过FTP访问服务器,并将以下功能添加到wp-config.php文件中:

    define(‘WP_TEMP_DIR’, dirname(__file__). ‘/wp-content/temp/’);
    define(‘WP_TEMP_DIR’, dirname(__file__). ‘/wp-content/temp/’);
    define(‘WP_TEMP_DIR’, dirname(__file__). ‘/wp-content/temp/’);

    然后,您可以将一个名为temp的新文件夹添加到wp-content目录。

    WordPress文件错误

    从您的文章和页面到插件和主题,您的WordPress安装包含数百个(如果不是数千个)文件。与这些关键组件有关的错误可能会导致内容丢失或不可用。

    34.“目标文件夹已存在”

    在WordPress网站上安装新主题或插件时,将在服务器上创建一个文件夹来存储其文件。如果您尝试安装插件或主题,并且服务器上已经保存了相同名称的文件夹,则会看到错误消息“目标文件夹已存在,插件安装失败”:

    “目标文件夹已存在”错误

    “目标文件夹已存在”错误

    遇到此问题时,您的第一步应该是检查是否已安装插件或主题。

    如果没有,请通过FTP访问服务器并导航到wp-content文件夹。然后,查看您的插件或主题,以查看是否存在与您尝试安装的组件同名的文件夹。删除该文件夹后,您可以再次尝试安装。

    35. WordPress主题样式表丢失

    CSS是一种编码语言,可确定您网站的“样式”。这可能包括颜色,字体和各种其他元素,这些元素使您的网站看起来很有趣。

    当涉及到WordPress主题时,所有必需的CSS都包含在一个名为“样式表”的文件中。如果您的主题样式表不可用,则您的网站将无法正确加载,并且您会看到错误消息:

    WordPress主题列表中的“样式表丢失”错误

    WordPress主题列表中的“样式表丢失”错误

    在主题安装期间也可能会发生这种情况:

    由于缺少样式表,主题安装失败

    由于缺少样式表,主题安装失败

    发生这种情况的原因可能是您主题的样式表尚未上载到服务器,或者是因为它的命名不正确,因此无法找到。要解决此问题,请通过FTP访问服务器,然后导航到主题的子目录。

    然后,查找您主题的样式表。如果不存在,请从主题文件中检索它,并将其上载到服务器。确保文件名为style.css  ,并保存在正确的主题文件夹中。

    36. Pluggable.php文件错误

    WordPress网站的pluggable.php文件使用户,插件和主题可以覆盖核心功能。如果插件或主题的编码不正确,则可能导致与此文件发生冲突。

    该问题将在WordPress仪表板中以php错误消息的形式出现,该消息引用了您的pluggable.php文件。但是,问题的根源通常不在pluggable.php本身内,例如可能是您的wp-config.phpfunctions.php

    相反,您需要在错误消息中找到冲突的实际位置。然后,导航到相关文件并通过删除空格,空行或类似内容来修复它

    37. WordPress文件已损坏

    就像您的WordPress数据库可能损坏,其文件也一样。这将使它们不可访问,这是一个大问题,尤其是在涉及核心文件时。

    损坏的文件可能是服务器故障,不正确的文件权限或PHP版本错误导致的。最简单的解决方法是还原站点备份。如果使用宝塔面板管理服务器,恢复备份也是非常方便的。

    您可以直接在“宝塔”面板中轻松恢复您的WordPress站点。只需按照以下步骤操作即可。

    需要清楚地知道宝塔面板不会自动备份网站文件及数据库,这跟大厂的备份一样,都需要你先启用备份计划,才会有备份数据。此外,宝塔面板的备份与云服务器提供商提供的一键备份还原有质的区别。

    像阿里云的每个备份都是创建备份时此环境的文件、数据库、重定向和Nginx配置的完整快照。当您恢复备份时,对网站文件、数据库、重定向和Nginx配置的所有更改都将回滚到创建备份的时间。

    但宝塔面板备份的仅是网站文件及数据库,不会对整个服务器进行备份及还原。

    第1步:首先,登录宝塔面板。转到左侧的“网站”,然后单击您需要为其恢复备份的WordPress站点的备份列下方的“备份入口”,或者直接访问/www/backup/site。

    WordPress网站备份

    WordPress网站备份

    第2步:将备份的数据压缩包解压并覆盖现有的网站目录,你也可以直接删除现有的网站数据,使用备份的数据直接替代旧数据。至此,即可恢复网站的文件数据。下面你,还需要恢复数据库。

    第3步:要“恢复”数据库,你需要进入宝塔面板的“数据库”,选择你需要恢复数据库的网站对应数据库行,点击备份下方的导入:

    WordPress数据库备份恢复

    WordPress数据库备份恢复

    选择最新的数据库备份文件,点击导入即可恢复网站数据库

    WordPress数据库备份恢复

    WordPress数据库备份恢复

    另外,您可以通过下载WordPress,通过FTP删除损坏的文件,然后从WordPress .zip  文件上传新副本来替换核心文件。

    浏览器错误

    访客使用自己选择的浏览器访问您的网站。这意味着各种浏览器错误都可能使用户无法访问您的网站。防止它们将有助于您避免流量阻塞。

    38. Chrome中的“不安全”警告

    使用Google Chrome浏览器浏览互联网时,您可能已经注意到某些网页的网址旁边有“不安全”警告:

    Google Chrome浏览器中的“不安全”警告

    Google Chrome浏览器中的“不安全”警告

    当网站未使用SSL证书时,浏览器将显示此警告。如果您的网页在用户的浏览器中触发了这些消息,则可能会损害您网站的信誉,并影响您的流量水平,SEO和转换率。为了防止这种情况的发生,您可以安装SSL证书

    最近,Chrome开始针对未使用TLS 1.2或1.3的网站显示ERR_SSL_OBSOLETE_VERSION警告消息

    39.“您的连接不是私密连接”浏览器错误

    甚至比Chrome中的“不安全”警告更糟糕的是“您的连接不是私密连接”页面。由于其SSL证书存在问题(或缺少SSL证书),此错误使用户无法轻松访问您的站点。

    如果他们遇到此页面,可能会因为害怕用户的个人信息被盗而吓跑用户。您可以通过确保正确安装SSL证书来尝试防止这种情况的发生,但这也可能是客户端必须自己修复用户的客户端问题。

    40.ERR_TOO_MANY_REDIRECTS

    重定向循环通常显示为“ERR_TOO_MANY_REDIRECTS”,发生在服务器上的重定向配置错误时。

    例如,这可能意味着URL 1指向URL 2,但是URL 2指向URL 1,从而导致无限循环。用户可以尝试通过删除网站的Cookie并清除其浏览器缓存来解决此错误。您也可以尝试确定重定向循环的性质,以便找出问题的根源,然后加以解决。

    41. ERR_CONNECTION_REFUSED

    像许多浏览器问题一样,ERR_CONNECTION_REFUSED问题通常不是由特定于WordPress引起的。但是,如果用户由于Chrome中的此消息而由于无法访问您的网站而与您联系,那么仍然可以帮助他们告诉他们如何解决问题。

    发生ERR_CONNECTION_REFUSED错误,因为用户的浏览器无法连接到您站点的服务器。这可能是服务器端的问题,在这种情况下,您应该检查网站是否关闭并联系托管服务提供商。或者,您可以尝试指示用户重新启动路由器并清除其浏览器缓存

    42. ERR_EMPTY_RESPONSE

    当用户的浏览器向您的站点发送请求并且您的服务器未发回任何内容时,就会发生ERR_EMPTY_RESPONSE问题。此问题最流行的修复方法是清除浏览器缓存并重置网络设置。

    您可能还想建议遇到此问题的用户禁用他们正在使用的所有Chrome扩展,并尝试暂时禁用其防病毒软件。

    43. DNS_PROBE_FINISHED_NXDOMAIN浏览器错误

    DNS是获取您网站IP地址并将其转换为可读域的系统,例如wbolt.com。如果您的DNS无法将您的域正确转换为站点的IP地址,则用户将在Chrome中看到DNS_PROBE_FINSHED_NXDOMAIN浏览器错误

    解决此问题的第一步是释放和更新您的IP地址。如果这不起作用,则可能建议用户尝试暂时禁用其防病毒软件或虚拟专用网络(VPN)。

    WordPress错误杂项疑难解答

    尽管许多WordPress错误可以追溯到特定原因,但其中一些诊断起来却有些困难。他们可能有多个可能的起源,或者引出了似乎并不重要的细节。

    以下是各种WordPress问题,它们与我们到目前为止已涵盖的类别不完全吻合。

    44.死亡白屏

    WordPress最著名的错误之一是“ 死亡白屏(WSoD)”。这会使您的网站向用户显示为空白页。此问题还可能使您无法使用WordPress仪表盘。通常,这是由插件兼容性问题引起的。

    解决该问题的最佳方法是找到引起冲突的插件并将其删除。其他可能的原因包括语法错误,达到站点的内存限制以及文件权限问题。

    45.锁定WordPress管理仪表盘

    您的WordPress仪表板对于许多任务非常重要,包括修复许多常见的WordPress错误。但是,有时您在网站上遇到的问题可能会使您无法进入WordPress仪表盘

    有许多可能的原因导致此问题。如果可以,请尝试确定是否由于另一个问题而被锁定,然后采取措施解决问题的根源。您也可以尝试还原站点的备份,或者如果认为它使您无法访问站点的后端,则可以通过FTP禁用安全插件

    46.无法通过SSH或SFTP连接

    有时,WordPress管理或故障排除将要求您直接访问服务器。SFTP使您能够访问文件,而SSH允许进行多种其他远程任务。

    如果您尝试使用SFTP或SSH来访问服务器但无法连接,则可能需要从known_hosts文件中删除过时的IP地址

    47. SSH连接被拒绝

    如果您尝试通过SSH连接到服务器,并且在命令行界面中看到一条显示“连接被拒绝”的消息,则问题略有不同:

    终端中的“连接拒绝”错误消息

    终端中的“连接拒绝”错误消息

    无需编辑known_hosts,而是需要检查一些与SSH配置有关的事项。

    首先,请确保您的服务器已安装SSH守护程序。您还应该检查您的凭据(连接SSH相关账号信息),并确定您正在使用的端口是否打开。该问题也可能是由于您的防火墙设置。

    48.正在执行例行维护

    每当您在WordPress网站上运行更新时,它都会暂时进入维护模式。在此期间,任何尝试访问您的网站的人都会看到一条消息,内容为:“正在执行例行维护,请一分钟后回来。”:

    WordPress中的“正在执行例行维护”消息

    WordPress中的“正在执行例行维护”消息

    这并不是真正的错误,因为它应该发生,但是用户可能会以不同的方式解释它。如果他们与您联系,但最终没有遇到麻烦,则建议您重新加载页面。

    另一方面,如果在WordPress中运行更新时看到此消息,则您的网站可能陷入了维护模式。

    49. WordPress卡在维护模式下

    在更新过程中关闭浏览器或运行批量插件更新可能会导致您的网站陷入维护模式。在这种情况下,您将看到与用户在运行更新时在前端看到的相同消息。

    幸运的是,解决此问题非常简单。您要做的就是通过FTP访问站点的文件,并删除一个名为.maintenance的文件

    FileZilla中的.maintenance文件

    FileZilla中的.maintenance文件

    之后,您可以返回您的网站,一切都会恢复正常。

    50.在您的实时网站上看不到更改

    如果您花了很多心血来对网站进行更新,只是为了检查前端并看到没有可见的内容,您可能会感到沮丧。好消息是,此问题通常很容易解决。

    通常,这是缓存问题的结果。首先,您可以尝试清除浏览器缓存。如果您的更改仍然不可见,并且您正在使用缓存插件,请查看其文档以了解如何清除插件的缓存。

    51.定时发布任务失败

    一致的上载时间表是强大的内容策略的一部分。WordPress通过使您能够安排文章在特定的日期和时间进行发布而对此提供了帮助。

    Scheduled Post Trigger插件

    Scheduled Post Trigger插件

    不幸的是,它并不总是按预期工作,从而导致错过计划错误。一般来说,解决此问题的最快方法是通过插件(例如Scheduled Post TriggerWP Scheduled Posts Pro)获得,或者通过编辑cron作业。

    52.自动更新失败

    为了帮助您的网站保持最新版本的WordPress,您可能已启用了自动更新。这对于简化网站维护和确保网站安全非常有用,但是有时也会导致问题。

    自动更新有时可能会失败,在这种情况下,您的网站可能会关闭并且对用户不可用。建议的修补程序是执行手动更新。

    53. WordPress导入问题

    由于各种原因,您可能会发现需要将内容导入WordPress网站。这是开发人员中相当普遍的做法,此任务通常使用各种插件。

    不幸的是,导入很容易导致PHP或HTTP超时。为了避免这些问题,您可以:

    • 切换到更快的Internet连接。
    • 使用WP-CLI导入文件。
    • 增加您的PHP超时限制。

    您可能还需要联系您的托管服务提供商,以获取解决此问题的帮助。

    54. WordPress性能问题

    您网站的性能或多或少是其速度的代名词。快速加载的页面可提供更好的UX和SEO,因此定期监视和优化您的网站速度非常重要。Pingdom是一个方便的工具,可以从多个位置测试加载时间:

    Pingdom网站速度测试

    Pingdom网站速度测试

    测试完网站后,Pingdom将为您提供有关如何改善其性能的建议列表。常见的解决方案包括图像压缩缓存启用CDN

    55. WordPress发送电子邮件失败

    电子邮件营销是许多WordPress网站的一项关键策略,可以提高您的流量水平和转换率。有几个可用的插件,使您能够从WordPress仪表板发送电子邮件,从而方便地将电子邮件营销平台与网站后端捆绑在一起。

    通常,如果没有将电子邮件发送给订户,那是因为服务器的配置。您的主机可能会限制您的站点可以使用的资源,从而阻止电子邮件发送出去。

    如果您怀疑服务器相关的问题,请与您的主机联系。您可能需要升级您的计划。或者,您使用的插件可能是问题的根源。在其支持论坛和文档中查看常见问题,或与开发人员联系以获取支持。

    最后,从WordPress发送的电子邮件可能被标记为垃圾邮件。如果用户就丢失的电子邮件与您联系,请告诉他们检查其垃圾文件夹以防万一。

    56. WordPress语法错误

    语法错误是指代码的语法或结构问题。这可能包括使用不正确的标点符号或其他错别字。在某些情况下,语法错误可能会导致无法进入仪表板及站点无法访问故障。

    尽管根本原因似乎无关紧要,但这种类型的错误还是很严重的。当您粘贴网上找到的代码片段时,常会发生这种情况。如果您最近做了类似的事情,那很可能是问题的根源。

    要解决此问题,请导航到使用FTP粘贴的代码段的位置,然后更正或删除它。

    57. WordPress侧边栏出现在内容下方

    侧边栏对于向用户显示关键内容非常有用,例如导航菜单,WordPress搜索功能,社交图标甚至免责声明。如果您的侧边栏看起来很奇怪,因为它出现在您内容的下方而不是旁边,那么您就遇到了问题。

    这通常是一个或多个主题文件中误用了<div>标签的结果。您需要跟踪问题的根源,以更正并修复代码。由于您网站的宽度有问题,float属性错误或WordPress主题有其他问题,因此也可能发生这种情况。

    关于WordPress主题侧边栏错位移位问题,您可以参考我们写的具体解决方案

    58.可视编辑器中的白色文本和缺少的按钮

    您的WordPress编辑器非常重要。没有它,向您的网站添加新内容将变得更加困难。如果您曾经打开过经典编辑器,发现工具栏上的所有按钮都丢失了,并且您的文本颜色设置为白色,那么您可能会感到无法使用该功能而感到困扰。

    通常,此错误是由于插件冲突或缓存问题引起的。如果清除浏览器缓存停用插件不能解决问题,则可能需要替换一些WordPress核心文件

    59. WordPress RSS Feed问题

    RSS Feed是通过策划来增强您的网站的简便方法。它们对于新闻网站和其他内容中心特别有用。但是,RSS Feed中的错误可能显得不专业,并阻止用户查看内容。

    在关闭functions.php文件或插件中的PHP标签后,由于多余的空格或换行符,可能会发生这些错误。您可以查找并删除它们,以消除此问题。另外,您可能还需要测试插件和主题的不兼容性,或者只是禁用WordPress的默认RSS feeds功能

    或者参考阅读如何修复WordPress网站RSS Feed错误一文。

    60. WordPress无法打开流媒体

    如果您看到显示“failed to open stream”的错误消息,则表明WordPress无法打开代码中引用的文件。

    该错误可能是由各种问题引起的,但是该消息通常会告诉您问题的根源是什么。可能的响应包括:

    • 没有相应的文件和目录。
    • 没有权限。
    • 操作失败。

    解决问题所需采取的措施取决于您所看到的响应。可能是文件丢失,权限设置不正确或WordPress无法连接到第三方API。

    61.密码重置密钥错误

    如果您的WordPress网站开放注册登录,则他们有时可能需要重设密码。在某些情况下,默认的密码重置电子邮件会提供一个链接,该链接将用户引导回登录页面,在该页面上,他们将看到以下消息:“此密钥无效或已被使用。请尝试再次重置密码。”

    通常,这是一个缓存问题。如果您的站点上安装了缓存插件,请确保已在插件设置中为“我的帐户”页面禁用了缓存。 还有站长报告了与CAPTCHA插件发生冲突的实例。

    62.登录页面不断刷新

    如果单击WordPress登录页面上的“ 登录”按钮只是刷新它而不是将您带到仪表盘,则可能是发生了错误:

    WordPress登录界面

    WordPress登录界面

    此问题可能是由于插件冲突,错误的WordPress地址或损坏的.htaccess文件引起的。

    63. WordPress不断自动退出登录

    与登录页面刷新错误不同,此问题在您短暂访问WordPress仪表盘,但随后突然自动退出登录。这通常是由于您的WordPress网站设置存在问题。

    如果遇到此错误,则“设置-常规”中的WordPress地址和站点地址可能不匹配:

    设置-常规中的WordPress地址和站点地址

    设置-常规中的WordPress地址和站点地址

    这可能包括看似很小的差异,例如两个URL开头是否都包含www。更改URL以使其匹配应该可以解决此问题。

    如果由于WordPress不断注销退出登录而无法通过仪表盘执行上述修复操作,则可以通过编辑wp-config.php文件来实现。

    64.“您确定要这样做吗?”

    WordPress中最令人沮丧的错误是没有给出可能导致它们的迹象的错误。出现错误消息“您确定要执行此操作吗?” 就是这样一个问题。

    通常,这是插件或主题冲突的结果,可以通过针对这种情况的标准故障排除来解决。如果这样做不起作用,则可能需要替换wp-config.php文件

    65.“另一项正在进行的更新”

    通常,如果您在WordPress仍在执行核心更新(即WordPress版本更新)的同时尝试运行插件或主题更新,则会出现“另一个更新正在进行中”错误。

    这通常在自动核心安全更新期间发生。第一次更新完成后,该消息应自动消失。如果不是这样,则说明您手上有错误。您可以通过从wp_options表中删除core_updater.lock行在phpMyAdmin中解决该问题。

    66.移至回收站错误

    WordPress使您可以通过单击按钮轻松地从您的站点中删除文章和页面。但是,尝试将内容移至垃圾箱时,各种问题都可能导致错误。

    这可能是由于缓存问题或插件冲突引起的。也可能是由于数据库损坏或不正确的文件权限所致。

    67. WordPress安装错误

    尽管WordPress安装非常简单,一般只需要五分钟即可,但仍可能会遇到麻烦。潜在的问题包括建立数据库连接错误500内部服务器错误

    您可能还会遇到PHP错误“Headers Already Sent”消息。这可能是由于代码中不必要的空格或PHP标记所致。该消息应会告诉您问题出在哪里,可以通过编辑相关文件来解决。

    68.“此站点正遇到技术问题”

    自WordPress 5.2发布以来,此错误已变得更加频繁。它通常出现在WordPress核心,插件或主题更新期间:

    错误消息显示-“此站点正遇到技术问题。”

    错误消息显示-“此站点正遇到技术问题。”

    此站点正遇到技术问题”通常是由于PHP内存限制错误或插件冲突。您可以通过不同的方式来增加站点的内存。

    要解决插件冲突,请尝试停用您的插件,然后逐个重新激活,以查看哪个插件导致错误再次出现。

    69.WordPress网站已关闭

    网站不可用可能会导致流量和收入损失。如果您确定WordPress网站已关闭,则第一步应该去确定是WordPress错误还是服务器遇到问题。其他WordPress错误的症状可能会提示您潜在的问题。

    如果不存在,则可以尝试检查服务器的错误日志。这是在宝塔面板中的操作方法(/www/server/nginx/logs):

    宝塔面板nginx访问错误日志

    宝塔面板nginx访问错误日志

    如果无法确定服务器为什么无法正常工作又或者无法解决,可以尝试联系主机提供商以寻求帮助。

    小结

    WordPress网站发生一些错误是站长最烦心的一件事情,毕竟并非每个站长拥有足够的经验去解决每一个报错。任何一个报错不仅会导致站长错过通过销售,广告浏览,SEO,转化,甚至佣金获得的收益。

    这也会使网站看起来不那么可靠,影响用户体验。

    将这些常见的WordPress错误进行归纳整理,以帮助站长们尽可能快速定位问题并执行修复。

    你对平时遭遇过的WordPress是否有印象,欢迎留言分享你的经验和见解。

  • 如何修复无法修改标头信息错误

    错误类型:
    WP内部错误
    错误名称:
    无法修改标头信息
    英文名称:
    Cannot modify header information
    错误描述:
    当您站点的.php文件之一无法执行时,您将遇到此错误。

    如何修复无法修改标题信息错误

    大多数WordPress错误消息让您了解是什么导致了您的网站出现问题。“警告:无法修改标头信息 – 标头已经发送( Warning: cannot modify header information – headers already sent by”)”错误也不例外。如果PHP文件由于代码问题而无法执行,您将遇到此消息。

    “无法修改标头信息”错误有多种潜在原因。幸运的是,消息本身会告诉您是哪个文件导致了问题。它甚至指向包含问题的代码行。

    在本文中,我们将讨论此错误及其原因。然后,我们将介绍两种解决问题的方法。

    1. 什么原因导致“无法修改标头信息 – 标头已发送”错误
    2. 如何解决“警告:无法修改标头信息 – 标头已发送”错误(2种方法)

    什么原因导致“无法修改标头信息 – 标头已发送”错误

    正如我们之前提到的,当您站点的.php文件之一无法执行时,您将遇到此错误。WordPress的依赖于.php文件,如WP-config.php文件functions.php中,其核心功能。

    如果您的网站需要加载的.php文件之一存在问题,您将看到如下所示的错误消息:

    Warning: Cannot modify header information – headers already sent by (output started at /home/public_html/wp-config.php:#) in /home/public_html/wp-includes/file-example.php on line 33
    Warning: Cannot modify header information – headers already sent by (output started at /home/public_html/wp-config.php:#) in /home/public_html/wp-includes/file-example.php on line 33
    Warning: Cannot modify header information - headers already sent by (output started at /home/public_html/wp-config.php:#) in /home/public_html/wp-includes/file-example.php on line 33

    幸运的是,“无法修改标头信息”错误提供了大量信息,使故障排除相对简单。该消息将指向两个文件 – 第一个包含问题,这会阻止第二个文件的执行。

    在错误消息的末尾,您会看到一个显示“第XX行”的部分。它显示了导致问题的特定代码的位置。

    通常,PHP代码中的问题很容易修复。可能触发错误消息的一些常见原因包括:

    • <?php代码段之前或?>结束标记之后的空格
    • 一个HTML块之前的PHP标头函数
    • printecho在PHP标头函数之前添加的语句
    • 插件代码的问题

    修复这些类型的错误要求您至少对修改PHP代码有一定的熟悉度。您不需要自己添加任何代码。

    不过,您可能需要一些额外的帮助来确定问题。如果问题与PHP标头函数之前的空格或语句无关,则尤其如此。

    如何解决“警告:无法修改标头信息 – 标头已发送”错误(2种方法)

    有两种方法可以解决“无法修改标头信息 – 标头已经发送”错误。第一种方法不需要您退出WordPress仪表盘。

    但是,如果您无法访问仪表盘或使用WordPress,则第二种策略使用FTP/SFTP。

    让我们从第一种故障排除方法开始。

    1.使用插件/主题编辑器修复错误或更换插件

    当您遇到“无法修改标头信息 – 标头已经发送”错误时,您需要做的第一件事是打开导致问题的文件。然后,找到消息指示的行。

    例如,如果您看到如下错误,则意味着您需要查看主题的functions.php文件:

    Warning: Cannot modify header information – headers already sent by (output started at /home/public_html/wp-content/themes/twentytwentyone/functions.php:#) in /home/public_html/wp-includes/file-example.php on line 1
    Warning: Cannot modify header information – headers already sent by (output started at /home/public_html/wp-content/themes/twentytwentyone/functions.php:#) in /home/public_html/wp-includes/file-example.php on line 1
    Warning: Cannot modify header information - headers already sent by (output started at /home/public_html/wp-content/themes/twentytwentyone/functions.php:#) in /home/public_html/wp-includes/file-example.php on line 1

    在这种情况下,您可以使用WordPress主题编辑器找到问题的根源 。要访问它,请转到外观>主题编辑器

    进入后,使用右侧的菜单选择您需要访问的文件。

    主题函数文件 (functions.php)

    主题函数文件 (functions.php)

    如果仔细观察,您会注意到<?php标签前有几个空格。错误消息本身指向第一行。因此,这告诉您空格是问题的根源。

    在此示例中,您所要做的就是删除空格并单击Update File。现在尝试重新加载您的网站,错误应该消失了。

    您可以使用WordPress插件编辑器(插件 >插件编辑器)应用相同的过程。如果错误消息指向错误的插件文件,则此方法适用。

    或者,您可能会遇到指示WordPress插件目录中的文件之一的错误。在这种情况下,您可以删除并重新安装该插件。在大多数情况下,这将为您解决问题。

    但是,请记住,您可能会丢失该插件的配置,具体取决于您使用的工具。因此,您可能需要再次设置加载项。

    2. 通过FTP/SFTP编辑问题文件

    在某些情况下,“无法修改标头信息 – 标头已经发送”错误的来源不会存在于您可以使用WordPress主题或插件编辑器访问的文件中。或者,您可能正在使用非WordPress网站。

    在这些情况下,最好的选择是使用FTP/SFTP访问问题文件。为此,您需要使用FTP或SFTP客户端, 例如FileZilla

    您还需要访问您网站的FTP/SFTP凭据。在大多数情况下,您应该能够在您的主机面板中找到它们。

    获得凭据后,使用FTP或SFTP客户端连接到您的网站。您需要找到站点的根文件夹。通常,它的名称应该是root、public_htmlpublic或您自己站点的名称。

    这是一个快速浏览WordPress根文件夹内部的样子。

    WordPress根文件夹

    WordPress根文件夹

    继续并找到“无法修改标头信息 – 标头已经发送”错误指示的文件。例如,如果问题是public/wp-config.php,请右键单击文件并选择查看/编辑选项。

    编辑wp.config文件

    编辑wp.config文件

    该选项将使用您的默认文本编辑器打开所选文件。打开文档后,通过导航到错误消息指向的行来定位问题。

    查找包含错误消息的行

    查找包含错误消息的行

     

    如果您无法发现错误,您可能需要咨询有处理 PHP 文件经验的人。但是,假设您正在处理空白问题或PHP标头之前的语句。在这种情况下,您应该能够自己解决问题。

    完成后,保存对文件的更改并关闭FTP/SFTP客户端。尝试重新访问您的网站,错误应该消失了。

    小结

    “警告:无法修改标头信息 – 标头已经发送”错误可能令人生畏,因为它输出了一条长消息。但是,该详细的错误消息使此错误的故障排除相对简单。与其他问题不同,这个问题足够礼貌,可以告诉您是哪个文件引起的,以及您需要查看哪一行代码。

    根据导致错误的文件,您可以通过两种方式对其进行故障排除:

    1. 使用插件/主题编辑器修复错误或更换插件。
    2. 通过FTP/SFTP客户端编辑问题文件。

    查找此错误的来源很简单。但是,如果您不熟悉PHP,修复它可能是一个问题。

  • 如何修复Safari无法与服务器建立安全连接错误

    错误类型:
    浏览器错误
    错误名称:
    Safari无法与服务器建立安全连接
    英文名称:
    Safari can’t establish a secure connection to the server
    错误描述:
    简而言之,此错误消息意味着浏览器不信任站点上的加密数据。或者,Safari无法成功访问和验证信息。例如,当站点没有 正确配置安全套接字层 (SSL) 证书时,可能会发生这种情况。

    如何修复Safari无法与服务器建立安全连接错误

    当您浏览网页时,您最不想看到的就是错误消息。如果您是macOS用户,您可能会遇到的问题之一是:“Safari无法与服务器建立安全连接”错误。

    虽然乍一看似乎令人生畏,但这是一个相对常见的问题,有一些简单的解决方案。在您能够有效(和安全)访问该站点之前,通常只需要进行一些故障排除。

    这篇文章将解释这个Safari错误消息是什么以及它的一些常见原因。然后我们将为您提供六种简单的方法来解决问题。

      1. 什么是“Safari无法与服务器建立安全连接”错误
      2. 什么导致“Safari无法与服务器建立安全连接”错误
      3. 如何修复“Safari无法与服务器建立安全连接”错误

    什么是“Safari无法与服务器建立安全连接”错误

    Mac设备的一些最佳功能是它们的内置安全设置。Apple创造了一种体验,旨在确保您和您的设备安全,尤其是在浏览网页时。

    这就是为什么它的原生浏览器Safari有时会阻止您访问它认为不安全的网站。发生这种情况时,您可能会看到一条错误消息,指出“Safari无法与服务器建立安全连接。”

      “Safari无法与服务器建立安全连接”错误

    “Safari无法与服务器建立安全连接”错误

     

    错误的具体措辞可能会有所不同。例如,如上图所示,您可能还会看到一条通知,告知您“Safari无法打开页面”。

    简而言之,此错误消息意味着浏览器不信任站点上的加密数据。或者,Safari无法成功访问和验证信息。例如,当站点没有 正确配置安全套接字层 (SSL) 证书时,可能会发生这种情况。

    使用SSL和安全外壳访问 (SSH) 对于当今的网站至关重要。当您有一个处理敏感客户数据的站点时尤其如此,例如WooCommerce商店。

    但是,如果您知道正在访问的站点是安全的,那么问题很可能出在Safari上。许多人在访问Facebook、YouTube和Google等热门网站时都会遇到此错误消息。

    什么导致“Safari无法与服务器建立安全连接”错误

    您看到此错误消息的原因可能有多种。正如我们提到的,主要的解释是Safari无法验证您尝试访问的网站是否足够安全以保护您的数据。

    但是,了解 为什么它认为该站点不安全并知道如何解决它是必不可少的。有时,在尝试排除故障之前,您可能不知道罪魁祸首是什么。

    话虽如此,“Safari无法建立安全连接”消息背后有一些常见原因。例如,问题可能归因于您在浏览器上安装的第三方扩展程序或附加组件。这可能就像拥有过时的缓存数据一样简单。但是,这可能是一个更复杂的问题,例如您使用的Internet协议 (IP)版本。

    如何修复“Safari无法与服务器建立安全连接”错误

    现在我们对这个问题及其潜在原因有了更多的了解,现在是时候看看如何解决它了。以下是可用于解决“Safari无法建立安全连接”错误的六种解决方案。

    1. 清除浏览器数据

    当您访问网站时,Safari会将部分信息存储在浏览器缓存和 cookie 中。如果此数据包含与站点SSL或加密相关的过时详细信息,则可能是您看到错误消息的原因。

    因此,您可以用来解决此错误的最快捷、最简单的方法之一是清除浏览器缓存。要在Safari中执行此操作,您可以首先打开浏览器。

    接下来,点击Preferences  > Privacy,然后选择Remove All Website Data

      清除Safari中的浏览器缓存

    清除Safari中的浏览器缓存。

     

    加载完成后(可能需要一两分钟),您可以决定从哪些网站清除数据。例如,您可以选择全部或仅选择您无法访问的那个。

    完成后,单击 屏幕底部的“完成”按钮。

    接下来,要清除整个浏览历史记录,您可以导航到 Safari  > History  > Clear History

      清除您的整个浏览历史记录

    清除您的整个浏览历史记录。

     

    完成后,尝试重新访问显示错误消息的站点。如果它仍然存在,您可以继续执行下一个解决方案。

    2. 检查设备的日期和时间

    虽然看起来很奇怪,但有时Mac设备上的日期和时间不正确可能会导致Safari出现一些问题。因此,必须确保您的时区和日期设置正确。

    首先,您可以单击Apple图标,然后导航至System Preferences  > Date & Time

      在首选项中找到日期和时间选项

    在首选项中找到日期和时间选项。

     

    从这里,您可以验证您使用的日期和时间是否正确。

      验证您使用的日期和时间是否正确

    验证您使用的日期和时间是否正确。

     

    时区选项卡下,您还可以让您的设备自动同步到您的当前位置。完成后,您可以退出窗口并尝试重新访问该站点。

    3. 更改您的DNS设置

    如果错误仍然存​​在,您可能需要检查您的域名服务器 (DNS) 设置。简而言之,您的DNS就像一个电话簿,允许设备和站点相互访问。Safari使用您的DNS设置连接到网站。

    如果您的DNS设置有问题,这可能就是您看到“Safari无法与服务器建立安全连接”消息的原因。要查看是否是这种情况(并解决),您可以尝试更改您的DNS地址。例如,您可以使用Google的公共DNS。

    首先,浏览到Apple  >  System Preferences  > Network

      在首选项中找到网络选项

    在首选项中找到网络选项。

     

    在此窗口中,选择您的连接,然后单击“高级”选项卡,然后单击“ DNS”。接下来,单击IPv4 或 IPv6 地址旁边的(+) 图标

      单击DNS选项卡

    单击DNS选项卡。

     

    然后您可以输入新的DNS IP地址。例如,如果你想使用谷歌的公共DNS,你可以输入“8.8.8.8”和“8.8.4.4”。

      输入新的DNS IP地址

    输入新的DNS IP地址。

     

    完成后,单击“确定” 按钮。重新检查网站以查看此过程是否删除了错误消息。

    4. 卸载或禁用您的浏览器扩展

    正如我们之前提到的,浏览器中的扩展程序或附加组件可能与Safari安全连接到站点的能力相冲突。有时,这在防病毒程序和与安全相关的扩展中很常见。

    因此,下一步是尝试停用所有浏览器扩展程序。为此,您可以打开Safari,然后导航到“首选项” 并单击“扩展” 选项卡。

      禁用或卸载浏览器扩展

    禁用或卸载浏览器扩展

     

    您的扩展列表将显示在左栏中。您可以单击加载项名称旁边的复选标记将其禁用。

    完成后,尝试重新访问该站点。如果这解决了问题,您将需要查明应归咎于哪个扩展。您可以通过系统地启用每个附加组件并在每次之后访问该站点来实现此目的。

    5. 禁用IPv6

    Internet协议 (IP) 是一组规则,用于控制数据在Internet上的移动方式。IPv6是较新的协议版本。但是,一些网站仍然使用旧版本IPv4。如果是这种情况,这可能就是您遇到“Safari无法建立安全连接”消息的原因。

    因此,您可以尝试在您的网络上禁用IPv6。为此,请再次导航至系统偏好设置>网络,然后单击您的网络连接,然后单击高级 按钮。

    TCP/IP选项卡下,单击配置IPv6下的下拉菜单 并选择手动

      配置IPv6并选择手动

    配置IPv6并选择手动

     

    完成后,单击“确定”按钮。如果 IPv6 是问题所在,这应该可以解决问题。如果没有,您可以尝试最后一个解决方案。

    6. 确保钥匙串信任证书

    早些时候,我们提到如果Safari无法验证站点SSL证书的有效性,它有时会如何显示连接错误消息。如果是这种情况,您可以通过在macOS的Keychain Access应用程序中配置设置来绕过该问题。

    Keychain Access是存储您的密码、帐户详细信息和应用程序证书的应用程序。它可以保护您的数据安全,并可以控制您的设备信任哪些站点。因此,您可以告诉它继续接受站点的 SSL 证书。

    为此,您可以访问显示错误消息的网站,然后单击地址栏左侧的锁定图标,然后单击查看/显示证书 >详细信息

      检查钥匙串是否信任证书

    检查钥匙串是否信任证书。

     

    展开Details面板后,单击Control + Space Bar。Spotlight 搜索栏将出现在屏幕的右上角。在搜索字段中输入“钥匙串”。

    接下来,在左侧,单击System Roots。搜索网站的证书。找到它后,转到“信任”部分。然后单击“使用此证书”部分旁边的下拉菜单 并选择“始终信任”

      选择“始终信任”选项

    选择“始终信任”选项

     

    而已!您现在应该能够成功访问该站点。

    小结

    试图访问一个网站只是为了遇到错误消息可能会非常令人沮丧。虽然Safari只是试图保护您的数据,但有时它可能会被错误配置。在这种情况下,浏览器可能会不必要地显示安全通知,例如“Safari无法建立安全连接”。

    发生此问题时,您可以使用六种方法来解决此问题:

    1. 清除浏览器数据,包括缓存和cookie。
    2. 检查设备的数据和时间。
    3. 更改您的DNS设置。
    4. 卸载或禁用您的浏览器扩展和加载项。
    5. 禁用IPv6。
    6. 确保钥匙串信任SSL证书。
  • 处理JavaScript错误的权威指南

    处理JavaScript错误的权威指南

    墨菲定律指出,任何可能出错的事情最终都会出错。这在编程世界中应用得太好了。如果您创建一个应用程序,您很可能会产生错误和其他问题。JavaScript中的错误就是这样一个常见问题!

    软件产品的成功取决于其创建者在伤害用户之前解决这些问题的能力。在所有编程语言中, JavaScript因其平均错误处理设计而臭名昭著。

    如果您正在构建一个JavaScript应用程序,那么您很有可能会在某一时刻弄乱数据类型。如果不是这样,那么您最终可能会将undefined替换为null或将三等号运算符 ( ===) 替换为双等号运算符 ( ==)。

    犯错是人之常情。这就是为什么我们将向您展示您需要了解的有关处理JavaScript错误的所有信息。

    本文将引导您了解JavaScript中的基本错误,并解释您可能遇到的各种错误。然后,您将学习如何识别和修复这些错误。还有一些技巧可以在生产环境中有效地处理错误。

    1. 什么是JavaScript错误?
    2. JavaScript中的错误类型
    3. 创建自定义错误类型
    4. JavaScript 中最常见的10个错误
    5. 如何识别和防止JavaScript中的错误
    6. 处理JavaScript错误的最佳实践

    什么是JavaScript错误?

    编程错误是指程序无法正常运行的情况。当程序不知道如何处理手头的工作时,可能会发生这种情况,例如尝试打开不存在的文件或在没有网络连接的情况下访问基于Web的API端点时。

    这些情况促使程序向用户抛出错误,说明它不知道如何继续。该程序收集尽可能多的有关错误的信息,然后报告它无法继续前进。

    聪明的程序员试图预测和覆盖这些场景,这样用户就不必独立地找出像“404”这样的技术错误信息。相反,它们显示了一条更容易理解的信息:“找不到该页面。”

    JavaScript中的错误是在发生编程错误时显示的对象。这些对象包含有关错误类型、导致错误的语句以及发生错误时的堆栈跟踪的大量信息。JavaScript还允许程序员创建自定义错误,以便在调试问题时提供额外信息。

    错误的属性

    现在JavaScript错误的定义已经很清楚了,是时候深入研究细节了。

    JavaScript中的错误带有某些标准和自定义属性,有助于理解错误的原因和影响。默认情况下,JavaScript中的错误包含三个属性:

    1. message : 携带错误信息的字符串值
    2. name:发生的错误类型(我们将在下一节深入探讨)
    3. stack:发生错误时执行的代码的堆栈跟踪。

    此外,error还可以携带columnNumber、lineNumber、fileName等属性,以更好地描述错误。但是,这些属性不是标准的,可能会出现在JavaScript应用程序生成的每个错误对象中,也可能不会出现。

    了解堆栈跟踪

    堆栈跟踪是发生异常或警告等事件时程序所在的方法调用列表。这是伴随异常的示例堆栈跟踪的样子:

    堆栈跟踪示例

    堆栈跟踪示例

    如您所见,它首先打印错误名称和消息,然后是被调用的方法列表。每个方法调用都说明其源代码的位置以及调用它的行。您可以使用这些数据浏览您的代码库并确定是哪段代码导致了错误。

    此方法列表以堆叠方式排列。它显示了您的异常首次引发的位置以及它如何通过堆叠的方法调用传播。为异常实现捕获不会让它通过堆栈向上传播并使您的程序崩溃。但是,您可能希望在某些情况下故意不捕获致命错误以使程序崩溃。

    错误与异常

    大多数人通常将错误和异常视为同一件事。但是,必须注意它们之间的细微但根本的区别。

    异常是已抛出的错误对象。

    为了更好地理解这一点,让我们举一个简单的例子。以下是如何在JavaScript中定义错误:

    const wrongTypeError = TypeError(“Wrong type found, expected character”)
    const wrongTypeError = TypeError(“Wrong type found, expected character”)
    const wrongTypeError = TypeError("Wrong type found, expected character")

    这就是wrongTypeError对象变成异常的方式:

    throw wrongTypeError
    throw wrongTypeError
    throw wrongTypeError

    然而,大多数人倾向于使用在抛出错误对象时定义错误对象的简写形式:

    throw TypeError(“Wrong type found, expected character”)
    throw TypeError(“Wrong type found, expected character”)
    throw TypeError("Wrong type found, expected character")

    这是标准做法。然而,这也是开发人员倾向于混淆异常和错误的原因之一。因此,即使您使用速记来快速完成工作,了解基础知识也至关重要。

    JavaScript中的错误类型

    JavaScript中有一系列预定义的错误类型。只要程序员没有明确处理应用程序中的错误,它们就会由 JavaScript 运行时自动选择和定义。

    本节将引导您了解JavaScript中一些最常见的错误类型,并了解它们发生的时间和原因。

    范围错误

    当变量设置为超出其合法值范围时,会引发RangeError。它通常发生在将值作为参数传递给函数时,并且给定值不在函数参数的范围内。使用文档记录不佳的第三方库时,有时修复起来会很棘手,因为您需要知道参数的可能值范围才能传递正确的值。

    RangeError发生的一些常见场景是:

    • 试图通过Array构造函数创建一个非法长度的数组。
    • 将错误值传递给数字方法,如toExponential()toPrecision(),toFixed()等。
    • 将非法值传递给字符串函数,例如normalize().

    参考错误

    当您的代码中的变量引用出现问题时,就会发生ReferenceError。您可能忘记在使用变量之前为其定义值,或者您可能试图在代码中使用不可访问的变量。在任何情况下,通过堆栈跟踪提供了充足的信息来查找和修复有错误的变量引用。

    ReferenceErrors发生的一些常见原因是:

    • 在变量名中打错字。
    • 试图访问其范围之外的块范围变量。
    • 在加载之前从外部库引用全局变量(例如 $ from jQuery)。

    语法错误

    这些错误是最容易修复的错误之一,因为它们表明代码语法有错误。由于JavaScript是一种解释而不是编译的脚本语言,因此当应用程序执行包含错误的脚本时会抛出这些脚本语言。在编译语言的情况下,在编译过程中会识别出此类错误。因此,在修复之前不会创建应用程序二进制文件。

    可能发生SyntaxErrors的一些常见原因是:

    • 缺少引号
    • 缺少右括号
    • 花括号或其他字符的不正确对齐

    最好在IDE中使用linting工具在此类错误出现在浏览器之前为您识别这些错误。

    类型错误

    TypeError是JavaScript应用程序中最常见的错误之一。当某些值不是特定的预期类型时,会创建此错误。发生时的一些常见情况是:

    • 调用不是方法的对象。
    • 试图访问空对象或未定义对象的属性
    • 将字符串视为数字,反之亦然

    发生TypeError的可能性还有很多。稍后我们将查看一些著名的实例并学习如何修复它们。

    内部错误

    当JavaScript运行时引擎中发生异常时使用InternalError类型。它可能表示也可能不表示您的代码存在问题。

    通常,InternalError仅在两种情况下发生:

    • 当JavaScript运行时的补丁或更新带有引发异常的错误时(这种情况很少发生)
    • 当你的代码包含对JavaScript引擎来说太大的实体时(例如太多的switch case、太大的数组初始化器、太多的递归)

    解决此错误的最合适方法是通过错误消息确定原因,并在可能的情况下重构您的应用程序逻辑,以消除JavaScript引擎上的工作负载突然激增。

    URI错误

    URIError发生在全局URI处理函数如decodeURIComponent被非法使用时。它通常表示传递给方法调用的参数不符合URI标准,因此没有被方法正确解析

    诊断这些错误通常很容易,因为您只需要检查参数是否存在畸形。

    评估错误

    当函数eval()调用发生错误时会发生EvalError 。eval()函数用于执行存储在字符串中的 JavaScript 代码。但是,由于安全问题,强烈建议不要使用eval()函数,并且当前的ECMAScript规范不再抛出EvalError类,因此存在此错误类型只是为了保持与旧版JavaScript代码的向后兼容性。

    如果您使用的是旧版本的JavaScript,则可能会遇到此错误。无论如何,最好调查eval()函数调用中执行的代码是否有任何异常。

    创建自定义错误类型

    虽然JavaScript提供了足够的错误类型列表来涵盖大多数场景,但如果列表不满足您的要求,您始终可以创建新的错误类型。这种灵活性的基础在于JavaScript允许您使用throw命令逐字地抛出任何东西。

    因此,从技术上讲,这些声明是完全合法的:

    throw 8
    throw “An error occurred”
    throw 8
    throw “An error occurred”
    throw 8
    throw "An error occurred"

    但是,抛出原始数据类型不会提供有关错误的详细信息,例如其类型、名称或随附的堆栈跟踪。为了解决这个问题并标准化错误处理过程,我们提供了Error这个类。也不鼓励在抛出异常时使用原始数据类型。

    您可以扩展Error类以创建您的自定义错误类。以下是如何执行此操作的基本示例:

    class ValidationError extends Error {
    constructor(message) {
    super(message);
    this.name = “ValidationError”;
    }
    }
    class ValidationError extends Error {
    constructor(message) {
    super(message);
    this.name = “ValidationError”;
    }
    }
    class ValidationError extends Error {
    constructor(message) {
    super(message);
    this.name = "ValidationError";
    }
    }

    您可以通过以下方式使用它:

    throw ValidationError(“Property not found: name”)
    throw ValidationError(“Property not found: name”)
    throw ValidationError("Property not found: name")

    然后您可以使用instanceof关键字识别它:

    try {
    validateForm() // code that throws a ValidationError
    } catch (e) {
    if (e instanceof ValidationError)
    // do something
    else
    // do something else
    }
    try {
    validateForm() // code that throws a ValidationError
    } catch (e) {
    if (e instanceof ValidationError)
    // do something
    else
    // do something else
    }
    try {
    validateForm() // code that throws a ValidationError
    } catch (e) {
    if (e instanceof ValidationError)
    // do something
    else
    // do something else
    }

    JavaScript中最常见的10个错误

    现在您已经了解了常见的错误类型以及如何创建自定义错误类型,是时候看看您在编写JavaScript代码时会遇到的一些最常见的错误了。

    1. Uncaught RangeError

    在几种不同的情况下,Google Chrome中会出现此错误。首先,如果您调用递归函数并且它不会终止,则可能会发生这种情况。您可以在Chrome开发者控制台中自行查看:

    带有递归函数调用的RangeError示例

    带有递归函数调用的RangeError示例

    因此,要解决此类错误,请确保正确定义递归函数的边界情况。发生此错误的另一个原因是您传递的值超出了函数的参数范围。这是一个例子:

    带有toExponential()调用的RangeError示例

    带有toExponential()调用的RangeError示例

    错误消息通常会指出您的代码有什么问题。一旦你做出改变,它就会得到解决。

    toExponential() 函数调用的输出

    toExponential() 函数调用的输出

    2. Uncaught TypeError: Cannot set property

    当您在未定义的引用上设置属性时会发生此错误。您可以使用此代码重现该问题:

    var list
    list.count = 0
    var list
    list.count = 0
    var list
    list.count = 0

    这是您将收到的输出:

    类型错误示例

    类型错误示例

    要修复此错误,请在访问其属性之前使用值初始化引用。以下是修复后的外观:

    如何修复类型错误

    如何修复类型错误

    3. Uncaught TypeError: Cannot read property

    这是JavaScript中最常出现的错误之一。当您尝试读取属性或调用未定义对象的函数时,会发生此错误。您可以通过在Chrome开发人员控制台中运行以下代码来非常轻松地重现它:

    var func
    func.call()
    var func
    func.call()
    var func
    func.call()

    这是输出:

    带有未定义函数的TypeError示例

    带有未定义函数的TypeError示例

    未定义的对象是导致此错误的众多可能原因之一。此问题的另一个突出原因可能是在呈现 UI 时未正确初始化状态。这是来自React应用程序的真实示例:

    import React, { useState, useEffect } from “react”;
    const CardsList = () => {
    const [state, setState] = useState();
    useEffect(() => {
    setTimeout(() => setState({ items: [“Card 1”, “Card 2”] }), 2000);
    }, []);
    return (
    <>
    {state.items.map((item) => (
    <li key={item}>{item}</li>
    ))}
    </>
    );
    };
    export default CardsList;
    import React, { useState, useEffect } from “react”;
    const CardsList = () => {
    const [state, setState] = useState();
    useEffect(() => {
    setTimeout(() => setState({ items: [“Card 1”, “Card 2”] }), 2000);
    }, []);
    return (
    <>
    {state.items.map((item) => (
    <li key={item}>{item}</li>
    ))}
    </>
    );
    };
    export default CardsList;
    import React, { useState, useEffect } from "react";
    const CardsList = () => {
    const [state, setState] = useState();
    useEffect(() => {
    setTimeout(() => setState({ items: ["Card 1", "Card 2"] }), 2000);
    }, []);
    return (
    <>
    {state.items.map((item) => (
    <li key={item}>{item}</li>
    ))}
    </>
    );
    };
    export default CardsList;

    该应用程序从一个空状态容器开始,并在延迟2秒后提供一些项目。延迟用于模拟网络调用。即使您的网络速度非常快,您仍然会面临轻微的延迟,因为该组件将至少呈现一次。如果您尝试运行此应用程序,您将收到以下错误:

    浏览器中的TypeError堆栈跟踪

    浏览器中的TypeError堆栈跟踪

    这是因为,在渲染时,状态容器是未定义的;因此,它不存在任何财产items。修复这个错误很容易。您只需要为状态容器提供初始默认值。

    // …
    const [state, setState] = useState({items: []});
    // …
    // …
    const [state, setState] = useState({items: []});
    // …
    // ...
    const [state, setState] = useState({items: []});
    // ...

    现在,在设置延迟之后,您的应用程序将显示类似的输出:

    代码输出

    代码输出

    代码中的确切修复可能会有所不同,但这里的本质是始终在使用变量之前正确初始化它们。

    4. TypeError: ‘undefined’ is not an object

    当您尝试访问未定义对象的属性或调用未定义对象的方法时,会在Safari中发生此错误。您可以从上面运行相同的代码来自己重现错误。

    带有未定义函数的TypeError示例

    带有未定义函数的TypeError示例

    这个错误的解决方法也是一样的——确保你已经正确地初始化了你的变量,并且在访问一个属性或方法时它们不是未定义的。

    5. TypeError: null is not an object

    这又与前面的错误相似。它发生在Safari上,这两个错误之间的唯一区别是,当正在访问其属性或方法的对象null不是undefined. 您可以通过运行以下代码来重现这一点:

    var func = null
    func.call()
    var func = null
    func.call()
    var func = null
    func.call()

    这是您将收到的输出:

    带有null函数的TypeError示例

    带有null函数的TypeError示例

    因为null是显式设置为变量的值,而不是由JavaScript自动分配的值。仅当您尝试访问null自己设置的变量时,才会发生此错误。因此,您需要重新访问您的代码并检查您编写的逻辑是否正确。

    6. TypeError: Cannot read property ‘length’

    当您尝试读取nullundefined对象的长度时,Chrome中会出现此错误。这个问题的原因和前面的问题类似,但是在处理列表的时候出现的频率比较高;因此值得特别提及。以下是重现问题的方法:

    带有未定义对象的TypeError示例

    带有未定义对象的TypeError示例

    但是,在较新版本的Chrome中,此错误报告为Uncaught TypeError: Cannot read properties of undefined. 这是它现在的样子:

    在较新的Chrome版本上带有未定义对象的TypeError示例

    在较新的Chrome版本上带有未定义对象的TypeError示例

    再次,修复是确保您尝试访问其长度的对象存在并且未设置为null.

    7. TypeError: ‘undefined’ is not a function

    当您尝试调用脚本中不存在的方法或该方法存在但无法在调用上下文中引用时,会发生此错误。这个错误通常发生在谷歌浏览器中,您可以通过检查抛出错误的代码行来解决它。如果您发现拼写错误,请修复它并检查它是否能解决您的问题。

    如果您在代码中使用了自引用关键字this,如果this没有适当地绑定到您的上下文,则可能会出现此错误。考虑下面的代码:

    function showAlert() {
    alert(“message here”)
    }
    document.addEventListener(“click”, () => {
    this.showAlert();
    })
    function showAlert() {
    alert(“message here”)
    }
    document.addEventListener(“click”, () => {
    this.showAlert();
    })
    function showAlert() {
    alert("message here")
    }
    document.addEventListener("click", () => {
    this.showAlert();
    })

    如果执行上述代码,它将抛出我们讨论过的错误。之所以会发生这种情况,是因为作为事件侦听器传递的匿名函数正在document的上下文中执行。

    相比之下,showAlert函数是在window的上下文中定义的。

    为了解决这个问题,您必须通过将函数与bind()方法绑定来传递对函数的正确引用:

    document.addEventListener(“click”, this.showAlert.bind(this))
    document.addEventListener(“click”, this.showAlert.bind(this))
    document.addEventListener("click", this.showAlert.bind(this))

    8. ReferenceError: event is not defined

    当您尝试访问未在调用范围内定义的引用时,会发生此错误。这通常发生在处理事件时,因为它们经常为您提供event回调函数中调用的引用。如果您忘记在函数的参数中定义事件参数或拼写错误,则可能会发生此错误。

    在Internet Explorer或Google Chrome中可能不会发生此错误(因为IE提供了一个全局事件变量,并且Chrome会自动将事件变量附加到处理程序),但它可能在Firefox中发生。所以建议留意这样的小错误。

    9. TypeError: Assignment to constant variable

    这是由于粗心造成的错误。如果您尝试将新值分配给常量变量,您将遇到这样的结果:

    带有常量对象分配的TypeError示例

    带有常量对象分配的TypeError示例

    虽然现在看起来很容易修复,但想象一下数百个这样的变量声明,其中一个被错误地定义为const而不是let! 与PHP等其他脚本语言不同,在JavaScript中声明常量和变量的风格差别很小。因此,当您遇到此错误时,建议首先检查您的声明。如果您忘记上述引用是一个常量并将其用作变量,您也可能会遇到此错误。这表明您的应用程序逻辑存在粗心或缺陷。尝试解决此问题时,请务必检查此项。

    10.(unknown): Script error

    当第三方脚本向您的浏览器发送错误时,就会发生脚本错误。此错误后跟(未知),因为第三方脚本与您的应用属于不同的域。浏览器隐藏了其他细节,以防止第三方脚本泄露敏感信息。

    在不了解完整详细信息的情况下,您无法解决此错误。您可以执行以下操作来获取有关该错误的更多信息:

    1. 在脚本标签中添加crossorigin属性。
    2. 在托管脚本的服务器上设置正确的Access-Control-Allow-Origin标头。
    3. [可选] 如果您无权访问托管脚本的服务器,您可以考虑使用代理将您的请求中继到服务器并返回到带有正确标头的客户端。

    一旦您可以访问错误的详细信息,您就可以着手解决问题,这可能与第三方库或网络有关。

    如何识别和防止JavaScript中的错误

    虽然上面讨论的错误是JavaScript中最常见和最常见的错误,但您会遇到,仅仅依靠几个示例是远远不够的。在开发JavaScript应用程序时,了解如何检测和防止任何类型的错误至关重要。以下是如何处理JavaScript中的错误。

    手动抛出和捕获错误

    处理手动或运行时抛出的错误的最基本方法是捕获它们。与大多数其他语言一样,JavaScript提供了一组关键字来处理错误。在着手处理JavaScript应用程序中的错误之前,必须深入了解它们中的每一个。

    throw

    该集合的第一个也是最基本的关键字是throw. 很明显,throw关键字用于抛出错误以在JavaScript运行时手动创建异常。我们已经在本文前面讨论过这个问题,这里是这个关键字意义的要点:

    • 你可以throw做任何事情,包括数字、字符串和Error对象。
    • 但是,不建议抛出诸如字符串和数字之类的原始数据类型,因为它们不携带有关错误的调试信息。
    • 例子:throw TypeError("Please provide a string")

    try

    try关键字用于指示代码块可能会引发异常。它的语法是:

    try {
    // error-prone code here
    }
    try {
    // error-prone code here
    }
    try {
    // error-prone code here
    }

    重要的是要注意,catch块必须始终跟随try块才能有效地处理错误。

    catch

    catch关键字用于创建一个catch块。此代码块负责处理尾随try块捕获的错误。这是它的语法:

    catch (exception) {
    // code to handle the exception here
    }
    catch (exception) {
    // code to handle the exception here
    }
    catch (exception) {
    // code to handle the exception here
    }

    这就是你如何一起实现trycatch块的方式:

    try {
    // business logic code
    } catch (exception) {
    // error handling code
    }
    try {
    // business logic code
    } catch (exception) {
    // error handling code
    }
    try {
    // business logic code
    } catch (exception) {
    // error handling code
    }

    与C++或Java不同,您不能将多个catch块附加到JavaScript中的try块。这意味着您不能这样做:

    try {
    // business logic code
    } catch (exception) {
    if (exception instanceof TypeError) {
    // do something
    }
    } catch (exception) {
    if (exception instanceof RangeError) {
    // do something
    }
    }
    try {
    // business logic code
    } catch (exception) {
    if (exception instanceof TypeError) {
    // do something
    }
    } catch (exception) {
    if (exception instanceof RangeError) {
    // do something
    }
    }
    try {
    // business logic code
    } catch (exception) {
    if (exception instanceof TypeError) {
    // do something
    }
    } catch (exception) {
    if (exception instanceof RangeError) {
    // do something
    }
    }

    相反,您可以在单个catch块中使用if...else语句或switch case语句来处理所有可能的错误情况。它看起来像这样:

    try {
    // business logic code
    } catch (exception) {
    if (exception instanceof TypeError) {
    // do something
    } else if (exception instanceof RangeError) {
    // do something else
    }
    }
    try {
    // business logic code
    } catch (exception) {
    if (exception instanceof TypeError) {
    // do something
    } else if (exception instanceof RangeError) {
    // do something else
    }
    }
    try {
    // business logic code
    } catch (exception) {
    if (exception instanceof TypeError) {
    // do something
    } else if (exception instanceof RangeError) {
    // do something else
    }
    }

    finally

    finally关键字用于定义在处理错误后运行的代码块。该块在try和catch块之后执行。

    此外,无论其他两个块的结果如何,都会执行finally块。这意味着即使catch块不能完全处理错误或者catch块中抛出错误,解释器也会在程序崩溃之前执行finally块中的代码。

    要被认为是有效的,JavaScript中的try块需要后跟catch或finally块。如果没有这些,解释器将引发SyntaxError。因此,在处理错误时,请确保至少遵循您的try块。

    使用onerror()方法全局处理错误

    onerror()方法适用于所有HTML元素,用于处理它们可能发生的任何错误。例如,如果img标签找不到指定URL的图像,它会触发其onerror方法以允许用户处理错误。

    通常,您会在onerror调用中提供另一个图像URL,以便img标记回退到。这是您可以通过JavaScript执行此操作的方法:

    const image = document.querySelector(“img”)
    image.onerror = (event) => {
    console.log(“Error occurred: “ + event)
    }
    const image = document.querySelector(“img”)
    image.onerror = (event) => {
    console.log(“Error occurred: ” + event)
    }
    const image = document.querySelector("img")
    image.onerror = (event) => {
    console.log("Error occurred: " + event)
    }

    但是,您可以使用此功能为您的应用创建全局错误处理机制。以下是您的操作方法:

    window.onerror = (event) => {
    console.log(“Error occurred: “ + event)
    }
    window.onerror = (event) => {
    console.log(“Error occurred: ” + event)
    }
    window.onerror = (event) => {
    console.log("Error occurred: " + event)
    }

    使用此事件处理程序,您可以摆脱try...catch代码中的多个块,并集中您的应用程序的错误处理,类似于事件处理。您可以将多个错误处理程序附加到窗口,以维护SOLID设计原则中的单一责任原则。解释器将循环遍历所有处理程序,直到到达适当的处理程序。

    通过回调传递错误

    虽然简单和线性函数允许错误处理保持简单,但回调会使事情复杂化。

    考虑以下代码:

    const calculateCube = (number, callback) => {
    setTimeout(() => {
    const cube = number * number * number
    callback(cube)
    }, 1000)
    }
    const callback = result => console.log(result)
    calculateCube(4, callback)
    const calculateCube = (number, callback) => {
    setTimeout(() => {
    const cube = number * number * number
    callback(cube)
    }, 1000)
    }
    const callback = result => console.log(result)
    calculateCube(4, callback)
    const calculateCube = (number, callback) => {
    setTimeout(() => {
    const cube = number * number * number
    callback(cube)
    }, 1000)
    }
    const callback = result => console.log(result)
    calculateCube(4, callback)

    上面的函数演示了一个异步条件,其中一个函数需要一些时间来处理操作并稍后在回调的帮助下返回结果。

    如果您尝试在函数调用中输入字符串而不是4,您将得到NaN结果。

    这需要妥善处理。就是这样:

    const calculateCube = (number, callback) => {
    setTimeout(() => {
    if (typeof number !== “number”)
    throw new Error(“Numeric argument is expected”)
    const cube = number * number * number
    callback(cube)
    }, 1000)
    }
    const callback = result => console.log(result)
    try {
    calculateCube(4, callback)
    } catch (e) { console.log(e) }
    const calculateCube = (number, callback) => {
    setTimeout(() => {
    if (typeof number !== “number”)
    throw new Error(“Numeric argument is expected”)
    const cube = number * number * number
    callback(cube)
    }, 1000)
    }
    const callback = result => console.log(result)
    try {
    calculateCube(4, callback)
    } catch (e) { console.log(e) }
    const calculateCube = (number, callback) => {
    setTimeout(() => {
    if (typeof number !== "number")
    throw new Error("Numeric argument is expected")
    const cube = number * number * number
    callback(cube)
    }, 1000)
    }
    const callback = result => console.log(result)
    try {
    calculateCube(4, callback)
    } catch (e) { console.log(e) }

    这应该可以理想地解决问题。但是,如果您尝试将字符串传递给函数调用,您将收到以下信息:

    错误参数的错误示例

    错误参数的错误示例

    即使您在调用函数时实现了try-catch块,它仍然表示错误未捕获。由于超时延迟,在执行catch块后抛出错误。

    这可能在网络调用中很快发生,在这种情况下会出现意外延迟。您需要在开发应用程序时涵盖此类情况。

    以下是在回调中正确处理错误的方法:

    const calculateCube = (number, callback) => {
    setTimeout(() => {
    if (typeof number !== “number”) {
    callback(new TypeError(“Numeric argument is expected”))
    return
    }
    const cube = number * number * number
    callback(null, cube)
    }, 2000)
    }
    const callback = (error, result) => {
    if (error !== null) {
    console.log(error)
    return
    }
    console.log(result)
    }
    try {
    calculateCube(‘hey’, callback)
    } catch (e) {
    console.log(e)
    }
    const calculateCube = (number, callback) => {
    setTimeout(() => {
    if (typeof number !== “number”) {
    callback(new TypeError(“Numeric argument is expected”))
    return
    }
    const cube = number * number * number
    callback(null, cube)
    }, 2000)
    }
    const callback = (error, result) => {
    if (error !== null) {
    console.log(error)
    return
    }
    console.log(result)
    }
    try {
    calculateCube(‘hey’, callback)
    } catch (e) {
    console.log(e)
    }
    const calculateCube = (number, callback) => {
    setTimeout(() => {
    if (typeof number !== "number") {
    callback(new TypeError("Numeric argument is expected"))
    return
    }
    const cube = number * number * number
    callback(null, cube)
    }, 2000)
    }
    const callback = (error, result) => {
    if (error !== null) {
    console.log(error)
    return
    }
    console.log(result)
    }
    try {
    calculateCube('hey', callback)
    } catch (e) {
    console.log(e)
    }

    现在,控制台的输出将是:

    带有非法参数的TypeError示例

    带有非法参数的TypeError示例

    这表明错误已得到适当处理。

    处理Promise中的错误

    大多数人倾向于使用Promise来处理异步活动。Promise还有另一个优点——被拒绝的Promise不会终止你的脚本。但是,您仍然需要实现一个catch块来处理Promise中的错误。为了更好地理解这一点,让我们使用Promises重写calculateCube()函数:

    const delay = ms => new Promise(res => setTimeout(res, ms));
    const calculateCube = async (number) => {
    if (typeof number !== “number”)
    throw Error(“Numeric argument is expected”)
    await delay(5000)
    const cube = number * number * number
    return cube
    }
    try {
    calculateCube(4).then(r => console.log(r))
    } catch (e) { console.log(e) }
    const delay = ms => new Promise(res => setTimeout(res, ms));
    const calculateCube = async (number) => {
    if (typeof number !== “number”)
    throw Error(“Numeric argument is expected”)
    await delay(5000)
    const cube = number * number * number
    return cube
    }
    try {
    calculateCube(4).then(r => console.log(r))
    } catch (e) { console.log(e) }
    const delay = ms => new Promise(res => setTimeout(res, ms));
    const calculateCube = async (number) => {
    if (typeof number !== "number")
    throw Error("Numeric argument is expected")
    await delay(5000)
    const cube = number * number * number
    return cube
    }
    try {
    calculateCube(4).then(r => console.log(r))
    } catch (e) { console.log(e) }

    前面代码中的超时已被隔离到delay函数中以便理解。如果您尝试输入一个字符串而不是4,您获得的输出将类似于以下内容:

    在Promise中带有非法参数的TypeError示例

    在Promise中带有非法参数的TypeError示例

    同样,这是由于Promise在其他所有内容完成执行后引发错误。这个问题的解决方案很简单。只需像这样向Promise链添加调用catch()

    calculateCube(“hey”)
    .then(r => console.log(r))
    .catch(e => console.log(e))
    calculateCube(“hey”)
    .then(r => console.log(r))
    .catch(e => console.log(e))
    calculateCube("hey")
    .then(r => console.log(r))
    .catch(e => console.log(e))

    现在输出将是:

    处理带有非法参数的TypeError示例

    处理带有非法参数的TypeError示例

    您可以观察到使用Promise处理错误是多么容易。此外,您可以链接finally()块和promise调用以添加将在错误处理完成后运行的代码。

    或者,您也可以使用传统的try-catch-finally技术来处理Promise中的错误。在这种情况下,您的promise调用如下所示:

    try {
    let result = await calculateCube(“hey”)
    console.log(result)
    } catch (e) {
    console.log(e)
    } finally {
    console.log(‘Finally executed”)
    }
    try {
    let result = await calculateCube(“hey”)
    console.log(result)
    } catch (e) {
    console.log(e)
    } finally {
    console.log(‘Finally executed”)
    }
    try {
    let result = await calculateCube("hey")
    console.log(result)
    } catch (e) {
    console.log(e)
    } finally {
    console.log('Finally executed")
    }

    但是,这仅适用于异步函数。因此,在Promise中处理错误的最优选方式是链式连接catchfinally连接到Promise调用。

    throw/catch vs onerror() vs Callbacks vs Promises:哪种方法更佳?

    有四种方法可供您使用,您必须知道如何在任何给定的用例中选择最合适的方法。以下是您可以自己决定的方法:

    throw/catch

    您将在大多数情况下使用此方法。确保在你的catch块中为所有可能的错误实现条件,如果你需要在try块之后运行一些内存清理例程,请记住包含一个finally块。

    但是,太多的try/catch块会使您的代码难以维护。如果您发现自己处于这种情况,您可能希望通过全局处理程序或promise方法来处理错误。

    在异步try/catch块和promise的catch()之间做出决定时,建议使用异步try/catch块,因为它们将使您的代码线性且易于调试。

    onerror()

    当您知道您的应用程序必须处理许多错误并且它们可以很好地分散在整个代码库中时,最好使用onerror()方法。onerror方法使您能够处理错误,就好像它们只是您的应用程序处理的另一个事件一样。您可以定义多个错误处理程序并在初始呈现时将它们附加到应用程序的窗口。

    但是,您还必须记住,在错误范围较小的较小项目中设置onerror()方法可能会带来不必要的挑战。如果您确定您的应用程序不会抛出太多错误,那么传统的throw/catch方法将最适合您。

    Callbacks and Promises

    回调和承诺中的错误处理因代码设计和结构而异。但是,如果您在编写代码之前在这两者之间进行选择,最好使用Promise。

    这是因为Promise具有用于链接catch()finally()块以轻松处理错误的内置结构。这种方法比定义附加参数/重用现有参数来处理错误更容易和更清晰。

    使用Git存储库跟踪更改

    由于代码库中的手动错误,经常会出现许多错误。在开发或调试代码时,您最终可能会进行不必要的更改,这可能会导致代码库中出现新的错误。自动化测试是在每次更改后检查代码的好方法。但是,它只能告诉您是否有问题。如果你不经常备份你的代码,你最终会浪费时间试图修复一个以前运行良好的函数或脚本。

    这就是git发挥作用的地方。通过适当的提交策略,您可以使用您的git历史作为备份系统来查看您的代码在开发过程中的演变过程。您可以轻松地浏览旧提交并找出该函数的版本之前运行良好,但在不相关的更改后抛出错误。

    然后,您可以恢复旧代码或比较两个版本以确定哪里出了问题。现代Web开发工具(如GitHub Desktop或GitKraken)可帮助您并排可视化这些更改并快速找出错误。

    一个可以帮助您减少错误的习惯是 在您对代码进行重大更改时运行代码审查。如果您在一个团队中工作,您可以创建一个拉取请求并让团队成员彻底审查它。这将帮助您使用第二双眼睛来发现您可能遗漏的任何错误。

    处理JavaScript错误的最佳实践

    上述方法足以帮助您为下一个JavaScript应用程序设计一个健壮的错误处理方法。但是,最好在实施时记住一些事情,以充分利用您的防错功能。这里有一些提示可以帮助您。

    1. 处理操作异常时使用自定义错误

    我们在本指南的前面介绍了自定义错误,让您了解如何根据应用程序的独特情况自定义错误处理。建议尽可能使用自定义错误而不是泛型Error类,因为它为调用环境提供了有关错误的更多上下文信息。

    最重要的是,自定义错误允许您调整错误在调用环境中的显示方式。这意味着您可以根据需要选择隐藏特定详细信息或显示有关错误的其他信息。

    您可以根据需要格式化错误内容。这使您可以更好地控制错误的解释和处理方式。

    2.不要吞下任何例外

    即使是最资深的开发人员也经常犯一个新手错误——在他们的代码中使用异常级别。

    您可能会遇到有一段代码可以选择运行的情况。如果它有效,那就太好了;如果没有,你不需要做任何事情。

    在这些情况下,通常很想将这段代码放在try块中,并在其上附加一个空的catch块。但是,通过这样做,您将使那段代码保持开放状态,从而导致任何类型的错误并逃脱惩罚。如果你有一个庞大的代码库和许多这样糟糕的错误管理结构的实例,这可能会变得很危险。

    处理异常的最好方法是确定所有异常都将被处理的级别并将它们提高到那里。此级别可以是控制器(在MVC架构应用程序中)或中间件(在传统的面向服务器的应用程序中)。

    通过这种方式,您将了解在哪里可以找到应用程序中发生的所有错误并选择如何解决它们,即使这意味着不对它们做任何事情。

    3. 对日志和错误警报使用集中策略

    记录错误通常是处理错误的一个组成部分。那些未能制定集中策略来记录错误的人可能会错过有关其应用程序使用情况的宝贵信息。

    应用程序的事件日志可以帮助您找出有关错误的关键数据并帮助快速调试它们。如果您在应用程序中设置了适当的警报机制,您可以在错误到达大部分用户群之前知道应用程序何时发生错误。

    建议使用预先构建的记录器或创建一个以满足您的需求。您可以配置此记录器以根据其级别(警告、调试、信息等)处理错误,并且一些记录器甚至可以立即将日志发送到远程记录服务器。通过这种方式,您可以观察应用程序的逻辑在活动用户中的执行情况。

    4. 适当地通知用户错误

    在定义错误处理策略时要牢记的另一个要点是牢记用户。

    所有干扰您的应用程序正常运行的错误都必须向用户显示可见的警报,以通知他们出现问题,以便用户可以尝试制定解决方案。如果您知道错误的快速修复方法,例如重试操作或注销并重新登录,请务必在警报中提及它以帮助实时修复用户体验。

    如果错误不会对日常用户体验造成任何干扰,您可以考虑抑制警报并将错误记录到远程服务器以供以后解决。

    5. 实现一个中间件(Node.js)

    Node.js环境支持中间件向服务器应用程序添加功能。 您可以使用此功能为您的服务器创建错误处理中间件。

    使用中间件的最大好处是所有错误都集中在一个地方处理。您可以轻松选择启用/禁用此设置以进行测试。

    以下是创建基本中间件的方法:

    const logError = err => {
    console.log(“ERROR: “ + String(err))
    }
    const errorLoggerMiddleware = (err, req, res, next) => {
    logError(err)
    next(err)
    }
    const returnErrorMiddleware = (err, req, res, next) => {
    res.status(err.statusCode || 500)
    .send(err.message)
    }
    module.exports = {
    logError,
    errorLoggerMiddleware,
    returnErrorMiddleware
    }
    const logError = err => {
    console.log(“ERROR: ” + String(err))
    }
    const errorLoggerMiddleware = (err, req, res, next) => {
    logError(err)
    next(err)
    }
    const returnErrorMiddleware = (err, req, res, next) => {
    res.status(err.statusCode || 500)
    .send(err.message)
    }
    module.exports = {
    logError,
    errorLoggerMiddleware,
    returnErrorMiddleware
    }
    const logError = err => {
    console.log("ERROR: " + String(err))
    }
    const errorLoggerMiddleware = (err, req, res, next) => {
    logError(err)
    next(err)
    }
    const returnErrorMiddleware = (err, req, res, next) => {
    res.status(err.statusCode || 500)
    .send(err.message)
    }
    module.exports = {
    logError,
    errorLoggerMiddleware,
    returnErrorMiddleware
    }

    然后,您可以在您的应用程序中使用此中间件,如下所示:

    const { errorLoggerMiddleware, returnErrorMiddleware } = require(‘./errorMiddleware’)
    app.use(errorLoggerMiddleware)
    app.use(returnErrorMiddleware)
    const { errorLoggerMiddleware, returnErrorMiddleware } = require(‘./errorMiddleware’)
    app.use(errorLoggerMiddleware)
    app.use(returnErrorMiddleware)
    const { errorLoggerMiddleware, returnErrorMiddleware } = require('./errorMiddleware')
    app.use(errorLoggerMiddleware)
    app.use(returnErrorMiddleware)

    您现在可以在中间件中定义自定义逻辑以适当地处理错误。您不再需要担心在整个代码库中实现单个错误处理结构。

    6. 重新启动您的应用程序以处理程序员错误(Node.js)

    当Node.js应用程序遇到程序员错误时,它们可能不一定会抛出异常并尝试关闭应用程序。此类错误可能包括由程序员错误引起的问题,例如高CPU消耗、内存膨胀或内存泄漏。处理这些问题的最佳方法是通过Node.js集群模式或PM2等独特工具使应用程序崩溃,从而优雅地重新启动应用程序。这可以确保应用程序不会因用户操作而崩溃,从而呈现糟糕的用户体验。

    7. 捕获所有未捕获的异常(Node.js)

    您永远无法确定您已经涵盖了您的应用程序中可能出现的所有错误。因此,实施备用策略以从您的应用程序中捕获所有未捕获的异常非常重要。

    您可以这样做:

    process.on(‘uncaughtException’, error => {
    console.log(“ERROR: “ + String(error))
    // other handling mechanisms
    })
    process.on(‘uncaughtException’, error => {
    console.log(“ERROR: ” + String(error))
    // other handling mechanisms
    })
    process.on('uncaughtException', error => {
    console.log("ERROR: " + String(error))
    // other handling mechanisms
    })

    您还可以确定发生的错误是标准异常还是自定义操作错误。根据结果​​,您可以退出进程并重新启动它以避免意外行为。

    8. 捕获所有未处理的Promise Rejections (Node.js)

    与您永远无法涵盖所有​​可能的异常类似,您很有可能会错过处理所有可能的Promise Rejections。但是,与异常不同,Promise Rejection不会引发错误。

    因此,一个重要的Promise Rejection可能会作为警告而溜走,并使您的应用程序面临遇到意外行为的可能性。因此,实现一个回退机制来处理Promise Rejection是至关重要的。

    您可以这样做:

    const promiseRejectionCallback = error => {
    console.log(“PROMISE REJECTED: “ + String(error))
    }
    process.on(‘unhandledRejection’, callback)
    const promiseRejectionCallback = error => {
    console.log(“PROMISE REJECTED: ” + String(error))
    }
    process.on(‘unhandledRejection’, callback)
    const promiseRejectionCallback = error => {
    console.log("PROMISE REJECTED: " + String(error))
    }
    process.on('unhandledRejection', callback)
    

    小结

    与任何其他编程语言一样,JavaScript中的错误非常频繁且自然。在某些情况下,您甚至可能需要故意抛出错误以向用户指示正确的响应。因此,了解它们的解剖结构和类型非常重要。

    此外,您需要配备正确的工具和技术来识别和防止错误导致您的应用程序崩溃。

    在大多数情况下,对于所有类型的JavaScript应用程序来说,通过仔细执行来处理错误的可靠策略就足够了。

  • 如何修复WordPress“另一个更新正在进行”错误

    错误类型:
    WP内部错误
    错误名称:
    另一个更新正在进行中
    英文名称:
    Another update is currently in progress
    错误描述:
    当执行WordPress相关更新时,WordPress会锁定您的数据库,但有时锁定并没有被正确移除。可能由于服务器连接中断或其他问题导致更新没有正确完成,但您可能会无限期地卡在“更新中”屏幕上。

    如何修复WordPress“另一个更新正在进行”错误
    当WordPress崩溃时,尝试找出导致问题的原因可能会非常令人沮丧。当问题几个小时都没有解决并阻止您使用网站的重要部分时,这尤其令人讨厌。

    您是否在更新页面上遇到奇怪的错误,阻止您升级WordPress核心甚至您的主题和插件?有时这个问题会自行解决,但如果你等了很长时间,仍然卡在这条消息上,它不太可能自行解决。

    让我们来看看为什么会发生这个问题,以及一些让您的网站再次运行的建议方法。

    1. 正在进行更新错误的原因
    2. 修复WordPress更新进行中错误的3种方法

    正在进行更新错误的原因

    当您的站点按预期工作时,转到仪表板 > 更新屏幕将显示您当前的WordPress版本。您还可以启动WordPress核心、主题或插件的更新。

    WordPress更新界面

    WordPress更新界面

    但是,如果您的网站最近更新了,您可能会注意到在您尝试更新或重新安装任何内容时,一条简短的消息已经接管或出现:“另一个更新正在进行中。”

    这将删除所有更新按钮并阻止您在页面上执行任何其他操作。

    WordPress更新进度页面

    WordPress更新进度页面

    如果您知道自己刚刚运行了更新,这实际上是为了防止您在下载更新时意外破坏您的网站。

    如果您没有自己启动更新,则可能是由自动更新功能引起的,或者您站点上具有高级权限的其他用户可能启动了更新过程。

    但是,虽然在更新运行时看到这个屏幕是正常的,但它连续几个小时呆在那里是不正常的。

    WordPress确实有意锁定您的数据库,但有时锁定并没有被正确移除。可能由于服务器连接中断或其他问题导致更新没有正确完成,但您可能会无限期地卡在“更新中”屏幕上。

    为什么核心更新会锁定WordPress数据库

    那么为什么会出现奇怪的信息呢?为什么WordPress会像这样故意阻止对更新屏幕的访问?

    每当WordPress运行核心更新时,它都会在数据库中添加一行,以防止任何其他更新(包括插件和主题更新)在更新期间运行,有时在完成后长达15分钟。安装更新是否需要5秒也没关系;更新仍将被阻止15分钟。

    这是有充分理由的。如果同时从两个不同的来源更新数据库表,则可能会导致数据库损坏和站点上的严重数据丢失。

    例如,如果您同时运行一个主题和一个核心更新,那么这两个操作最终可能会修改同一个数据库表并导致整个站点崩溃的可能性很小。

    此更新锁定可防止您或任何其他自动更新程序损坏您的网站和重要数据。

    这就是为什么建议您等待15分钟并且不要尝试手动移除锁定以运行第二次更新,因为这可能会产生严重后果。

    但是,如果您一直在等待并且您的更新页面没有自行修复,您将需要采取手动操作。(完成后,您可能需要查看我们的修复数据库表的指南,以防失败的更新破坏了任何东西)。

    修复WordPress更新进行中错误的3种方法

    在启动更新后大约15分钟内看到“更新中”消息是正常的,因此不要太快地跳到弄乱您的数据库。但是,如果您已经等了一段时间并且仍然看到错误,那么可能是时候自己采取进一步的措施了。

    在您第一次注意到该消息后至少等待一个小时,然后尝试其中一个步骤。永远记得在编辑后端文件之前备份您的数据库和整个站点,尤其是在您不熟悉该过程的情况下。

    如果这些步骤都不起作用,或者您只是不愿意自己修复它,您可以随时联系您的房东并寻求他们的帮助。

    使用插件

    通常解决此问题需要深入了解您的数据库或习惯使用高级开发人员工具(如WP-CLI),但如果您不想冒险破坏任何东西,可以使用更简单的选项。

    修复另一个正在进行的更新

    修复另一个正在进行的更新

    Fix Another Update In Progress完全符合它在锡上的指示。虽然它是一个很久没有更新的旧插件,但最近的评论表明它仍然可以正常工作(它的10k+活动安装证明了这一点)。

    也没有太多其他可用的替代方案,因此这是WordPress插件库中的最佳选择。但开发人员似乎不再支持它,因此使用它需要您自担风险。

    要安装它,请登录并转到插件> 安装插件。搜索“fix another update in progress”并单击以安装插件。

    您也可以手动下载插件,然后单击此页面上的上传插件。

    激活它后,您将在设置下看到一个标有Fix Another Update In Progress的新菜单。

    访问“Fix Another Update in Progress”设置

    访问“Fix Another Update in Progress”设置

    如果它检测到数据库中的锁定,它将显示此屏幕。只需单击Fix WordPress Update Lock按钮,数据库条目就会立即被删除。

    修复WordPress更新锁定按钮

    修复WordPress更新锁定按钮

    之后,您就可以开始使用了,您的“更新”页面应该可以再次使用了。将未使用的插件留在您的网站上并不是一个好主意,因此如果您没有看到此问题再次出现,您可以继续卸载它。

    使用PhpMyAdmin

    即使您以前从未深入研究过您的数据库,只要您不触及任何敏感设置,此解决方案也是一种相当简单且安全的解决方案。只需确保在接触数据库中的任何内容之前运行备份,并且只删除一个损坏的行。

    首先,您应该登录到PhpMyAdmin。

    在带有几个下拉菜单的左侧菜单中,打开您网站的数据库并选择wp_options

    在cPanel中访问wp_options

    在cPanel中访问wp_options

    单击wp_options后,您应该会看到一个包含各种数据库条目的表。您可能会在列表中看到它,或者您的表格可能太大了。如果找不到,请使用表格上方的过滤行栏并输入“ core_updater.lock ”直接跳转到它。

    现在只需单击“core_updater.lock”行上的删除。

    删除core_updater.lock行

    删除core_updater.lock行

    这样,您就可以自由地返回WordPress并再次更新您的网站。

    使用WP-CLI

    如果弄乱您的敏感数据库感觉有点不舒服,或者所有这些表让您感到不知所措,那么有一个快速简便的解决方案:WP-CLI。

    这是WordPress命令行界面,一种与您的数据库或站点的其他方面进行交互的方式,而无需通过cPanel和PhpMyAdmin手动导航。输入一行代码,你的问题立马解决。

    如今,许多WordPress主机已经安装了 WP-CLI,因此您无需进行任何困难的设置。

    与直接编辑数据库一样,您仍应在运行命令行之前备份您的站点。

    Windows用户需要安装像PuTTY这样的程序,而Mac和Linux用户已经内置了终端。

    下载PuTTY

    下载PuTTY

    您还需要从主机获取SSH凭据。您可能可以在SSH Access下的cPanel中找到它,或者您的服务器信息配置相关页面下找到它。

    Windows用户应安装PuTTY并输入主机提供的主机名/IP、端口、用户名和密码。

    Mac和Linux用户只需打开终端并输入以下命令:

    ssh username@hostip -p portnumber
    ssh username@hostip -p portnumber
    ssh username@hostip -p portnumber

    如果有提示,请输入密码。

    现在,无论您是在Windows上使用PuTTY还是在Mac或Linux上使用终端,您都应该能够将命令输入到您的服务器中。输入以下内容:

    wp option delete core_updater.lock
    wp option delete core_updater.lock
    wp option delete core_updater.lock

    在命令行中进行更改

    在命令行中进行更改

    到达那里有点困难,但是有了这个命令,你的问题就解决了。

    小结

    “另一个正在进行”更新错误在出现时可能会非常烦人。如果您最终连续几天无法更新您的网站,那么一个小的数据库错误可能会导致很多混乱。

    幸运的是,修复它是一项非常简单的任务。如果您有权访问WP-CLI或PhpMyAdmin,您只需删除锁定,您的网站就会恢复正常。如果您不习惯这样做,请安装一个可以为您处理它的插件。

    如果没有任何效果,您可以随时联系您的主机并要求他们自己删除损坏的数据库条目。

    请记住在尝试解决此问题之前15分钟到一个小时给出消息,因为它可能会在此之前自行解决。那个数据库锁被放在那里是有原因的,如果你在你应该删除它之前删除它,你可能会损坏你的数据库。

    WordPress错误很常见,当它们出现时知道该怎么做会很有帮助。

  • 如何解决413请求实体太大报错

    错误类型:
    HTTP错误
    错误名称:
    413 请求实体太大
    英文名称:
    413 Request Entity Too Large
    错误描述:
    413请求实体太大报错(413 Request Entity Too Large)这个报错不太多见,但并不代表它不存在。错误的本质非常清晰,即客户端所请求的实体,比如上传的文件超出限制所致。

    如何解决413请求实体太大报错

    WordPress错误有各种形式和大小。在大多数情况下,它们很容易破译。这就是WordPress错误报告的可访问性。即便如此,当“413 Request Entity Too Large”错误弹出时,它会让你摸不着头脑。

    在没有意识到的情况下,您已经拥有了理解和诊断其名称中的错误所需的一切。好消息是您只需要标准的安全文件传输协议 (SFTP)客户端和管理员访问您的服务器即可。

    在这篇文章中,我们将看看如何解决“413 Request Entity Too Large”错误。我们还将为您提供在开始解决错误之前要采取的步骤的快速列表,以使该过程超级简单。

    413请求实体太大报错

    413请求实体太大报错(413 Request Entity Too Large)这个报错不太多见,但并不代表它不存在。错误的本质非常清晰,即客户端所请求的实体,比如上传的文件超出限制所致。

    既然知道这个错误的问题所在,那么我们需要做哪些应对措施以修复此报错就非常简单了。

    这篇文章将详细说明该错误的本质及提出错误修复的解决方案:

    1. “413请求实体太大”错误是什么(以及它存在的原因)
    2. 解决“413请求实体太大”错误需要什么
    3. 在纠正“413 请求实体太大”错误之前可以采取的“准备步骤”
    4. 如何为您的WordPress网站解决“413 请求实体太大错误”

    什么是413 Request Entity Too Large

    413 Request Entity Too Large当从客户端作出的请求是过大,由Web服务器进行处理会出现误差。如果您的Web服务器设置了特定的HTTP请求大小限制,客户端可能会遇到413 Request Entity Too Large响应。可能导致此错误的示例请求是,如果客户端尝试将大文件上传到服务器(例如,大媒体文件)。

    它取决于您使用的Web服务器的类型,这将决定您需要配置哪个指令。无论您是要限制用户将过大的文件上传到您的Web服务器,还是要增加上传大小限制,以下部分将说明如何操作。

    我们注意到错误名称中有关于解决方案和问题的线索。不过,在你亲自调查之前,我们会破坏这个惊喜:它在形容词“大”中。

    简而言之,“413 Request Entity Too Large”错误是一个大小问题。当客户端发出的请求太大而最终服务器无法处理时,就会发生这种情况。根据错误的性质,服务器可以完全关闭连接以防止发出进一步的请求。

    让我们将错误分解为几个部分:

    • “413”:这是4xx错误代码之一,表示服务器和浏览器之间存在问题。
    • “请求实体”:在这种情况下,“实体”是客户端从服务器请求的信息负载。
    • “太大”:这很简单:实体比服务器愿意或能够服务的要大。

    实际上,此错误已将其名称从最初的名称更改为更具体并提供更多清晰度。它现在被称为“413 Payload Too Large”错误,尽管在实践中,您会更多地看到旧名称。

    至于为什么会出现错误,简单的解释是服务器设置为拒绝显式上传太大。想一想您上传文件时存在最大文件大小限制的情况:

    TinyPNG主页

    TinyPNG主页

    在大多数情况下,会进行一些验证来阻止错误……如果您看到“413 Request Entity Too Large”错误,那么这些验证工作可能不像您想象的那样无懈可击。

    修复414 Request-URI Too Large错误需要什么

    如果您过去遇到过413 Request Entity Too Large错误,您会发现类似的414错误。当然,这些名称显示了它们的相似之处,因为它们在官方标准中彼此相邻并且具有几乎相同的描述。

    鉴于此,您用于修复413的工具和技能列表也将与414相同:

    在纠正“413请求实体太大”错误之前可以采取的“准备步骤”

    在您打开工具箱之前,您可以采取一些步骤来帮助解决“413 Request Entity Too Large”错误。这里有两个——每个都可以为您提供一个受欢迎的解决方法。

    1.尝试通过SFTP将大文件上传到您的服务器

    因为这个问题与服务器的文件大小有关,所以最好绕过前端接口并自己将大文件上传到服务器。最好的方法是通过SFTP。

    这是因为就访问服务器的方式而言,诸如SFTP之类的协议几乎与您所能获得的一样“接近骨子里”。此外,您可以同时排除任何可能导致错误的前端问题。

    为此,请通过SFTP登录您的站点并找到wp-content文件夹。在这里将是上传文件夹。

    从SFTP客户端看到的上传文件夹

    从SFTP客户端看到的上传文件夹

    接下来,将你的文件上传到服务器上的这个文件夹,看看结果如何。如果上传成功,我们建议向网站的开发人员发送电子邮件,因为他们可能希望在前端进一步调查问题。

    2.检查服务器权限错误

    当然,权限错误会阻止任何服务器请求运行。因此,您应该检查用户是否有足够的权限上传任何大小的文件。排序后,错误应该消失。

    第一步是确定这是否是单个用户的问题(在这种情况下,他们可能由于某种原因受到限制)。如果多个用户出现“413 Request Entity Too Large”错误,您可以更加确定需要您输入的内容。

    我们在这里建议两个“预修复”:

    • 仔细检查您的WordPress文件权限,以防万一出现问题。
    • 删除并重新创建您的SFTP用户(一般调查是个好主意)。

    虽然他们可能无法在一开始就解决错误,但您至少会知道您的文件和用户结构是应有的。

    修复413 Request Entity Too Large错误

    完成前期步骤后,您就可以正面解决错误了。

    以下三种方法从最简单到最困难列出,理解为阻力最小的路径是最好的路径。

    1. 编辑您的WordPress functions.php文件

    首先,您可以使用您的functions.php文件来帮助增加您网站的文件上传大小。为此,首先使用主机控制面板中的凭据通过SFTP登录您的站点。

    当您进入时,您会想要查找文件本身。functions.php文件应该位于服务器的根目录中。在许多情况下,此根称为wwwpublic_html,或者它可能是您网站的缩写名称。

    找到它后,您可以在您选择的文本编辑器中打开它。如果您没有看到该文件,您可以使用文本编辑器创建它。

    打开文件后,输入以下内容:

    @ini_set( ‘_max_size’ , ’64M’ );
    @ini_set( ‘post_max_size’, ’64M’);
    @ini_set( ‘max_execution_time’, ‘300’ );
    @ini_set( ‘_max_size’ , ’64M’ );
    @ini_set( ‘post_max_size’, ’64M’);
    @ini_set( ‘max_execution_time’, ‘300’ );
    @ini_set( '_max_size' , '64M' );
    @ini_set( 'post_max_size', '64M');
    @ini_set( 'max_execution_time', '300' );

    简而言之,这增加了帖子和上传的最大文件大小,同时增加了服务器尝试处理请求的时间。这里的数字可以是你想要的任何数字,但它们应该足够大以使错误消失。实际上,除了最繁重的任务之外,64MB就足够了。

    functions.php文件

    functions.php文件

    准备好后,保存文件并再次将其上传到服务器。然后,检查“413 Request Entity Too Large”错误是否仍然存在。如果是这样,请转到下一个方法。

    2. 修改您的WordPress .htaccess文件

    就像您的functions.php文件一样,您的.htaccess文件位于您的服务器上。这里的区别在于.htaccessApache服务器的配置文件。

    不过,对于那些拥有Apache服务器的人来说,这是您需要的方法。与functions.php的指南非常相似,首先通过SFTP登录到您的服务器,然后像以前一样查看您的根文件夹。

    .htaccess文件应该在这个目录中,但如果它丢失了,我们建议您与您的主机联系以确定它在哪里,以及您的服务器是否在Nginx上运行。

    找到后,再次打开它。你会看到一些标签,这里最重要的是# END WordPress. 您需要在此行之后粘贴以下内容:

    php_value upload_max_filesize 64M
    php_value post_max_size 64M
    php_value max_execution_time 300
    php_value max_input_time 300
    php_value upload_max_filesize 64M
    php_value post_max_size 64M
    php_value max_execution_time 300
    php_value max_input_time 300
    php_value upload_max_filesize 64M
    php_value post_max_size 64M
    php_value max_execution_time 300
    php_value max_input_time 300

    简而言之,这与您添加到functions.php文件中的代码几乎相同,但它类似于向服务器提供直接指令。

    .htaccess文件

    .htaccess文件

    完成后,保存更改,上传文件,然后再次检查您的站点。如果您仍然遇到问题,我们再次建议您联系您的房东,因为他们需要验证您设置的某些方面,这些方面超出了本文的范围。

    此外,对于Apache Web服务器,有一个名为LimitRequestBody的类似指令。该指令提供的功能与client_max_body_size您能够限制HTTP请求的大小相同LimitRequestBody指令可以在您的http.conf文件或.htaccess文件中定义。Apache中此指令的默认值是0,但是,您可以将此值设置为您喜欢的任何值(该值以字节表示)。

    例如,如果您想限制大于100 MB的请求,您可以使用以下内容。

    LimitRequestBody 104857600
    LimitRequestBody 104857600
    LimitRequestBody 104857600

    完成更改后,保存配置文件并使用以下命令重新加载 Apache:

    service apache2 reload
    service apache2 reload
    service apache2 reload

    3. 改变你的Nginx服务器配置

    我们的最后一种方法是特定于Nginx服务器。目的与使用.htaccess文件时相同,因为您是在与服务器对话,而不是通过WordPress。

    我们提到对于Apache服务器,您将使用.htaccess。但是,对于Nginx服务器,您需要找到nginx.conf文件。我们没有引导您完成链中的每一步,而是在我们的问中详细介绍了更改WordPress最大上传大小

    根据您使用的Web服务器,实施下面描述的必要更改以配置您的Web服务器的最大HTTP请求大小限额。通过这样做,您可以设置允许客户端上传的阈值文件大小,如果超过该限制,他们将收到一个413 Request Entity Too Large状态。

    对于Nginx用户,决定允许的HTTP请求大小的指令是client_max_body_size. 该指令可能已经在您的nginx.conf文件(/etc/nginx/nginx.conf)中定义。但是,如果不是,您可以在http, server或者location块中添加该指令并定义一个值。

    server {
    client_max_body_size 100M;
    }
    server {
    client_max_body_size 100M;

    }
    server {
    client_max_body_size 100M;
    ...
    }

    该指令的默认值为1M(1 兆字节)。如果您不希望有请求大小限制,您可以将该值设置为0

    设置所需的值后,保存更改并通过运行以下命令重新加载Nginx:

    service nginx reload
    service nginx reload
    service nginx reload

    请记住,您还需要根据对nginx.conf所做的更改来更改php.ini文件。我们也在上述博客文章中介绍了这一点,因此请查看那里的确切步骤。

    附加配置 – PHP用户

    除了修改Web服务器上的相应指令外,PHP用户还需要进行一些其他更改。首先,您需要打开php.ini文件,该文件很可能位于类似于/etc/php5/fpm/php.ini(取决于您的PHP版本)的目录中。接下来,您需要找到并修改以下指令:

    • upload_max_filesize定义上传文件的最大允许大小(默认为 2 MB)。
    • post_max_size定义了PHP将接受的POST最大数据大小。此设置还会影响文件上传(默认为8MB)。

    一旦上述指令被修改,以反映所需的容许HTTP请求大小,简单地保存配置并重新加载PHP-FPM通过运行下面的命令:

    service php-fpm restart
    service php-fpm restart
    service php-fpm restart
  • 如何修复414 Request-URI Too Large错误

    错误类型:
    HTTP错误
    错误名称:
    请求URI太长
    英文名称:
    414 Request-URI Too Large
    错误描述:
    414 Request-URL Too Large错误是配置问题。它是400错误代码之一。这通常意味着您的浏览器和服务器之间的某个地方存在严重问题。

    如何修复414 Request-URI Too Large错误

    鉴于稳定的代码库,WordPress错误不会经常发生。更重要的是,当某些事情确实弹出来抑制你的一天时,它是明确的。其中之一是414 Request-URI Too Large错误,它可以准确地告诉您问题出在哪里。从那里,您可以尝试修复它。

    就像许多其他WordPress错误一样,您可以采取一些特定的步骤来解决它。简而言之,您需要调整一些配置设置以允许更长的URL。完成后,错误也会出现。

    在本文中,我们将向您介绍如何修复414 Request-URI Too Large错误。它将包括解决问题所需的工具和技能,并在深入了解之前列出一些“准备步骤”。

    1. 414 Request-URI Too Large错误是什么(以及为什么会发生)
    2. 修复414 Request-URI Too Large错误需要什么
    3. 开始解决414 Request-URI Too Large错误之前要做什么
    4. 如何修复414 Request-URI Too Large 错误

    414 Request-URI Too Large错误是什么(以及为什么会发生)

    414 Request-URL Too Large错误是配置问题。它是400错误代码之一。它们很麻烦,因为这通常意味着您的浏览器和服务器之间的某个地方存在严重问题。

    在这种情况下,414错误意味着URL太长,服务器无法处理,因此会引发异常。使用Urchin跟踪模块 (UTM) 代码跟踪转化时,这可能是一个问题。根据您设置的参数,这些链接可能会变长,如果它们达到站点配置的最大限制,您将看到错误。

    与许多WordPress错误一样,导致414的原因还有很多。事实上,您可以将原因分为三个不同的区域:

    • 使用过长的查询信息将POST请求转换为GET请求。这是在编码级别发生的特定于开发人员的问题。
    • 重定向循环。我们在上一篇文章中讨论了重定向的最佳实践。如果您进入重定向循环,则生成的URL会变得太长,并且会出现错误。
    • 服务器可能受到攻击,此时的414错误将是您最不担心的。

    在我们继续之前,值得注意的是,对于所有意图和目的,URI和URL是相同的东西。虽然两者之间有一些明显的区别,但我们将在这里使用“URL”来保持简单明了。

    修复414 Request-URI Too Large错误需要什么

    如果您过去遇到过413 Request Entity Too Large错误,您会发现类似的414错误。当然,这些名称显示了它们的相似之处,因为它们在官方标准中彼此相邻并且具有几乎相同的描述。

    鉴于此,您用于修复413的工具和技能列表也将与414相同:

    开始解决414 Request-URI Too Large错误之前要做什么

    在您打开服务器的引擎盖并将其设置为工作之前,您可能需要先执行一些“准备步骤”。可能有一个简单的解决方法,不需要您修改配置文件。

    更重要的是,无论如何都应该在某个时候进行这些检查,因此从长远来看,现在对它们进行处理将有所帮助。

    首先,WordPress插件可能会生成长URL作为其功能的一部分。功能齐全的一体化安全插件可能是这里的主要候选者,特别是如果它们提供了很多功能。

    很难一眼就知道插件是否有问题,但值得研究其特定设置,以找到限制URL长度的专用选项。如果是这样,切换它可以在几秒钟内解决414错误。

    但是,在正常情况下,您可以执行一些其他任务来帮助您诊断错误:

    • 检查您的服务器日志中是否提及错误或任何其他识别条目。
    • 您的浏览器开发工具可能会给您一些错误原因的指示——尤其是您的Console。
    • 联系网站所有者或开发人员(如果不是您),让他们知道错误的存在。他们可能会进行修复,或者可以进一步建议您该怎么做。

    当然,如果您发现插件有问题,您可能还是想联系网站和插件开发人员。即便如此,如果你已经用尽了所有的外展和顶级检查,那么是时候冒险了。

    如何修复414 Request-URI Too Large错误

    将工具放在一起后,您将需要一个计划。414 Request-URI Too Large错误的修复方法是更改​​服务器配置文件。因此,您可以采取三个步骤。

    让我们首先进入您的服务器并确定您拥有哪种类型的服务器。

    1.登录到您的服务器(并确定您的服务器类型)

    您必须先进入服务器,然后才能使用它,这就是您的SFTP技能发挥作用的地方。

    过去我们已经概述了如何通过SFTP进入您的站点,一旦您进入,您需要弄清楚您拥有的服务器类型。有两种主要类型:Apache和Nginx

    可能是您已经知道您运行的服务器类型。如果是这样,您可以跳到下一步。

    如果您遇到困难,这里有一个快速提示:查找.htaccess文件。它位于您服务器的根目录中,如果您能看到它,这意味着您正在运行一个Apache服务器。Nginx服务器使用不同的配置文件。

    也就是说,您可能正在运行一个还没有.htaccess文件的Apache服务器。因此,您可以使用其他两种方法:

    • 使用Whois域工具站点进行域查找:这可能会告诉您正在使用的服务器类型,尽管它不是一种万无一失的方法。
    • 请与您的托管服务提供商核实您使用的服务器类型。当然,您的主机会知道您运行的是什么服务器。

    当您确定使用哪种类型的服务器后,您可以进入下一步并找到您的配置文件。

    2. 找到服务器配置文件并在您的文本编辑器中打开它

    正如我们所指出的,Apache服务器使用.htaccess文件进行基本服务器配置,它将位于您的根目录中。不过,这不是您修复414 Request-URI Too Large错误所需的文件。

    在这种情况下,您需要深入了解您的高级配置设置。这些不在您站点的根文件夹中,而是在服务器的根文件夹中。

    当您通过SFTP登录您的站点时,您通常会进入一个包含所有站点(以及一些其他文件)的目录。在许多情况下,您可以升级到服务器根目录的几个级别:

    导航到Cyber​​duck中的服务器根目录

    导航到Cyber​​duck中的服务器根目录

    这将为您提供更多要遍历的目录。其中将是etc文件夹:

    服务器根目录中的etc文件夹

    服务器根目录中的etc文件夹

    配置文件的完整路径是/etc/apache2/apache2.conf

    Apache配置文件

    Apache配置文件

    对于Nginx服务器,过程类似。这是我们在关于调整WordPress中的最大上传大小的文章中部分介绍的内容。配置文件的路径是/etc/nginx/nginx.conf

    找到文件后,在您喜欢的文本编辑器中打开它。此时,您已准备好对其进行调整。

    3. 调整配置文件以允许更长的URL

    就像Apache和Nginx服务器有不同的配置文件一样,它们也有不同的设置需要调整。但是,无论您的服务器类型如何,如果您还没有这样做,则需要在编辑器中打开它。我们首选的方法是将文件下载到您的计算机,对其进行处理,然后将其上传回服务器。

    对于Apache配置文件,查找LimitRequestLine设置,如果不存在,则将其添加到文件底部:

    更改Apache服务器配置设置

    更改Apache服务器配置设置

    对于该值,请至少使用128000。如果您需要高于此值,请保持为2的倍数(即下一个值应为256000)。

    对于Nginx服务器,您正在寻找large_client_header_buffers设置。在这里,您将看到与数字和大小相关的两个值。例如,large_client_header_buffers 4 8K。 您需要在此处更改的唯一数字是大小 – 您可以从8K增加到大约128K,尽管您可能需要进一步增加(再次以2的倍数)。

    完成后,保存更改并将配置文件上传回服务器。此时,再次检查您的站点,414 Request-URI Too Large错误应该已经消失。

    小结

    WordPress错误通常有类似的解决方法。不过,您通常需要先诊断错误。在414 Request-URI Too Large错误的情况下,问题很明显:传递给服务器的URL太大。

    要修复它,您需要更改Apache或Nginx服务器设置。这不会花费太长时间,一旦完成,您应该重新启动并运行。

  • 如何修复解决“SSL握手失败”报错

    错误类型:
    安全相关错误
    错误名称:
    SSL握手错误
    英文名称:
    SSL Handshake Failed
    错误描述:
    SSL握手失败或错误525意味着服务器和浏览器无法建立安全连接。这可能由于多种原因而发生。

    如何修复解决“SSL握手失败”报错

    如今为网站设置安全套接字层 (SSL) 证书非常简单。您可以免费生成证书,许多托管服务提供商甚至会为您设置。但是,如果您没有正确配置您的证书,您可能会遇到诸如“SSL握手失败”之类的错误。

    如果您遇到“SSL握手失败”错误消息并且对它的含义感到困惑,那么您并不孤单。这是一个常见的错误,它本身并不能告诉你太多。虽然这可能是令人沮丧的体验,但好消息是您可以采取一些简单的步骤来解决问题。

    当您的浏览器和服务器无法建立安全连接时,会出现“SSL握手失败”错误。

    在这篇文章中,我们将解释什么是SSL Handshake Failed错误以及导致它的原因。然后,我们将为您提供几种可用于修复它的方法。

    1. SSL握手简介
    2. 了解导致SSL握手失败的原因
    3. 如何修复SSL握手失败错误

    SSL握手简介

    在我们深入研究导致TLS或SSL握手失败的原因之前,了解什么是TLS/SSL握手会很有帮助。安全套接字层 (SSL)传输层安全性 (TLS)是用于验证服务器和外部系统(如浏览器)之间的数据传输的协议。

    需要SSL证书才能使用HTTPS保护您的网站。我们不会太深入地讨论TLS与SSL之间的区别, 因为它是次要的。这些术语经常互换使用,因此为简单起见,我们将使用“SSL”来指代两者。

    除此之外,SSL握手是建立HTTPS连接过程的第一步。为了验证和建立连接,用户的浏览器和网站的服务器必须经过一系列检查(握手),从而建立HTTPS连接参数。

    让我们解释一下:客户端(通常是浏览器)向服务器发送安全连接请求。发送请求后,服务器会向您的计算机发送一个公钥,并根据证书列表检查该密钥。然后,计算机使用从服务器发送的公钥生成密钥并对其进行加密。

    长话短说,没有SSL握手,就不会建立安全连接。这会带来重大的安全风险。此外,该过程涉及许多活动部件。

    这意味着有很多不同的机会出现问题并导致握手失败,甚至导致“您的连接不是私密连接”错误,从而导致访问者离开。

    您可能知道,SSL证书可以验证您网站的“身份”。它使用浏览器检查的加密密钥来确保证书有效。建立连接后,您的浏览器可以解密服务器发送的内容。

    这个过程称为“握手”。以下是它更详细的工作原理:

    1. 您访问具有SSL证书的网站,并且您的浏览器发送数据请求。
    2. 服务器向浏览器发送一个加密的公钥。
    3. 您的浏览器检查该密钥并将其加密密钥发送回服务器。
    4. 服务器解密密钥并将加密内容发送回您的浏览器。
    5. 您的浏览器解密内容(从而完成握手)。

    所有这一切都在几秒钟内发生。SSL证书和HTTPS协议使您的网站能够安全地传输数据,而不会对性能产生负面影响。这使得SSL证书对任何网站都至关重要。但是,就像您网站的任何元素一样,它有时会产生独特的问题。

    了解导致SSL握手失败的原因

    SSL握手失败或错误525意味着服务器和浏览器无法建立安全连接。这可能由于多种原因而发生。

    通常,错误525表示使用Cloudflare的域与源Web服务器之间的SSL握手失败。

    “SSL握手失败”错误准确地告诉您问题是什么。当您的浏览器无法与具有SSL证书的网站建立连接时,它会显示:

    ssl-handshake-failed

    在这个来自使用Cloudflare的网站的示例中,您可以看到“SSL握手失败”错误对应于“525”代码。因此,错误可能源于服务器端和客户端的问题。

    但是,了解SSL错误可能发生在客户端服务器端也很重要。客户端SSL错误的常见原因包括:

    • 客户端设备上的错误日期或时间。
    • 浏览器配置错误。
    • 被第三方拦截的连接。

    一些服务器端原因包括:

    • 密码套件不匹配。
    • 服务器不支持的客户端使用的协议。
    • 不完整、无效或过期的证书。

    通常,如果SSL握手失败,问题可能是由于网站或服务器及其SSL配置有问题。

    该列表包括本地问题,与您网站的服务器相关问题,一个特定于第三方服务的问题。在接下来的部分中,我们将探讨如何解决每个问题。

    如何修复SSL握手失败错误

    “SSL握手失败”错误背后有几个潜在原因。因此,当涉及到如何修复它时,没有简单的答案。

    幸运的是,您可以使用一些方法来开始探索潜在问题并一一解决。让我们看一下可用于尝试修复SSL Handshake Failed错误的五种策略。

    1. 更新您的系统日期和时间
    2. 检查您的SSL证书是否有效
    3. 为您的浏览器配置最新的SSL/TLS协议支持
    4. 验证您的服务器是否已正确配置为支持SNI
    5. 确保密码套件匹配

    1. 更新您的系统日期和时间

    当您的浏览器尝试建立SSL握手时,它会根据您计算机的日期和时间验证证书。它这样做是为了验证SSL证书是否仍然有效。

    如果您本地设备的日期和时间关闭,则可能会导致验证过程中出现错误(即没有握手)。幸运的是,这是一个简单修复的问题。

    在Windows设备上,打开开始 菜单并输入日期和时间设置。选择出现的选项,会弹出一个新窗口。启用设置自动设置时间,并确保您的时区正确:

    set-time-automatically

    验证您的日期现在是否正确,然后尝试重新加载网站。

    以下是在其他操作系统 (OS) 上修复日期和时间的方法:

    如果在本地设备上修复日期和时间不起作用,您可以继续进行下一个修复。

    2. 检查您的SSL证书是否有效

    SSL证书上标有到期日期,以帮助确保其验证信息保持准确。通常,这些证书的有效期为六个月至两年。

    如果SSL证书被吊销或过期,浏览器将检测到这一点并且无法完成SSL握手。如果您在网站上安装SSL证书已经超过一年左右,那么可能是时候重新颁发它了。

    要查看SSL证书的状态,您可以使用SSL证书检查工具 ,例如Qualys提供的工具:

    Qualys网站上的SSL服务器测试工具

    Qualys网站上的SSL服务器测试工具

    该工具既可靠又免费使用。您需要做的就是在Hostname字段中输入您的域名 ,然后单击Submit。一旦检查器完成对您网站的SSL配置的分析,它将为您提供一些结果:

     

    Qualys SSL检查工具的结果页面

    Qualys SSL检查工具的结果页面

    在此页面上,您可以查看您的证书是否仍然有效,并查看它是否因任何原因被吊销。

    在任何一种情况下,更新您的SSL证书都应该可以解决握手错误(这对于确保您的网站和WooCommerce商店的安全至关重要)。

    3. 为您的浏览器配置最新的SSL/TLS协议支持

    有时,确定问题根本原因的最佳方法是消除过程。正如我们前面提到的,SSL握手失败通常是由于浏览器配置错误而发生的。

    确定特定浏览器是否存在问题的最快方法是尝试切换到其他浏览器。这至少可以帮助缩小问题范围。您也可以尝试禁用任何插件并将浏览器重置为默认设置。

    另一个潜在的与浏览器相关的问题是协议不匹配。例如,如果服务器仅支持TLS 1.2,但浏览器仅配置为TLS 1.0或TLS 1.1,则没有相互支持的协议可用。这将不可避免地导致SSL握手失败。

    如何检查此问题是否发生取决于您使用的浏览器。作为一个例子,我们将看看这个过程在Chrome中是如何工作的。首先,打开浏览器并转到设置 > 高级。这将扩展许多菜单选项。

    在“系统 ”部分下,单击“打开计算机的代理设置”

    Google Chrome中的系统设置页面

    Google Chrome中的系统设置页面

    这将打开一个新窗口。接下来,选择高级选项卡。在安全部分下,检查是否选中了使用TLS 1.2旁边的框 。如果没有,请检查该选项:

    Windows中的Internet属性高级设置

    Windows中的Internet属性高级设置

    还建议您取消选中SSL 2.0和SSL 3.0的复选框。

    这同样适用于TLS 1.0和TLS 1.1 ,因为它们正在被淘汰。完成后,单击“ 确定” 按钮,然后检查握手错误是否已解决。

    请注意,如果您使用的是Apple Safari或Mac OS,则没有启用或禁用SSL协议的选项。默认情况下会自动启用TLS 1.2。如果您使用的是Linux,您可以参考Red Hat guide on TLS hardening

    4. 验证您的服务器是否正确配置为支持SNI

    SSL 握手失败也可能是由不正确的服务器名称指示 (SNI) 配置引起的。SNI使Web服务器能够为一个IP地址安全地托管多个TLS证书。

    服务器上的每个网站都有自己的证书。但是,如果服务器未启用SNI,则可能导致SSL握手失败,因为服务器可能不知道要提供哪个证书。

    有几种方法可以检查网站是否需要SNI。一种选择是使用我们在上一节中讨论过的Qualys的SSL服务器测试。输入您网站的域名,然后单击提交按钮。

    在结果页面上,查找显示“This site works only in browsers with SNI support”的消息:

    Qualys SSL检查器工具的摘要结果页面

    Qualys SSL检查器工具的摘要结果页面

    另一种检测服务器是否使用SNI的方法是浏览“ClientHello”消息中的服务器名称。这是一个技术性更强的过程,但它可以提供很多信息。

    它涉及检查“server_name”字段的扩展hello标头,以查看是否提供了正确的证书。

    如果您熟悉使用OpenSSL工具包 和Wireshark等工具,您可能会发现此方法更可取。您可以使用openssl s_client或不使用该-servername选项:

    # without SNI
    $ openssl s_client -connect host:port
    # use SNI
    $ openssl s_client -connect host:port -servername host
    # without SNI
    $ openssl s_client -connect host:port
    # use SNI
    $ openssl s_client -connect host:port -servername host
    # without SNI
    $ openssl s_client -connect host:port 
    # use SNI
    $ openssl s_client -connect host:port -servername host

    如果您获得了两个同名的不同证书,则意味着SNI受支持且配置正确。

    但是,如果返回的证书中的输出不同,或者没有SNI的调用无法建立SSL连接,则表明需要SNI但未正确配置。解决此问题可能需要切换到专用IP地址。

    5. 确保密码套件匹配

    如果您仍然无法确定SSL握手失败的原因,则可能是由于密码套件不匹配。如果您不熟悉该术语,“密码套件”是指一组算法,包括用于密钥交换、批量加密和消息身份验证代码的算法,可用于保护SSL和TLS网络连接。

    如果服务器使用的密码套件不支持或不匹配Cloudflare使用的密码套件,则可能导致“SSL握手失败”错误。

    在确定是否存在密码套件不匹配时,Qualys的SSL服务器测试再次证明是一个有用的工具。

    当您输入您的域并单击提交时,您将看到一个摘要分析页面。您可以在“Cipher Suites ”部分下找到密码信息:

    Qualys SSL报告中的密码套件部分

    Qualys SSL报告中的密码套件部分

    您可以使用此页面来发现服务器支持的密码和协议。您需要注意任何显示“弱”状态的内容。此外,本节还详细介绍了密码套件的具体算法。

    要更正此问题,您可以使用您的浏览器工具的Qualys SSL/TLS功能将结果与您的浏览器支持的内容进行比较。有关密码套件的更多信息和指导,我们还建议查看ComodoSSLStore指南

    小结

    最令人困惑但最常见的SSL相关问题类型之一是“SSL握手失败”错误。处理此错误可能会带来压力,因为它有许多潜在原因,包括客户端和服务器端问题。

    但是,您可以使用一些可靠的解决方案来识别问题并加以解决。您可以使用以下五种方法来修复SSL Handshake Failed错误:

    1. 更新您的系统日期和时间。
    2. 检查您的SSL证书是否有效(必要时重新颁发)。
    3. 配置您的浏览器以支持最新的TLS/SSL版本。
    4. 验证您的服务器是否已正确配置为支持SNI。
    5. 确保密码套件匹配。
  • 如何修复Cloudflare报错Error 1020:访问被拒绝

    错误类型:
    安全相关错误
    错误名称:
    Error 1020: 访问被拒绝
    英文名称:
    Error 1020: Access Denied
    错误描述:
    当在受Cloudflare保护的站点上违反防火墙规则时,会导致错误1020访问被拒绝。如果站点访问者尝试直接访问受保护的端点,则可以触发它。

    如何修复Cloudflare报错Error 1020:访问被拒绝
    每逢网站报错,站长都会非常焦虑。但如果您了解报错背后发生的事情,则可以做到处事不惊,有效地去精准地解决问题。

    如果您的网站使用了Cloudflare,相信您对‘Error 1020: Access Denied’这样的报错信息不会陌生。本文将会对该错误进行详细的解释及给出详细的应对方案。

    1. 是什么导致了“Error 1020: Access Denied”
    2. 网站访问者
    3. 站点所有者或管理员非Cloudflare域
    4. 站点所有者或管理员Cloudflare域

    是什么导致了“Error 1020: Access Denied”

    当在受Cloudflare保护的站点上违反防火墙规则时,会导致错误1020访问被拒绝。如果站点访问者尝试直接访问受保护的端点,则可以触发它。

    如果您看到此问题,请查看以下信息以查看解决此问题的后续步骤。

    网站访问者

    如果您在访问网站时看到错误1020访问被拒绝,但您不是网站所有者或管理员,我们建议您联系网站所有者,以便他们解决问题。

    请务必包含错误的屏幕截图或至少包含错误下方显示的Cloudflare Ray ID。

     

    Cloudflare错误1020访问被拒绝

    Cloudflare错误1020访问被拒绝

    站点所有者或管理员非Cloudflare域

    如果您是站点所有者或管理员,并且没有自己的Cloudflare帐户并实施了防火墙规则,请联系服务器支持团队并提供以下信息,以便我们调查并解决此问题:

    1. 发生错误的日​​期和时间。
    2. 错误消息下方显示的Cloudflare Ray ID。
    3. 发生错误时您或您的访问者正在采取的任何步骤(例如单击链接、更新内容、将某些内容添加到购物车、提交表单或其他操作)。

    站点所有者或管理员Cloudflare域

    如果您是站点所有者或管理员,并且拥有自己的Cloudflare帐户并实施了防火墙规则,则需要检查防火墙事件日志(Firewall > Events)以查看违反了哪个规则并导致请求被阻止。

    如果您在防火墙事件日志中没有看到任何被阻止的事件,请联系服务器的支持团队并提供上面列出的信息(在非Cloudflare域部分中)。