Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在一个HTTP响应中是否允许多个状态码头?_Http_Http Headers - Fatal编程技术网

在一个HTTP响应中是否允许多个状态码头?

在一个HTTP响应中是否允许多个状态码头?,http,http-headers,Http,Http Headers,我有一个发送HTTP状态码的web应用程序。在某些情况下,404代码作为报头发送,但在相同的响应中也会发送200错误 HTTP/1.0 404 Not Found HTTP/1.0 200 Ok 我无法更改执行顺序以阻止发送第一个状态代码,因此第二个代码正试图覆盖它 Chrome忽略第一个代码,并假定状态为Ok。这符合HTTP标准吗?我应该依赖它吗?这里给出了HTTP 1.1的rfc: 第2.1节规定: 服务器通过发送一个或多个HTTP来响应客户端的请求 响应消息,每个消息都以状态行开头 该标

我有一个发送HTTP状态码的web应用程序。在某些情况下,404代码作为报头发送,但在相同的响应中也会发送200错误

HTTP/1.0 404 Not Found
HTTP/1.0 200 Ok
我无法更改执行顺序以阻止发送第一个状态代码,因此第二个代码正试图覆盖它


Chrome忽略第一个代码,并假定状态为
Ok
。这符合HTTP标准吗?我应该依赖它吗?

这里给出了HTTP 1.1的rfc:

第2.1节规定:

服务器通过发送一个或多个HTTP来响应客户端的请求 响应消息,每个消息都以状态行开头

该标准规定,如果愿意,可以发送多个响应,但每个响应必须有自己的状态行。此外,标题的第一行必须包含状态行/代码

因此,根据字面解释的标准,理论上你可以发送多个响应,但我不知道浏览器会用它做什么,而且肯定不会依赖它

你现在得到的是符合rfc的;rfc并没有说你不能有更多的状态行,只是每个响应的第一行上的状态行才是最重要的——根据rfc,chrome不能正确解释这一点


它可能会工作,但我不会依赖它。

不,它不符合标准,你不应该依赖它。见:

只有当一个或多个信息性响应(1xx,见[RFC7231]第6.2节)先于对同一请求的最终答复时,每个请求才会出现一条以上的响应消息


我认为您的浏览器首先进行http选项调用,然后进行http get,这是针对cors功能的。如果您的服务器没有't在给定url上提供/支持http选项,他将以404状态响应。您可以发送多条响应消息,但只有最后一条消息可以具有最终状态代码(>=200)。我不会发送多个响应,而是在同一响应中发送多个状态头。希望我的问题现在更清楚了。根据定义,响应只能包含一个状态行。如果第二行不是有效的HTTP头,则它无效。您看到的是浏览器试图从中断的消息中恢复。据我所知,这指的是在同一个连接上发出多个请求和响应的场景,而不是在一个响应中发出多个头。“我已经更新了我的问题,使之更清楚了。”@JonathanHolvey-没有。它是关于为一个请求发送的内容。