HTTP não funciona assim. O cliente envia uma solicitação e, em seguida, o servidor envia uma resposta de volta. Nenhuma outra comunicação ocorre. Bem, o servidor pode enviar respostas informativas 1xx antes da resposta principal. Mas não há como o cliente enviar atualizações sobre uma solicitação enviada.
(A situação é muito diferente para o HTTP / 2, que pode multiplexar várias solicitações pela mesma conexão. Um cliente pode CANCELAR um fluxo para indicar que não é mais necessário depois de receber um PUSH_PROMISE do servidor. Ignorarei o HTTP / 2 para o restante desta resposta.)
Além disso, as redes não funcionam assim. Em particular, veja o segundo falácia da computação distribuída : “latência é zero”. Não é. Nesse segundo tempo limite, 400ms podem ter sido gastos no estabelecimento da conexão e no envio da solicitação e 600ms na resposta, porque um dos pacotes foi descartado e você teve que reenviar tudo e seu cliente está na Austrália. Além do problema de o servidor não ter tempo suficiente, ele nem sabe quanto tempo tem porque a latência de resposta não pode ser conhecida antecipadamente.
Portanto, considerando que a implementação literal desses tempos limites é impossível, que tipo de solução pode ser boa o suficiente?
Se a resposta não tiver valor após o tempo limite, o cliente pode simplesmente fechar a conexão. Isso fará com que sua resposta seja ignorada, mas não impedirá a resposta.
Fechar a conexão TCP pela qual a solicitação HTTP é enviada notifica o servidor. Mas essa notificação chega apenas com latência, portanto pode ser tarde demais. Além disso, sua estrutura da web pode não estar fazendo nada quando o soquete do cliente está fechado. Nesse caso, você receberá o erro "redefinição de conexão por pares" quando tentar gravar no soquete fechado.
Se você não deseja gastar mais de um segundo no processamento da resposta, a implementação desse tempo limite é de sua inteira responsabilidade e não tem nada a ver com rede ou HTTP.
Você pode solicitar ao cliente que forneça um tempo limite ao servidor, para que o servidor possa abortar se não cumprir o prazo. Isso pode ser especificado como um cabeçalho personalizado ou como um parâmetro de consulta no URL. Esse prazo deve ser um ponto absoluto no tempo e não uma duração, para que os atrasos na transmissão também consumam o tempo disponível. Mas a precisão de um segundo é difícil: o servidor e o cliente precisam ser sincronizados com a hora correta e precisam usar um relógio adequado. Dependendo da configuração, cada fonte de tempo pode ser desativada em 100ms, mesmo quando configurada corretamente. Isso já consome uma parte significativa do seu orçamento de tempo.