我有两台服务器。它们都运行相同的代码并连接到同一个数据库。但是,当我进行某个ajax调用时,一个服务器工作正常,另一个服务器抛出内部服务器错误。在内部服务错误服务器的Apache日志中,它显示“脚本标头的过早结束”。这让我觉得一台机器上有一些Apache错误,但Apache文件夹在两台机器上看起来都相同。
服务器之间的哪些差异会导致出现此错误?
答案 0 :(得分:0)
错误告诉您没有输出标题,应该输出它们。通常情况下,cgi脚本由于某种原因而失败,因此在输出标题之前不会输出任何内容或输出内容。
要调试它:查看apache错误日志。它很可能会告诉你出了什么问题。
要查找error_log:在apache配置文件中查找ErrorLog指令。
答案 1 :(得分:0)
Swa66等已经提供了很好的答案,但我认为在您查看了apache错误日志之后我还会添加一些内容,这些日志应该为您提供Apache期望有效http标头返回的文本。 / p>
您提到服务器正在响应Ajax查询,因此您可能遇到某种类型的CORS问题或与Apache如何配置以允许HTTP标头传递到CGI进程相关的问题。 将JWT或其他auth标头作为ajax服务的一部分包含在内并不常见,您可能会发现需要添加.htaccess文件以允许这些文件流过
检查您的工作服务器以查看是否已启用headers模块( - httpd.conf中的类似内容 - LoadModule headers_module libexec / apache2 / mod_headers.so)
还要查找标头相关选项的.htaccess或域特定配置。如果需要,可以深入了解Apache CORS配置和标头相关问题。
您可能需要某些类似于以下的配置。
<强>的.htaccess 强>
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
Header set Access-Control-Allow-Origin "*"
如果没有更具体的诊断,确定您的问题有点困难。也许您可以从浏览器中提供描述Ajax / XHR请求的调试器详细信息,包括标头等以及来自apache的相关错误日志条目。假设您正在使用Perl / CGI片段描述配置中的CGI配置以及工作和错误服务器上的任何.htaccess文件。
您可能还想快速检查可执行文件的权限,并尝试从命令行运行它们。
它可能是一个非常基本的配置选项,如apache centos fails to serve images - premature end of script headers所描述的..我们确实需要更多的诊断细节来关注可能的原因。