diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/AbstractTraceHttpRequestInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/AbstractTraceHttpRequestInterceptor.java
index b1f17fcc7..57b267ac4 100644
--- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/AbstractTraceHttpRequestInterceptor.java
+++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/AbstractTraceHttpRequestInterceptor.java
@@ -66,7 +66,9 @@ abstract class AbstractTraceHttpRequestInterceptor {
}
private String getName(URI uri) {
- return SpanNameUtil.shorten(uriScheme(uri) + ":" + uri.getPath());
+ // The returned name should comply with RFC 882 - Section 3.1.2.
+ // i.e Header values must composed of printable ASCII values.
+ return SpanNameUtil.shorten(uriScheme(uri) + ":" + uri.getRawPath());
}
private String uriScheme(URI uri) {
diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java
index 9a892246d..f207ebec5 100644
--- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java
+++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
+import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -156,6 +157,23 @@ public class TraceRestTemplateInterceptorTests {
then(this.testController.span).hasNameEqualTo("http:/");
}
+ @Test
+ public void createdSpanNameHasOnlyPrintableAsciiCharactersForNonEncodedURIWithNonAsciiChars() {
+ this.tracer.continueSpan(Span.builder().traceId(1L).spanId(2L).exportable(false).build());
+
+ try {
+ this.template.getForEntity("/cas~fs~划", Map.class).getBody();
+ }
+ catch (Exception e) {
+
+ }
+
+ String spanName = this.spanAccumulator.getSpans().get(0).getName();
+ then(this.spanAccumulator.getSpans().get(0).getName()).isEqualTo("http:/cas~fs~%C3%A5%CB%86%E2%80%99");
+ then(StringUtils.isAsciiPrintable(spanName));
+ then(ExceptionUtils.getLastException()).isNull();
+ }
+
@Test
public void willShortenTheNameOfTheSpan() {
this.tracer.continueSpan(Span.builder().traceId(1L).spanId(2L).exportable(false).build());
diff --git a/spring-cloud-sleuth-zipkin/pom.xml b/spring-cloud-sleuth-zipkin/pom.xml
index 0bc7cd721..debc641fe 100644
--- a/spring-cloud-sleuth-zipkin/pom.xml
+++ b/spring-cloud-sleuth-zipkin/pom.xml
@@ -107,7 +107,7 @@
com.squareup.okhttp3
okhttp
- 3.6.0
+ 3.9.0
test