【问题标题】:disallowing a particular http method禁止特定的 http 方法
【发布时间】:2021-02-02 15:33:51
【问题描述】:

https://github.com/openzipkin/zipkin/pull/3239 相关,我们遇到了一些(可能)奇怪的行为,我想知道下面的测试是否按预期工作:

import com.linecorp.armeria.client.WebClient;
import com.linecorp.armeria.common.HttpMethod;
import com.linecorp.armeria.common.HttpRequest;
import com.linecorp.armeria.common.HttpResponse;
import com.linecorp.armeria.common.HttpStatus;
import com.linecorp.armeria.server.Server;
import com.linecorp.armeria.server.ServerBuilder;
import java.util.concurrent.CompletableFuture;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

public class ArmeriaTraceBug {

  @Test
  public void test_trace_bug() throws Exception {
    ServerBuilder sb = Server.builder();
    sb.http(7003);
    sb.service("/", (ctx, req) -> HttpResponse.of("Hello, world!"));
    sb.routeDecorator()
      .methods(HttpMethod.TRACE)
      .pathPrefix("/")
      .build((delegate, ctx, req) -> HttpResponse.of(HttpStatus.METHOD_NOT_ALLOWED));
    Server server = sb.build();
    CompletableFuture<Void> future = server.start();
    future.join();
    WebClient webClient = WebClient.of("http://localhost:7003/");
    final HttpResponse response = webClient.execute(HttpRequest.of(HttpMethod.OPTIONS, "/something"));
    assertThat(response.aggregate().get().status()).isEqualTo(HttpStatus.NOT_FOUND);
  }
}

基本上我们想禁用所有TRACE 请求,并设置pathPrefix("/") 来实现这一点。但由于某种原因,OPTIONS/something 的调用被困在同一路径中。如果我删除路由装饰器,事情会按预期工作。

【问题讨论】:

  • POST 等其他方法呢?他们也被困住了吗?
  • 确实,POST 也被困住了。修复似乎已经在进行中,感谢您的快速回复!

标签: armeria


【解决方案1】:

感谢 Jorg Heymans 的提问。 是的,这是一个错误,应该由https://github.com/line/armeria/pull/3120 修复 谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2012-04-23
    • 2012-01-08
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多