繁体   English   中英

空响应正文与ajax请求

[英]Empty response body with ajax request

我正在将用户名和密码发布到龙卷风服务器。 如果凭据有效,则返回cookie和简单的“ OK”文本响应。

这适用于普通的Web客户端,但是当我尝试使用Ajax进行操作时,响应主体为空。 Chrome出于某种原因在请求完成之前取消了该请求,即使它收到200状态,Firefox也将其突出显示为红色。 我正在尝试找出正在发生的事情。

我已经设置了CORS标头,并且可以看到OPTIONS请求正在返回有效数据(chrome不抱怨它)。

这是我的龙卷风服务器:

class LoginHandler(BaseMixin, tornado.web.RequestHandler):
    @gen.coroutine
    def options(self, *args, **kwargs):
        """
        Return CORS headers
        """
        self.set_header('Access-Control-Allow-Headers', 'origin, content-type, accept, authorization')
        self.set_header('Access-Control-Allow-Max-Age', 21600)
        self.set_header('Access-Control-Allow-Methods', 'HEAD, OPTIONS, GET, POST')
        self.set_header('Access-Control-Allow-Origin', '*')

    @gen.coroutine
    def post(self, *args, **kwargs):
        """
        Validates the user's ID and token
        """
        try:
            # ... perform checks - all OK, so then:
            self.set_secure_cookie(
                    "auth", urllib.urlencode({'user_id': self.user_id,
                                              'token': user['token']}))
            self.set_header("Content-Type", "text/plain")
            self.finish("OK")
            return

内容长度已正确设置,但是由于某些原因,firefox或chrome无法显示响应正文。

我以某种方式认为这与CORS有关,因为达到此端点的行为测试全部通过了(并且他们断言响应主体包含“ OK”)。

我正在发出请求(使用angularjs),如下所示:

postData = new Array('user_id=' + id, 'token=' + token);

$http.post(url, postData.join('&'), {headers: {'Content-type': 'application/x-www-form-urlencoded'}})
   .success(authSuccessHandler)
   .error(authErrorHandler);

在chrome中,它会立即输入错误回调,并在开发工具的网络标签中将请求标记为“待处理”,然后“取消”。

有谁知道我在做什么错?

问题在于,CORS标头仅在OPTIONS端点上,而不在POST上。 我也将它们添加到POST,现在一切正常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM