У меня есть служба REST, разработанная с использованием Spring Boot, которая пытается отправить обратно данные изображения клиенту, которые затем будут отображаться в браузере. Однако, когда я пытаюсь это, я получаю следующее сообщение об ошибке:Слишком большой заголовок запроса при отправке изображения в ответ REST
2016-09-26 08:40:31.897 INFO 6435 --- [nio-8080-exec-7] o.a.coyote.http11.Http11NioProcessor : Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large
at org.apache.coyote.http11.InternalNioInputBuffer.fill(InternalNioInputBuffer.java:111) ~[tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:267) ~[tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1013) ~[tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:670) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_60]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.0.36.jar!/:8.0.36]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_60]
Мой сервисный код выглядит следующим образом:
@RequestMapping(method = RequestMethod.POST, value = "/com")
public String handleCompare(@RequestParam("testid") String test,
RedirectAttributes redirectAttributes, Model model) throws IOException {
File f=new File("Sampletest.jpg");
BufferedImage origImg=ImageIO.read(f);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ImageIO.write(origImg, "jpg", baos);
byte[] imageInByte=baos.toByteArray();
byte[] encoded= Base64.encodeBase64(imageInByte);
String encodedString = new String(encoded);
model.addAttribute("webcamattr", encodedString);
return "resp";
}
Соответствующая часть «resp.html» выглядит следующим образом:
<table>
<tr>
<td align="center"><b>Response Image</b></td>
</tr>
<tr th:each="webfile : ${webcamattr}">
<td> <img width="300" height="300" src="data:image/jpeg;base64" th:src="${webcamattr}"></img></td>
</tr>
</table>
Мой application.properties файл выглядит следующим образом:
multipart.maxFileSize=10Mb
multipart.maxRequestSize=10Mb
Файл, который я пытаюсь отправить, имеет размер только 19 КБ, но я не уверен, почему он бросает большую ошибку заголовка запроса. Не могли бы вы помочь в определении того, что я делаю неправильно? Передаются ли данные изображения в заголовок запроса? Если да, то как я могу отправить его в тело ответа?
Почему вы показываете нам 'resp.html'? Запрос POST на 'http: // server/context/com' отклоняется * перед тем, как вызывается ваш метод' handleCompare() '. Клиент отправляет плохие данные, поэтому проверьте код клиента и/или запишите заголовки запросов. – Andreas
@ Аndreas запрос не отклоняется. Вызов handleCompare успешный, поскольку я это проверил. Эта ошибка встречается, когда ответ отправляется в «resp.html» – seriousgeek
Действительно? Потому что этот стек будет указывать иначе. – Andreas