Javascript 带有ajax请求的空响应正文
我正在向tornado服务器发送用户名和密码。如果凭据有效,它将返回一个cookie和一个简单的“OK”文本响应 这适用于普通的web客户机,但当我尝试使用ajax时,响应主体是空的。由于某种原因,Chrome会在请求完成之前取消该请求,firefox会以红色突出显示该请求,即使该请求的状态为200。我在想到底发生了什么 我已经设置了CORS头,我可以看到选项请求正在返回有效数据(chrome没有对此抱怨) 这是我的tornado服务器:Javascript 带有ajax请求的空响应正文,javascript,ajax,google-chrome,tornado,Javascript,Ajax,Google Chrome,Tornado,我正在向tornado服务器发送用户名和密码。如果凭据有效,它将返回一个cookie和一个简单的“OK”文本响应 这适用于普通的web客户机,但当我尝试使用ajax时,响应主体是空的。由于某种原因,Chrome会在请求完成之前取消该请求,firefox会以红色突出显示该请求,即使该请求的状态为200。我在想到底发生了什么 我已经设置了CORS头,我可以看到选项请求正在返回有效数据(chrome没有对此抱怨) 这是我的tornado服务器: class LoginHandler(BaseMixin
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标题只在选项端点上,而不是POST上。我把它们添加到POST中,现在它都起作用了。当您通过浏览器尝试时,它是否达到了<代码> POST <代码>函数?是的,Ajax请求成功地登录了用户,但是FF和Chrome不认为响应是有效的。由于某种原因,Chrome在发送后会中止。我需要他们接受返回的cookie。您能与我们共享您的客户端代码吗?url的值是多少?同样在Postman中,响应显示正确,没有错误。源URL为,目标为