Response::json() 返回 text/html 作为内容类型
Posted
技术标签:
【中文标题】Response::json() 返回 text/html 作为内容类型【英文标题】:Response::json() returns text/html as content type 【发布时间】:2014-09-17 01:08:29 【问题描述】:我目前面临一个奇怪的问题,我无法缩小问题范围。
在我的 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=[...]
而服务器上的响应没有。
请不要发布建议检查内容类型并在必要时在客户端解析它的答案,因为尽管这是可能的,但服务器不应该那样做,我正在尝试找出原因
【问题讨论】:
你解决了吗?我有完全相同的问题。奇怪的是我的服务器中有其他 laravel 应用程序,它们运行得很好。 不幸的是我没有。我最终将其解析为 json 客户端 【参考方案1】:这听起来更像是服务器配置问题,尤其是因为它在您的本地环境中运行良好,而不是在您的生产环境中。我知道您确保服务器具有 json 扩展名并且已启用,但您可能仍需要在生产服务器上仔细检查以下内容:
您的 Apache 配置中是否有AddType application/json .json
指令(/etc/apache2/mods-available/mime.conf
)?
您是否启用了 mod mime
(可以通过 a2enmod mime
完成)?
【讨论】:
感谢您的回复。不幸的是,我无法检查,因为生产服务器是托管托管服务器。但我所做的是设置一个小脚本,在其中设置正确的 json 标头并返回一些 json 数据。它工作得很好,我也得到了application/json
@thpl,你能分享一下脚本和细节吗?【参考方案2】:
也许这个答案来晚了,但昨天我遇到了这个问题,实际上已经解决了。我真的不知道为什么会发生这种情况,但我注意到每当我运行artisan serve
或任何其他工匠命令时,所有命令消息之前都会出现一个奇怪的选项卡。所以打开我所有的控制器,发现php
打开标签之前有一个标签。所以我有这样的事情:
<?
class MyController extends BaseController
....
那个标签是偶然出现的,但似乎是它导致了问题。一旦我删除它,我所有的Response::json
调用返回的Content-Type
都返回为application/json
希望这会有所帮助,即使为时已晚。
【讨论】:
以上是关于Response::json() 返回 text/html 作为内容类型的主要内容,如果未能解决你的问题,请参考以下文章
Response::json() 发送 html 而不是 json
JavaScript fetch API - 为啥 response.json() 返回一个 promise 对象(而不是 JSON)? [复制]
fetch的使用--当无法判断后台返回数据为什么类型时如何操作
使用 fetch 的请求返回“typeerror: response.json is not a function”(ReactJS/node;express0 [关闭]