当前位置: 首页 > 知识库问答 >
问题:

Spring-Cloud-Gateway:HTTP400当请求中超过30个头时

子车英达
2023-03-14

我使用spring-cloud-gateway作为API网关,它位于apache层后面,负责预身份验证(单点登录)。这一层向我的spring-cloud-gateway应用程序的传入请求添加了一系列头,当这个数字超过30个头时。我从网关得到HTTP400响应。

java prettyprint-override">HttpHeaders headers = new HttpHeaders();
headers.setContentType(APPLICATION_JSON);
headers.set(PRINCIPAL, userId);
HttpEntity<Void> responseType = new HttpEntity<Void>(headers);
ResponseEntity<UserDto> response = restTemplate.exchange(CURRENT_USER_ENDPOINT, HttpMethod.GET, responseType, UserDto.class);
addUserDetailsToHeaders(exchange, response.getBody());
<html>
  <head>
    <title>Bad Request</title>
  </head>
  <body>
    <h1><p>Bad Request</p></h1>
    Error parsing headers: &#x27;limit request headers fields&#x27;
  </body>
</html>

curl 'http://localhost:8080/my-api-app/' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36' -H 'Sec-Fetch-Mode: navigate' -H 'Sec-Fetch-User: ?1' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'Sec-Fetch-Site: none' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,ja;q=0.7' -H 'Cookie: 567583457' -H 'uid: 1234567' -H 'employee: N' -H 'x-forwarded-proto: https' -H 'x-forwarded-for: 10.45.67.65, 172.16.8.1' -H 'X-Forwarded-Host: xxxxxxxxxxxxxxx' -H 'X-Forwarded-Server: xxxxxxxxxxxxx' -H 'Ct_request_id: 11' -H 'managername: xxxxxxxx, xxxxx'  -H 'Ctscuserkeywords: NotExpired,PasswordPolicy' -H 'Destinationindicator: IE' -H 'a: b' -H 'c: d' -H 'derek: test'  --compressed

我可以使用spring-cloud-gateway-sample项目模拟相同的400响应,方法是使用这个卷度(所以实际的限制看起来像90)

curl 'http://localhost:8080/get' -H 'key1: val' -H 'key2: val' -H 'key3: val' -H 'key4: val' -H 'key5: val' -H 'key6: val' -H 'key7: val' -H 'key8: val' -H 'key9: val' -H 'key10: val' -H 'key11: val' -H 'key12: val' -H 'key13: val' -H 'key14: val' -H 'key15: val' -H 'key16: val' -H 'key17: val' -H 'key18: val' -H 'key19: val' -H 'key20: val' -H 'key21: val' -H 'key22: val' -H 'key23: val' -H 'key24: val' -H 'key25: val' -H 'key26: val' -H 'key27: val' -H 'key28: val' -H 'key29: val' -H 'key30: val' -H 'key31: val' -H 'key32: val' -H 'key33: val' -H 'key34: val' -H 'key35: val' -H 'key36: val' -H 'key37: val' -H 'key38: val' -H 'key39: val' -H 'key40: val' -H 'key41: val' -H 'key42: val' -H 'key43: val' -H 'key44: val' -H 'key45: val' -H 'key46: val' -H 'key47: val' -H 'key48: val' -H 'key49: val' -H 'key50: val' -H 'key51: val' -H 'key52: val' -H 'key53: val' -H 'key54: val' -H 'key55: val' -H 'key56: val' -H 'key57: val' -H 'key58: val' -H 'key59: val' -H 'key60: val' -H 'key61: val' -H 'key62: val' -H 'key63: val' -H 'key64: val' -H 'key65: val' -H 'key66: val' -H 'key67: val' -H 'key68: val' -H 'key69: val' -H 'key70: val' -H 'key71: val' -H 'key72: val' -H 'key73: val' -H 'key74: val' -H 'key75: val' -H 'key76: val' -H 'key77: val' -H 'key78: val' -H 'key79: val' -H 'key80: val' -H 'key81: val' -H 'key82: val' -H 'key83: val' -H 'key84: val' -H 'key85: val' -H 'key86: val' -H 'key87: val' -H 'key88: val' -H 'key89: val' -H 'key90: val' -H 'key91: val'

共有1个答案

姜学海
2023-03-14

问题是CloudFoundry的cf路由器拒绝了请求。网关没问题。让它困惑的是,cf路由器在返回400时不添加任何响应头。

我有一个自定义过滤器,添加了一个包含逗号分隔列表的特殊标题,该列表相当长(200到300个字符)。我缩短了这个的长度,然后它起作用了。

 类似资料:
  • 问题内容: 我试图使用python-requests库抓取此页面 但我得到了以上错误。(TooManyRedirects)我尝试使用参数但出现相同错误 我什至尝试发送标头和数据以及url,但是我不确定这是否是正确的方法。 如何解决此错误。出于好奇,我什至尝试了beautiful-soup4,但出现了不同但相同的错误 问题答案: Amazon会将您的请求重定向到,然后将其重定向到,之后您进入一个循环

  • 我希望设置我的Spring Boot server超时,比如说15秒。明确一点:我希望如果我的服务器在15秒内没有响应,它将返回一个错误响应(类似于Heroku中发生的情况,只有30秒)。我怎么能那么做? 我的问题实际上源于这样一个事实,即该服务是一个网关,它调用另一个服务,有时需要很长时间来响应,而我无法控制该服务的超时。因为我使用的是SDK文件来调用服务器,所以我无法控制传出的调用。有没有一种

  • 我们使用Spring Cloud Gateway将请求路由到多个底层服务。对这些底层服务的调用将是连续的,并可能相互传递(来自一个服务的响应在下一个服务的请求中使用)。当我们需要在主请求之前顺序地发出这些请求时,我们有一个可行的解决方案,但在主请求之后,我们在将一个代理请求的响应输入到下一个代理请求的请求中时遇到了问题。 我们计划将响应从一个请求发送到下一个请求的方式是使用GatewayFilte

  • 这是我的虚拟接口 和我的自定义配置 如果我像这样发送请求,我会看到我的请求发送了Content-Type:application/JSON;字符集=UTF-8。但是如果我设置了内容类型 我收到了这条错误消息。 如何发送POST请求,我认为我应该用编码器做更多的东西。感谢您的帮助。

  • 问题内容: 我在MySQL数据库中有一张表。该表的名称超过30个字符,我想在Oracle 11g中创建相同的表,但是Oracle仅允许名称中最多包含30个字符的表。 我不能将表的名称更改为少于30个字符,因为系统是基于这些表的,如果更改名称,这将花费我很多钱,因此更改表名称不是我的答案正在寻找。 有一个名为的表,当我描述该表时,它说该字段具有数据类型,因此我试图更改该表并制作,但我做不到,这给了我

  • 问题内容: 我有一个Spring Boot REST服务,有时会在请求中调用第三方服务。我想对所有资源设置一个超时时间(假设为5秒),这样,如果任何请求处理(从输入到响应的整个链)花费的时间超过5秒,我的控制器将使用HTTP 503而不是实际响应进行响应。如果这只是一个Spring属性,那就太好了,例如设置 但是我没有任何运气。我也尝试过扩展WebMvcConfigurationSupport并覆