http: move ETag support to send() and refactor