如何将格式错误的HTTP响应写入"保证"类似于HTTP 500的东西

时间:2018-05-11 19:49:41

标签: http http-headers httpresponse

假设我开始写入响应正文,但是有一些错误,我需要指出它是一个HTTP 500,即使HTTP 200 OK标题已被写为标题... 我怎样才能在保证格式错误的响应正文中写一些内容,以便客户将响应解释为某种错误?

1 个答案:

答案 0 :(得分:2)

一般来说,这是不可能的。有些客户只关心响应标题,可能会停止关注标题后发送的内容。

但对某些客户而言,在某些情况下,这可能是可能的。

我在这里假设HTTP/1.1HTTP/2可能会提供更多的机会,因为协议中的内容更多,实现更加严格。相反,HTTP / 1.0是笨重的,因此更难以打破。

  1. 在响应结束前关闭连接,如framing所示。如果您的响应以Content-Length: 100为框架,请在发送有效负载的第100个字节之前关闭。如果您的回复中包含Transfer-Encoding: chunked,请在发送最终空块之前关闭。如果客户端希望接收整个有效负载,则可能(and should)将此视为错误。但有些人不会,包括very popular client libraries

  2. 如果有效负载采用结构化格式(如JSON或XML),则执行与1相同的操作,但在关闭之前,请发送会破坏该格式的内容。例如,没有有效的JSON文本可以以{结尾。即使客户端没有将不完整的有效负载识别为错误,它也可能在尝试解析它时失败。

  3. 与1相同,但不是关闭连接,只是停止发送数据。客户端将“挂起”,直到其接收操作超时,这可能会被视为错误。如果客户是由没有为这种奢侈超时做好准备的人操作,那么这可能是一个坏主意

  4. 仅限于Transfer-Encoding: chunked:与3相同,但不是挂起,而是发送虚假非常长的块和/或不断发送块,直到客户端放弃或崩溃。可能是一个非常糟糕的主意,接近恶意。