diff --git a/okhttp-logging-interceptor/src/main/java/okhttp3/logging/HttpLoggingInterceptor.java b/okhttp-logging-interceptor/src/main/java/okhttp3/logging/HttpLoggingInterceptor.java index a77bc5639..4c663f341 100644 --- a/okhttp-logging-interceptor/src/main/java/okhttp3/logging/HttpLoggingInterceptor.java +++ b/okhttp-logging-interceptor/src/main/java/okhttp3/logging/HttpLoggingInterceptor.java @@ -51,9 +51,9 @@ public final class HttpLoggingInterceptor implements Interceptor { * *

Example: *

{@code
-     * --> POST /greeting HTTP/1.1 (3-byte body)
+     * --> POST /greeting http/1.1 (3-byte body)
      *
-     * <-- HTTP/1.1 200 OK (22ms, 6-byte body)
+     * <-- 200 OK (22ms, 6-byte body)
      * }
*/ BASIC, @@ -62,13 +62,13 @@ public final class HttpLoggingInterceptor implements Interceptor { * *

Example: *

{@code
-     * --> POST /greeting HTTP/1.1
+     * --> POST /greeting http/1.1
      * Host: example.com
      * Content-Type: plain/text
      * Content-Length: 3
      * --> END POST
      *
-     * <-- HTTP/1.1 200 OK (22ms)
+     * <-- 200 OK (22ms)
      * Content-Type: plain/text
      * Content-Length: 6
      * <-- END HTTP
@@ -80,7 +80,7 @@ public final class HttpLoggingInterceptor implements Interceptor {
      *
      * 

Example: *

{@code
-     * --> POST /greeting HTTP/1.1
+     * --> POST /greeting http/1.1
      * Host: example.com
      * Content-Type: plain/text
      * Content-Length: 3
@@ -88,7 +88,7 @@ public final class HttpLoggingInterceptor implements Interceptor {
      * Hi?
      * --> END GET
      *
-     * <-- HTTP/1.1 200 OK (22ms)
+     * <-- 200 OK (22ms)
      * Content-Type: plain/text
      * Content-Length: 6
      *
@@ -149,8 +149,7 @@ public final class HttpLoggingInterceptor implements Interceptor {
 
     Connection connection = chain.connection();
     Protocol protocol = connection != null ? connection.protocol() : Protocol.HTTP_1_1;
-    String requestStartMessage =
-        "--> " + request.method() + ' ' + request.url() + ' ' + protocol(protocol);
+    String requestStartMessage = "--> " + request.method() + ' ' + request.url() + ' ' + protocol;
     if (!logHeaders && hasRequestBody) {
       requestStartMessage += " (" + requestBody.contentLength() + "-byte body)";
     }
@@ -247,8 +246,4 @@ public final class HttpLoggingInterceptor implements Interceptor {
     String contentEncoding = headers.get("Content-Encoding");
     return contentEncoding != null && !contentEncoding.equalsIgnoreCase("identity");
   }
-
-  private static String protocol(Protocol protocol) {
-    return protocol == Protocol.HTTP_1_0 ? "HTTP/1.0" : "HTTP/1.1";
-  }
 }
diff --git a/okhttp-logging-interceptor/src/test/java/okhttp3/logging/HttpLoggingInterceptorTest.java b/okhttp-logging-interceptor/src/test/java/okhttp3/logging/HttpLoggingInterceptorTest.java
index 42ac9d214..c1c0df1be 100644
--- a/okhttp-logging-interceptor/src/test/java/okhttp3/logging/HttpLoggingInterceptorTest.java
+++ b/okhttp-logging-interceptor/src/test/java/okhttp3/logging/HttpLoggingInterceptorTest.java
@@ -113,12 +113,12 @@ public final class HttpLoggingInterceptorTest {
     client.newCall(request().build()).execute();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, 0-byte body\\)")
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, 0-byte body\\)")
         .assertNoMoreLogs();
   }
@@ -130,12 +130,12 @@ public final class HttpLoggingInterceptorTest {
     client.newCall(request().post(RequestBody.create(PLAIN, "Hi?")).build()).execute();
 
     applicationLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1 (3-byte body)")
+        .assertLogEqual("--> POST " + url + " http/1.1 (3-byte body)")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, 0-byte body\\)")
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1 (3-byte body)")
+        .assertLogEqual("--> POST " + url + " http/1.1 (3-byte body)")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, 0-byte body\\)")
         .assertNoMoreLogs();
   }
@@ -150,12 +150,12 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, 6-byte body\\)")
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, 6-byte body\\)")
         .assertNoMoreLogs();
   }
@@ -170,12 +170,12 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, unknown-length body\\)")
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms, unknown-length body\\)")
         .assertNoMoreLogs();
   }
@@ -188,7 +188,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("--> END GET")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
         .assertLogEqual("Content-Length: 0")
@@ -198,7 +198,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
         .assertLogEqual("Accept-Encoding: gzip")
@@ -221,7 +221,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Type: text/plain; charset=utf-8")
         .assertLogEqual("Content-Length: 3")
         .assertLogEqual("--> END POST")
@@ -233,7 +233,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Type: text/plain; charset=utf-8")
         .assertLogEqual("Content-Length: 3")
         .assertLogEqual("Host: " + host)
@@ -258,7 +258,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Length: 3")
         .assertLogEqual("--> END POST")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
@@ -269,7 +269,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Length: 3")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
@@ -301,7 +301,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Type: text/plain; charset=utf-8")
         .assertLogEqual("--> END POST")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
@@ -312,7 +312,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Type: text/plain; charset=utf-8")
         .assertLogEqual("Transfer-Encoding: chunked")
         .assertLogEqual("Host: " + host)
@@ -338,7 +338,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("--> END GET")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
         .assertLogEqual("Content-Length: 6")
@@ -349,7 +349,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
         .assertLogEqual("Accept-Encoding: gzip")
@@ -372,7 +372,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("--> END GET")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
         .assertLogEqual("Content-Length: 0")
@@ -382,7 +382,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
         .assertLogEqual("Accept-Encoding: gzip")
@@ -413,7 +413,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("--> END GET")
         .assertLogMatch("<-- " + code + " No Content " + url + " \\(\\d+ms\\)")
         .assertLogEqual("Content-Length: 0")
@@ -423,7 +423,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
         .assertLogEqual("Accept-Encoding: gzip")
@@ -446,7 +446,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Type: text/plain; charset=utf-8")
         .assertLogEqual("Content-Length: 3")
         .assertLogEqual("")
@@ -460,7 +460,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> POST " + url + " HTTP/1.1")
+        .assertLogEqual("--> POST " + url + " http/1.1")
         .assertLogEqual("Content-Type: text/plain; charset=utf-8")
         .assertLogEqual("Content-Length: 3")
         .assertLogEqual("Host: " + host)
@@ -488,7 +488,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("--> END GET")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
         .assertLogEqual("Content-Length: 6")
@@ -501,7 +501,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
         .assertLogEqual("Accept-Encoding: gzip")
@@ -528,7 +528,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("--> END GET")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
         .assertLogEqual("Transfer-encoding: chunked")
@@ -541,7 +541,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
         .assertLogEqual("Accept-Encoding: gzip")
@@ -570,7 +570,7 @@ public final class HttpLoggingInterceptorTest {
     response.body().close();
 
     networkLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("Host: " + host)
         .assertLogEqual("Connection: Keep-Alive")
         .assertLogEqual("Accept-Encoding: gzip")
@@ -586,7 +586,7 @@ public final class HttpLoggingInterceptorTest {
         .assertNoMoreLogs();
 
     applicationLogs
-        .assertLogEqual("--> GET " + url + " HTTP/1.1")
+        .assertLogEqual("--> GET " + url + " http/1.1")
         .assertLogEqual("--> END GET")
         .assertLogMatch("<-- 200 OK " + url + " \\(\\d+ms\\)")
         .assertLogEqual("Content-Type: text/plain; charset=utf-8")
diff --git a/okhttp-tests/src/test/java/okhttp3/CallTest.java b/okhttp-tests/src/test/java/okhttp3/CallTest.java
index e5d46d88a..12bf5db21 100644
--- a/okhttp-tests/src/test/java/okhttp3/CallTest.java
+++ b/okhttp-tests/src/test/java/okhttp3/CallTest.java
@@ -2305,6 +2305,29 @@ public final class CallTest {
     assertEquals("password", get.getHeader("Proxy-Authorization"));
   }
 
+  @Test public void interceptorGetsFramedProtocol() throws Exception {
+    enableProtocol(Protocol.HTTP_2);
+
+    // Capture the protocol as it is observed by the interceptor.
+    final AtomicReference protocolRef = new AtomicReference<>();
+    Interceptor interceptor = new Interceptor() {
+      @Override public Response intercept(Chain chain) throws IOException {
+        protocolRef.set(chain.connection().protocol());
+        return chain.proceed(chain.request());
+      }
+    };
+    client = client.newBuilder()
+        .addNetworkInterceptor(interceptor)
+        .build();
+
+    // Make an HTTP/2 request and confirm that the protocol matches.
+    server.enqueue(new MockResponse());
+    executeSynchronously(new Request.Builder()
+        .url(server.url("/"))
+        .build());
+    assertEquals(Protocol.HTTP_2, protocolRef.get());
+  }
+
   private void makeFailingCall() {
     RequestBody requestBody = new RequestBody() {
       @Override public MediaType contentType() {
diff --git a/okhttp/src/main/java/okhttp3/internal/io/RealConnection.java b/okhttp/src/main/java/okhttp3/internal/io/RealConnection.java
index 3077a7717..a0509a08d 100644
--- a/okhttp/src/main/java/okhttp3/internal/io/RealConnection.java
+++ b/okhttp/src/main/java/okhttp3/internal/io/RealConnection.java
@@ -360,7 +360,11 @@ public final class RealConnection implements Connection {
   }
 
   @Override public Protocol protocol() {
-    return protocol != null ? protocol : Protocol.HTTP_1_1;
+    if (framedConnection == null) {
+      return protocol != null ? protocol : Protocol.HTTP_1_1;
+    } else {
+      return framedConnection.getProtocol();
+    }
   }
 
   @Override public String toString() {