Response :: json()返回text / html作为内容类型

时间:2014-07-25 08:28:45

标签: php json apache laravel-4 content-type

我目前面临一个奇怪的问题,我无法缩小这个问题。

在我的Laravel应用程序中,我正在通过AJAX检索数据。因此,应用程序的某些部分会使用application/json内容类型进行响应。

return Response::json(['message' => 'Some message']);

在我的本地网络服务器上一切正常。我得到Content-Type:application/json作为回复。

我在服务器上部署了应用程序(也是apache )并对其进行了测试。但这是问题所在。我不再获得正确的内容类型了。相反,我得到text/html

所以有很多可能的问题来源,我对服务器配置并不太了解。但这是我已经尝试过的事情:

  • 确保服务器具有json扩展名并且已启用
  • 检查了laravel源提示,说明为什么它不会返回正确的内容/类型(我找不到任何东西)
  • 在本地和服务器上检查响应内容(没有区别)
  • 我注意到Response-Header包含本地Set-Cookie,其中包含:laravel_session=[...],而服务器上的响应则不包含:{/ li>

请不要发布建议检查内容类型的答案,并在必要时在客户端解析它,因为虽然这可能,但服务器不应该这样做,我正在尝试找出原因

2 个答案:

答案 0 :(得分:1)

这听起来更像是服务器配置问题,特别是因为它在您的本地环境中工作正常,而不是在您的生产环境中。我知道您确保服务器具有json扩展名并且已启用,但您可能希望在生产服务器上仔细检查以下内容:

  • 您在Apache配置中是否有AddType application/json .json指令(/etc/apache2/mods-available/mime.conf)?
  • 您是否启用了mod mime(可以通过a2enmod mime完成?)

答案 1 :(得分:0)

也许这个答案来得很晚但是昨天我遇到了这个问题,实际上有点解决了。我不知道为什么会发生这种情况,但我注意到每当我运行artisan serve或任何其他工匠命令时,在所有命令消息之前都会出现一个奇怪的选项卡。所以打开我的所有控制器,发现在php打开标签之前有一个标签。所以我有这样的事情:

    <?
class MyController extends BaseController{
....
}

那个标签是偶然的,但似乎是造成了问题。我删除后,Content-Type所有Response::json次调用返回的application/json返回{{1}}

希望这有助于即使为时已晚。