Firefox正在解析空响应有效负载

时间:2017-02-27 17:28:22

标签: javascript http firefox

我们正在使用以下标题发出XHR请求(我简化了一点):

POST http://localhost:9001/login

Host: localhost:9001
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=utf-8
Content-Length: 67

然后我们的服务器响应这样(再次简化):

Status code: 200 OK

Cache-Control: no-cache, no-store
Connection: close
Content-Length: 0
Date: Mon, 27 Feb 2017 17:19:53 GMT
Server: WildFly/9
Set-Cookie: JSESSIONID=123; path=/

响应中没有有效负载。请注意Content-Length: 0。但Firefox仍然试图将其解析为XML。并将以下错误输出到控制台:

XML Parsing Error: no root element found 
Location: http://localhost:9001/login 
Line Number 1, Column 1

注意,服务器不发送content-type标头。根据{{​​3}},只有在有实际内容时才需要发送content-type标题。

这是Firefox中的一个错误还是我的研究错误?

自行复制

我写了一个小型服务器和客户端来重现这个问题。

server.js (以node ./server.js开头):

const fs = require('fs'), http = require('http');
const server = http.createServer(function (request, response) {
    if (request.method === 'POST') {
        // send empty response
        response.end();
        return;
    }

    // send file content
    fs.readFile('.' + request.url, function (error, content) {
        response.writeHead(200, { 'Content-Type': request.url === '/index.html' ? 'text/html' : 'text/javascript' });
        response.end(content);
    });
}).listen(8080);

index.html

<script src="client.js"></script>

client.js

var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:8080/login');
xhr.send();

在Firefox中打开网址RFC 7231时,JavaScript控制台会出错。

Firefox版本51.0.1

2 个答案:

答案 0 :(得分:2)

  

响应中没有有效负载。注意内容长度:0

这意味着有一个有效负载,并且该有效负载的大小为0字节。将null""之间的区别视为字符串。当您想要与""等效时,这里拥有的就是null

将状态代码设置为204而不是200,以表示您不是要发送实体(并删除内容类型,因为没有内容类型就没有实体)。

(很长时间以来,Firefox在这种情况下仍然会记录错误,但值得庆幸的是,该错误最终得以解决。即使记录了错误,它仍然可以继续正确运行任何脚本)。

答案 1 :(得分:0)

从POST请求看来,您似乎正在使用XHR / JS发送请求。

因此,可能是在处理结果的代码中出现了问题。

(此外,请求中的Content-Type不正确,application / json上没有charset参数)