内容类型 json 返回 http 404

Posted

技术标签:

【中文标题】内容类型 json 返回 http 404【英文标题】:Content-type json returns http 404 【发布时间】:2012-08-11 06:15:53 【问题描述】:

在第 3 方服务器中,当带有 EXt-JS 4 的 Web 应用程序(服务器端 Struts 2)使用 content-type: application/json; 发出 ajax 请求时; charset=utf-8 网络服务器返回页面未找到 http 404/403 状态码。但是,如果我们通过浏览器 url 栏使用纯文本/html 发出相同的请求,则会收到响应。会有什么问题。

有没有办法通过发送不同的内容类型来模拟请求,我尝试过下面的 html 表单,但它只发送 Content-Type:application/x-www-form-urlencoded

<html>
<body>
<form action="http://abc.com/abc?" method="post" enctype="application/json; charset=utf-8">

<input type='submit'/>
</form>
</body>
</html>

服务器或 tomcat 可以单独限制特定的内容类型吗?

<action name="abc" class="com.stutzen.rhs.abc.Abc" method="abc">
        <interceptor-ref name="json">
            <!--param name="contentType">application/json</param-->
        </interceptor-ref>
        <result type="json">
            <param name="excludeProperties">
                data,model
            </param>
        </result>
    </action>

【问题讨论】:

当然,服务器可以分析请求标头并根据找到的内容返回响应。 【参考方案1】:

使用 Ext.Ajax.request 发出请求时,您可以在 Ext 端设置任意标头:

Ext.Ajax.request(
    url: '/foo',
    headers: 
        'Content-Type': 'text/html'
    
);

但是,它看起来更像是一种 hack,而不是真正的解决方案;您需要找出服务器期望的内容并相应地进行操作。

【讨论】:

那是很好的样本,我试过了,得到了回应。但是在带有 json 插件的服务器端 struts 中,它需要 content-type 作为 application/json。但无论如何,我得到了一个空白的结果页面。因此,类已加载,它正在为除 application/json 以外的内容类型提供服务,那么为什么不单独为它服务。在问题中也提供了struts配置。 我对 Struts 配置不熟悉,无法帮你。

以上是关于内容类型 json 返回 http 404的主要内容,如果未能解决你的问题,请参考以下文章

FileSystemResource 以内容类型 json 返回

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

如何在 CakePHP 中为 JSON 返回正确的内容类型?

Spring MVC REST - 根据请求内容类型返回 xml 或 json

返回 RHEL/Apache 上 .json 文件的应用程序/json 内容类型

Wordpress - 如何使 URL 返回具有自定义内容类型的动态 JSON?