2017-02-14 12 views
27

Tôi đang nhận được dấu vết ngăn xếp dưới đây khi tôi triển khai ứng dụng của mình trong môi trường Apache Tomcat 8 đa máy chủ. Tôi nhận được lỗi này thường xuyên, và có vẻ như nó đang chặn chủ đề tomcat:java.lang.IllegalArgumentException: Tìm thấy ký tự không hợp lệ trong tên phương thức. Tên phương thức HTTP phải là mã thông báo

INFO [http-nio-80-exec-4461] org.apache.coyote.http11.AbstractHttp11Processor.process Error parsing HTTP request header 
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level. 
 java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens 
 at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:233) 
 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017) 
 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) 
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524) 
 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480) 
 at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
 at java.lang.Thread.run(Unknown Source) 

Bất kỳ ai có thể hướng dẫn tôi cách khắc phục hoặc thu hẹp một ngoại lệ như vậy? Tôi không nhận được bất kỳ tham chiếu đến bất kỳ tệp nguồn ứng dụng nào của tôi. Tôi đã cố gắng để google xung quanh, và trong các liên kết nó nói, bạn đang cố gắng truy cập http url thông qua https, mà dường như không. Tôi không nhận được lỗi này, khi ứng dụng chạy trên một cá thể Tomcat 8 duy nhất. Tôi nhận được điều này chỉ trong một môi trường đa máy chủ.

Tôi cũng đang chia sẻ thẻ meta tôi đã nhúng trên mỗi trang, nếu điều đó giúp xác định nguyên nhân.

<% 
    response.setHeader("Cache-Control", "no-cache"); 
    response.setHeader("Cache-Control", "no-store"); 
    response.setDateHeader("Expires", 0); 
    response.setHeader("Pragma", "no-cache"); 
%> 


<head> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 

Tôi cũng đang sử dụng sau đây trong một vài trang, mà về cơ bản là tương tự như trên:

<meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<meta name="viewport" content="width=device-width, initial-scale=1"> 
<meta http-equiv="Expires" content="-1" /> 
<meta http-equiv="Cache-Control" content="private" /> 
<meta http-equiv="Cache-Control" content="no-store" /> 
<meta http-equiv="Pragma" content="no-cache" /> 

Thậm chí nếu có ai giúp trong việc đưa ra một hướng đi để cố gắng khắc phục sự cố của tôi, rằng sẽ hữu ích, như hiện tại tôi không có ý tưởng, nơi để xem xét.

Xin cảm ơn trước.

Trả lời

53

Ngoại lệ này có thể xảy ra khi bạn cố gắng thực thi yêu cầu https từ ứng dụng khách trên điểm cuối không bật https. Khách hàng sẽ mã hóa dữ liệu yêu cầu khi máy chủ đang chờ dữ liệu thô.

+1

Tôi không chắc mình hiểu câu trả lời này. Tôi có một ứng dụng Spring Boot 1.5.1 và tôi thấy ngoại lệ này trong nhật ký của mình. Ứng dụng của tôi chỉ trả lời cho SSL trên cổng 8443 (được chuyển hướng từ cổng 443) và chỉ có một trình kết nối cho SSL. Bạn có nói rằng ai đó có thể thử http: thay vì https: trên cổng 443? –

+2

Trường hợp ngoại lệ như vậy xảy ra khi có sự không khớp giữa những gì máy chủ mong đợi và những gì nó nhận được. Những gì bạn nói là một trong những tình huống có thể xảy ra. Có thể có một điểm cuối trong máy chủ của bạn không chạy trên https, nhưng ai đó cố gắng truy cập nó theo cách này? –

+1

Xin chào Peter ... Vấn đề đã kết thúc là ai đó đã tạo quy tắc Bảng IP để chuyển tiếp cổng 80 đến cổng 8443, vì vậy bất kỳ ai truy cập trang web sử dụng http trên cổng 80 đều gây ra lỗi đó. Chúng tôi đã thêm một đầu nối Tomcat để chuyển hướng cổng 8080 đến 8443 và thiết lập quy tắc Bảng IP để chuyển tiếp cổng 80 đến cổng 8080 và vấn đề là tất cả nhưng đã biến mất. Cảm ơn bạn đã trả lời! –

Các vấn đề liên quan