diff --git a/quic/core/http/quic_receive_control_stream.cc b/quic/core/http/quic_receive_control_stream.cc
index 62c9ba8..1367a95 100644
--- a/quic/core/http/quic_receive_control_stream.cc
+++ b/quic/core/http/quic_receive_control_stream.cc
@@ -110,13 +110,6 @@
     return false;
   }
 
-  if (GetQuicReloadableFlag(quic_http3_goaway_new_behavior)) {
-    QUIC_RELOADABLE_FLAG_COUNT(quic_http3_goaway_new_behavior);
-  } else if (spdy_session()->perspective() == Perspective::IS_SERVER) {
-    OnWrongFrame("Go Away");
-    return false;
-  }
-
   spdy_session()->OnHttp3GoAway(frame.id);
   return true;
 }
diff --git a/quic/core/http/quic_receive_control_stream_test.cc b/quic/core/http/quic_receive_control_stream_test.cc
index d1db3c4..e908162 100644
--- a/quic/core/http/quic_receive_control_stream_test.cc
+++ b/quic/core/http/quic_receive_control_stream_test.cc
@@ -296,18 +296,8 @@
 
   EXPECT_CALL(debug_visitor, OnGoAwayFrameReceived(goaway));
 
-  if (!GetQuicReloadableFlag(quic_http3_goaway_new_behavior) &&
-      perspective() == Perspective::IS_SERVER) {
-    EXPECT_CALL(
-        *connection_,
-        CloseConnection(QUIC_HTTP_FRAME_UNEXPECTED_ON_CONTROL_STREAM, _, _));
-  }
-
   receive_control_stream_->OnStreamFrame(frame);
-  if (GetQuicReloadableFlag(quic_http3_goaway_new_behavior) ||
-      perspective() == Perspective::IS_CLIENT) {
-    EXPECT_TRUE(session_.goaway_received());
-  }
+  EXPECT_TRUE(session_.goaway_received());
 }
 
 TEST_P(QuicReceiveControlStreamTest, PushPromiseOnControlStreamShouldClose) {
diff --git a/quic/core/http/quic_spdy_session.cc b/quic/core/http/quic_spdy_session.cc
index 03eb235..e8f4db8 100644
--- a/quic/core/http/quic_spdy_session.cc
+++ b/quic/core/http/quic_spdy_session.cc
@@ -664,42 +664,21 @@
   QUIC_BUG_IF(!version().UsesHttp3())
       << "HTTP/3 GOAWAY received on version " << version();
 
-  if (GetQuicReloadableFlag(quic_http3_goaway_new_behavior)) {
-    if (last_received_http3_goaway_id_.has_value() &&
-        id > last_received_http3_goaway_id_.value()) {
-      CloseConnectionWithDetails(
-          QUIC_HTTP_GOAWAY_ID_LARGER_THAN_PREVIOUS,
-          quiche::QuicheStrCat("GOAWAY received with ID ", id,
-                               " greater than previously received ID ",
-                               last_received_http3_goaway_id_.value()));
-      return;
-    }
-    last_received_http3_goaway_id_ = id;
-
-    if (perspective() == Perspective::IS_SERVER) {
-      // TODO(b/151749109): Cancel server pushes with push ID larger than |id|.
-      return;
-    }
-
-    // QuicStreamId is uint32_t.  Casting to this narrower type is well-defined
-    // and preserves the lower 32 bits.  Both IsBidirectionalStreamId() and
-    // IsIncomingStream() give correct results, because their return value is
-    // determined by the least significant two bits.
-    QuicStreamId stream_id = static_cast<QuicStreamId>(id);
-    if (!QuicUtils::IsBidirectionalStreamId(stream_id, version()) ||
-        IsIncomingStream(stream_id)) {
-      CloseConnectionWithDetails(QUIC_HTTP_GOAWAY_INVALID_STREAM_ID,
-                                 "GOAWAY with invalid stream ID");
-      return;
-    }
-
-    // TODO(b/161252736): Cancel client requests with ID larger than |id|.
-    // If |id| is larger than numeric_limits<QuicStreamId>::max(), then use
-    // max() instead of downcast value.
+  if (last_received_http3_goaway_id_.has_value() &&
+      id > last_received_http3_goaway_id_.value()) {
+    CloseConnectionWithDetails(
+        QUIC_HTTP_GOAWAY_ID_LARGER_THAN_PREVIOUS,
+        quiche::QuicheStrCat("GOAWAY received with ID ", id,
+                             " greater than previously received ID ",
+                             last_received_http3_goaway_id_.value()));
     return;
   }
+  last_received_http3_goaway_id_ = id;
 
-  DCHECK_EQ(perspective(), Perspective::IS_CLIENT);
+  if (perspective() == Perspective::IS_SERVER) {
+    // TODO(b/151749109): Cancel server pushes with push ID larger than |id|.
+    return;
+  }
 
   // QuicStreamId is uint32_t.  Casting to this narrower type is well-defined
   // and preserves the lower 32 bits.  Both IsBidirectionalStreamId() and
@@ -708,12 +687,14 @@
   QuicStreamId stream_id = static_cast<QuicStreamId>(id);
   if (!QuicUtils::IsBidirectionalStreamId(stream_id, version()) ||
       IsIncomingStream(stream_id)) {
-    CloseConnectionWithDetails(
-        QUIC_INVALID_STREAM_ID,
-        "GOAWAY's last stream id has to point to a request stream");
+    CloseConnectionWithDetails(QUIC_HTTP_GOAWAY_INVALID_STREAM_ID,
+                               "GOAWAY with invalid stream ID");
     return;
   }
-  last_received_http3_goaway_id_ = id;
+
+  // TODO(b/161252736): Cancel client requests with ID larger than |id|.
+  // If |id| is larger than numeric_limits<QuicStreamId>::max(), then use
+  // max() instead of downcast value.
 }
 
 bool QuicSpdySession::OnStreamsBlockedFrame(
diff --git a/quic/core/http/quic_spdy_session_test.cc b/quic/core/http/quic_spdy_session_test.cc
index accb2a0..a3c4a52 100644
--- a/quic/core/http/quic_spdy_session_test.cc
+++ b/quic/core/http/quic_spdy_session_test.cc
@@ -1195,9 +1195,6 @@
   if (!VersionUsesHttp3(transport_version())) {
     return;
   }
-  if (!GetQuicReloadableFlag(quic_http3_goaway_new_behavior)) {
-    return;
-  }
 
   EXPECT_FALSE(session_.goaway_received());
   PushId push_id1 = 0;
@@ -2770,17 +2767,9 @@
   if (!VersionUsesHttp3(transport_version())) {
     return;
   }
-  if (GetQuicReloadableFlag(quic_http3_goaway_new_behavior)) {
-    EXPECT_CALL(*connection_,
-                CloseConnection(QUIC_HTTP_GOAWAY_INVALID_STREAM_ID,
-                                "GOAWAY with invalid stream ID", _));
-  } else {
-    EXPECT_CALL(
-        *connection_,
-        CloseConnection(
-            QUIC_INVALID_STREAM_ID,
-            "GOAWAY's last stream id has to point to a request stream", _));
-  }
+  EXPECT_CALL(*connection_,
+              CloseConnection(QUIC_HTTP_GOAWAY_INVALID_STREAM_ID,
+                              "GOAWAY with invalid stream ID", _));
   QuicStreamId stream_id =
       GetNthServerInitiatedUnidirectionalStreamId(transport_version(), 0);
   session_.OnHttp3GoAway(stream_id);
@@ -2790,9 +2779,6 @@
   if (!VersionUsesHttp3(transport_version())) {
     return;
   }
-  if (!GetQuicReloadableFlag(quic_http3_goaway_new_behavior)) {
-    return;
-  }
 
   EXPECT_FALSE(session_.goaway_received());
   QuicStreamId stream_id1 =
