netty의 CorsHandler을 (를) 연결을 끊으려면 어떻게합니까? 원점은 통과하지만 원점이 허용되지 않으면 닫히지 않습니다. CorsHandler 인스턴스와 함께이 서버를 설치했습니다.netty와의 연결을 끊는 방법 CorsHandler
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.codec.http.cors.CorsConfigBuilder;
import io.netty.handler.codec.http.cors.CorsHandler;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
/**
* Runs netty with a CORS handler on 8080
*/
public class NettyCorsApp {
private static final int PORT = 8080;
public static void main(String[] args) throws Exception {
EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap()
.group(eventLoopGroup)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<Channel>() {
@Override
protected void initChannel(Channel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new HttpObjectAggregator(1024 * 1024)); // 1MB
pipeline.addLast(new CorsHandler(
CorsConfigBuilder.forOrigin("http://example.com")
.allowedRequestMethods(HttpMethod.POST)
.build())
);
}
})
.channel(NioServerSocketChannel.class);
Channel channel = bootstrap.bind(PORT).sync().channel();
channel.closeFuture().sync();
} finally {
eventLoopGroup.shutdownGracefully();
}
}
}
CORS 검사를 통과 한 원본을 요청하면 CorsHandler는 예상대로 연결을 닫습니다.
$ curl -sv -X OPTIONS -H 'Origin: http://example.com' -H 'Access-Control-Request-Method: POST' http://localhost:8080
* Rebuilt URL to: http://localhost:8080/
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> OPTIONS/HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
> Origin: http://example.com
> Access-Control-Request-Method: POST
>
< HTTP/1.1 200 OK
< access-control-allow-origin: http://example.com
< vary: origin
< access-control-allow-methods: POST
< access-control-allow-headers:
< access-control-max-age: 0
< date: "Tue, 26 Sep 2017 20:03:53 GMT"
< content-length: 0
<
* Connection #0 to host localhost left intact
CORS 검사를 통과하지 못한 원본에서 요청하면 연결을 닫지 않습니다.
$ curl -sv -X OPTIONS -H 'Origin: http://invalid.com' -H 'Access-Control-Request-Method: POST' http://localhost:8080
* Rebuilt URL to: http://localhost:8080/
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
> OPTIONS/HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.54.0
> Accept: */*
> Origin: http://invalid.com
> Access-Control-Request-Method: POST
>
< HTTP/1.1 200 OK
* no chunk, no close, no size. Assume close to signal end
<
netty에 버그가있을 수 있습니다. 제출하면 버그가 될 수 있습니다.
나는 그물코 4.1.6 - 최종 및 4.1.16-최종, 같은 결과를 테스트했다. – mgbelisle
Stack Overflow는 버그보고 사이트가 아니므로 github의 netty issues 섹션에서 버그를보고해야합니다. https://github.com/netty/netty/issues 또한 상단 예제에서 netty는 연결을 닫지 않습니다 (예 : 거기에 ano 연결 헤더가 있습니다.) – Ferrybig
당신 말이 맞아요, 지적 해 주셔서 고맙습니다. 나는 연결 유지와 vs 1.1 및 vs 1.1의 비교를 잘 이해하지 못했지만 지금은 당신이 말하는 것을보고 있습니다. 나는 여기에 제출 한 netty의 버그를 추적했다 : https://github.com/netty/netty/pull/7261 내가 처음으로 말했던 것처럼 그것이 버그인지 알지 못했다. 게시하다. 내가 버그라고 알고 있다면 확실히 제출하지 않았을 것입니다. – mgbelisle