Я работаю над приложением, которое будет обслуживать некоторое изображение для клиента, и когда-то изображение может быть пустым, и мы используем Spring mvc в качестве контроллера, это ядро коды:Как браузер определяет событие onerror для img
@RequestMapping
public ResponseEntity<byte[]> getImg(String id) {
byte[] res = imgService.find(id); // this res may be null
headers.setDate("Expires", System.currentTimeMillis() + 24 * 3600 * 1000 * 7);
return ResponseEntity.ok().headers(headers).contentType(MediaType.IMAGE_PNG).body(res);
}
Как показано, код ответа всегда будет 200 независимо от того, существует ли изображение.
И на стороне клиента после загрузки изображения я добавлю событие onerror
для изображения, однако я обнаружил, что событие onerror
будет запущено, как только сервер не сможет найти изображение (что означает, что тело может быть null), даже код состояния равен 200.
Затем я попытался вернуть фиксированное изображение, если требуемое изображение отсутствует, а событие onerro
не запускается.
Так что, интересно, как браузер считает определенную ошибку загрузки img, кажется, что он не основан на коде состояния.
Любые документы по этому вопросу?
Вы уверены, что byte [] res = imgService.find (id); res возвращает ваше изображение, или просто в вашем комментарии оно будет null. Таким образом, в вашем вопросе «изображение (что означает, что тело может быть нулевым), даже код состояния равен 200». Это означает, что вы должны проверить, что если данные имеют значение null, вы должны добавить onerror, статус 200 означает, что в HTTP-протоколе ошибки не было. – erhun