假设我开始写入响应正文,但是有一些错误,我需要指出它是一个HTTP 500,即使HTTP 200 OK标题已被写为标题... 我怎样才能在保证格式错误的响应正文中写一些内容,以便客户将响应解释为某种错误?
答案 0 :(得分:2)
一般来说,这是不可能的。有些客户只关心响应标题,可能会停止关注标题后发送的内容。
但对某些客户而言,在某些情况下,这可能是可能的。
我在这里假设HTTP/1.1。 HTTP/2可能会提供更多的机会,因为协议中的内容更多,实现更加严格。相反,HTTP / 1.0是笨重的,因此更难以打破。
在响应结束前关闭连接,如framing所示。如果您的响应以Content-Length: 100
为框架,请在发送有效负载的第100个字节之前关闭。如果您的回复中包含Transfer-Encoding: chunked
,请在发送最终空块之前关闭。如果客户端希望接收整个有效负载,则可能(and should)将此视为错误。但有些人不会,包括very popular client libraries。
如果有效负载采用结构化格式(如JSON或XML),则执行与1相同的操作,但在关闭之前,请发送会破坏该格式的内容。例如,没有有效的JSON文本可以以{
结尾。即使客户端没有将不完整的有效负载识别为错误,它也可能在尝试解析它时失败。
与1相同,但不是关闭连接,只是停止发送数据。客户端将“挂起”,直到其接收操作超时,这可能会被视为错误。如果客户是由没有为这种奢侈超时做好准备的人操作,那么这可能是一个坏主意。
仅限于Transfer-Encoding: chunked
:与3相同,但不是挂起,而是发送虚假非常长的块和/或不断发送块,直到客户端放弃或崩溃。可能是一个非常糟糕的主意,接近恶意。