PHP连接: Close

标签 php http-headers connection

我有一个 PHP 应用程序,但遇到了一些问题,某些页面需要很长时间才能加载。

几个小时后我发现了问题,但我不知道如何解决它。

问题似乎出在 header Connection: keep-alive 上。我使用了一个名为“Tamper Data”的 Firefox 插件,它允许你“篡改”标题和内容。一旦我使用该工具将连接 header 更改为Connection: close,某些页面上的延迟就停止了。

在 PHP 中,如何确保使用 Connection: close header ?

我尝试将 header("Connection: close"); 放在 PHP 文件的顶部,然后重新加载页面。它仍然发送 Connection: keep-alive header ,而不是我尝试发送的 header 。

我怎样才能实现我想要做的事情?

编辑:我刚刚意识到,在这个子域上,大多数页面根本不发送内容长度 header 。它仅在表单提交后立即发送,然后进行重定向。

编辑2:

这是页面:http://volunteer.essentialtransit.com/job/13/just-a-test-at-eta/

单击“立即申请”链接并填写一些随机 txt,无需附加文件。请注意,当您重定向回“作业”详细信息页面时,加载时间将非常长。

最佳答案

您的问题与连接状态无关。它可能看起来与连接有关,因为 Apache 会自动为来自不同源的每个新请求生成一个新的子线程。通过保持事件状态,它将尝试重用先前的线程,该线程因 PHP 脚本(来自您的应用程序)而繁忙。实际上有点复杂,但这是基本的。请注意,正在发送“连接:关闭”,但它应该仅在脚本完成后(发送所有缓冲区)才关闭连接。

现在我将告诉您如何调试脚本。我之所以这样做是因为,如果您不解决问题并获得更多流量,您的主机就会因过度使用资源而将您踢出局。

所以:

  1. 附加 set_time_limit(5) 或更高版本以确认存在后台脚本问题
  2. 检查对本地资源的请求,以及仅在您的登台服务器上有效的请求(您可以使用 WireShark 来实现此目的)
  3. 检查外部请求、cURL、file_get_contents() 调用以及任何超时的内容
  4. 对冗长的脚本进行基准测试并优化(您可以为此尝试 xdebug)
  5. 将所有 PHP 通知、警告和错误记录到文件中;你最多应该得到零错误
  6. 最后,对整个申请进行三次检查是一个很好的做法。第一个用于数据输入,第二个用于数据操作,第三个用于模块互连。但您应该关注无法返回输出的 AJAX 后台脚本

当然,跳过任何不适用的内容。

关于PHP连接: Close,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060476/

相关文章:

PHP/MYSQL修改用户名和密码

php - 简单的 MySQL 调用在特定键处选择整数不起作用?

mysql - 与 MySQL 服务器的 10 个并发连接是否足够?

java - Cassandra-Cli 拒绝连接

PHP $GLOBALS ['variable' ]; 之间有什么区别?和全局 $ 变量;

php不向mysql插入json数据

php - 使用pdo在php中上传多张图片

java - 为什么 Tomcat 不能正确检索我的 session ?

caching - 使用 Cloudfront 时,如何设置相对于当前日期的过期 header ?

http-headers - 删除服务器头tomcat