Repository: kubernetes-sigs/gateway-api

Issue:
Add hook points support in conformance test suite
<!-- Please only use this template for submitting enhancement requests -->

<!--
WARNING: depending on the scope of the enhancement you may be asked to use the
GEP process to build consensus around a proposed change. Please carefully read
through the GEP overview and include a link to the prerequisite GEP discussion
when submitting this issue:
https://gateway-api.sigs.k8s.io/geps/overview/
-->

**What would you like to be added**:

Add the hook point support for current conformance test suite.

For example, like `AfterTestFail` hook point, developers can attach various commands to this hook point, and programs that attach to this hook point wil only be executed if one conformance test is failed.

**Why this is needed**:

This will be super helpful for developers to debug the failed conformance test. 

Sometimes the error trace reported by conformance test is not very useful. For example, we'd like to see the status/logs of specific resources (by attaching `kubectl` cmd to the hook which I described above could ease the pain), even some other configs that can be retrieved by other commands.




Discussion:
@k8s-ci-robot: @mlavacca: The label(s) `/label needs-triage` cannot be applied. These labels are supported: `api-review, tide/merge-method-merge, tide/merge-method-rebase, tide/merge-method-squash, team/katacoda, refactor`. Is this label configured under `labels -> additional_labels` or `labels -> restricted_labels` in `plugin.yaml`?

<details>

In response to [this](https://github.com/kubernetes-sigs/gateway-api/issues/3131#issuecomment-2147411123):

>/label needs-triage


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository.
</details>@k8s-ci-robot: @mlavacca: The label(s) `triage/needs` cannot be applied, because the repository doesn't have them.

<details>

In response to [this](https://github.com/kubernetes-sigs/gateway-api/issues/3131#issuecomment-2147415530):

>/triage needs


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository.
</details>@mlavacca: /triage needs-triage@k8s-ci-robot: @mlavacca: The label(s) `triage/needs-triage` cannot be applied, because the repository doesn't have them.

<details>

In response to [this](https://github.com/kubernetes-sigs/gateway-api/issues/3131#issuecomment-2147489112):

>/triage needs-triage


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository.
</details>@kflynn: This sounds like a good idea, yeah. Making it easier for developers to get value from the conformance tests, whether or not they're "part of the Gateway API", sounds like a Good Thing™. 🙂 @robscott: Discussed in today's community meeting, this sounds like a great idea, thanks @shawnh2!

/triage accepted@shawnh2: Assign myself, since I've been working on something that is quite similar to this issue as well. I will post the initial design of this here once it's done. 

/assign

Solution patch:
diff --git a/RELEASE_MANAGEMENT.md b/RELEASE_MANAGEMENT.md
index cd8f0f18..94e2c724 100644
--- a/RELEASE_MANAGEMENT.md
+++ b/RELEASE_MANAGEMENT.md
@@ -107,5 +107,9 @@ volunteers the release may simply end being a smaller **maintenance release**.
 Release candidates--and the eventual final release--must utilize the [Release
 Process](/RELEASE.md) for delivery.
 
+As the release nears completion, the release-manager should proactively reach
+out to implementations to get them ready to send conformance reports for the
+final release when it is cut.
+
 [Release Cycle]:https://gateway-api.sigs.k8s.io/contributing/release-cycle/
 [Milestone]:#github-milestone
diff --git a/apis/v1/httproute_types.go b/apis/v1/httproute_types.go
index 6131d70b..6fec27d6 100644
--- a/apis/v1/httproute_types.go
+++ b/apis/v1/httproute_types.go
@@ -988,11 +988,11 @@ type HTTPHeader struct {
 }
 
 // HTTPHeaderFilter defines a filter that modifies the headers of an HTTP
-// request or response. Only one action for a given header name is permitted.
-// Filters specifying multiple actions of the same or different type for any one
-// header name are invalid and will be rejected by CRD validation.
-// Configuration to set or add multiple values for a header must use RFC 7230
-// header value formatting, separating each value with a comma.
+// request or response. Only one action for a given header name is
+// permitted. Filters specifying multiple actions of the same or different
+// type for any one header name are invalid. Configuration to set or add
+// multiple values for a header must use RFC 7230 header value formatting,
+// separating each value with a comma.
 type HTTPHeaderFilter struct {
 	// Set overwrites the request with the given header (name, value)
 	// before the action.
diff --git a/conformance/reports/v1.1.0/airlock-microgateway/README.md b/conformance/reports/v1.1.0/airlock-microgateway/README.md
index c7464092..a23522a4 100644
--- a/conformance/reports/v1.1.0/airlock-microgateway/README.md
+++ b/conformance/reports/v1.1.0/airlock-microgateway/README.md
@@ -6,7 +6,7 @@
 |--------------|----------------------------------------------------------------------|---------|--------------------------------------------------|
 | experimental | [v4.4.0](https://github.com/airlock/microgateway/releases/tag/4.4.0) | default | [v4.4.0 report](./experimental-4.4.0-default-report.yaml) |
 | standard     | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [v4.5.0 report](./standard-4.5.0-default-report.yaml)     |
-
+| standard     | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [v4.6.0 report](./standard-4.6.0-default-report.yaml)     |
 
 ## Reproduce
 
diff --git a/conformance/reports/v1.1.0/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.1.0/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..5152c07e
--- /dev/null
+++ b/conformance/reports/v1.1.0/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,47 @@
+apiVersion: gateway.networking.k8s.io/v1alpha1
+date: "2025-05-19T14:32:51Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.1.0
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+    supportedFeatures:
+    - GatewayPort8080
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestTimeout
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.1.1/airlock-microgateway/README.md b/conformance/reports/v1.1.1/airlock-microgateway/README.md
index 27868c3f..a61abd83 100644
--- a/conformance/reports/v1.1.1/airlock-microgateway/README.md
+++ b/conformance/reports/v1.1.1/airlock-microgateway/README.md
@@ -5,6 +5,7 @@
 | API channel | Implementation version                                               | Mode    | Report                                       |
 |-------------|----------------------------------------------------------------------|---------|----------------------------------------------|
 | standard    | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [link](./standard-4.5.0-default-report.yaml) |
+| standard    | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./standard-4.6.0-default-report.yaml) |
 
 ## Reproduce
 
diff --git a/conformance/reports/v1.1.1/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.1.1/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..93c2a251
--- /dev/null
+++ b/conformance/reports/v1.1.1/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,47 @@
+apiVersion: gateway.networking.k8s.io/v1alpha1
+date: "2025-05-19T14:32:48Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.1.1
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+    supportedFeatures:
+    - GatewayPort8080
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestTimeout
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
diff --git a/conformance/reports/v1.2.0/airlock-microgateway/README.md b/conformance/reports/v1.2.0/airlock-microgateway/README.md
index 27868c3f..a61abd83 100644
--- a/conformance/reports/v1.2.0/airlock-microgateway/README.md
+++ b/conformance/reports/v1.2.0/airlock-microgateway/README.md
@@ -5,6 +5,7 @@
 | API channel | Implementation version                                               | Mode    | Report                                       |
 |-------------|----------------------------------------------------------------------|---------|----------------------------------------------|
 | standard    | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [link](./standard-4.5.0-default-report.yaml) |
+| standard    | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./standard-4.6.0-default-report.yaml) |
 
 ## Reproduce
 
diff --git a/conformance/reports/v1.2.0/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.2.0/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..cce72e90
--- /dev/null
+++ b/conformance/reports/v1.2.0/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,53 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T14:33:20Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.2.0
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 18
+      Skipped: 0
+    supportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.2.1/airlock-microgateway/README.md b/conformance/reports/v1.2.1/airlock-microgateway/README.md
index 6e691ffb..97c52418 100644
--- a/conformance/reports/v1.2.1/airlock-microgateway/README.md
+++ b/conformance/reports/v1.2.1/airlock-microgateway/README.md
@@ -5,6 +5,7 @@
 | API channel  | Implementation version                                               | Mode    | Report                                           |
 |--------------|----------------------------------------------------------------------|---------|--------------------------------------------------|
 | experimental | [v4.5.0](https://github.com/airlock/microgateway/releases/tag/4.5.0) | default | [link](./experimental-4.5.0-default-report.yaml) |
+| standard     | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./standard-4.6.0-default-report.yaml)     |
 
 ## Reproduce
 
diff --git a/conformance/reports/v1.2.1/airlock-microgateway/standard-4.6.0-default-report.yaml b/conformance/reports/v1.2.1/airlock-microgateway/standard-4.6.0-default-report.yaml
new file mode 100644
index 00000000..0589d7e3
--- /dev/null
+++ b/conformance/reports/v1.2.1/airlock-microgateway/standard-4.6.0-default-report.yaml
@@ -0,0 +1,53 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T14:36:18Z"
+gatewayAPIChannel: standard
+gatewayAPIVersion: v1.2.1
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 18
+      Skipped: 0
+    supportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.2.1/projectcontour-contour/README.md b/conformance/reports/v1.2.1/projectcontour-contour/README.md
new file mode 100644
index 00000000..2023c68d
--- /dev/null
+++ b/conformance/reports/v1.2.1/projectcontour-contour/README.md
@@ -0,0 +1,48 @@
+# Projectcontour Contour
+
+## Table of Contents
+
+|API channel|Implementation version|Mode|Report|
+|-----------|----------------------|----|------|
+|experimental|[v1.31.0](https://github.com/projectcontour/contour/releases/tag/v1.31.0)|x|[v1.31.0 report](./experimental-v1.31.0-default-report.yaml)|
+
+## Reproduce
+
+### Prerequisites
+
+Follow the Contour [contribution guide][0] documentation for setting up your local development environment, which includes ensuring `kubectl`, `docker`, `kinD`, and other tools are installed.
+
+### Steps
+
+1. Clone the Contour GitHub repository
+
+   ```bash
+   git clone https://github.com/projectcontour/contour && cd contour
+   ```
+
+2. Check out the desired version
+
+   ```bash
+   export VERSION=v<x.y.z>
+   git checkout $VERSION
+   ```
+
+3. Run the conformance tests
+
+   ```bash
+   export CONTOUR_E2E_IMAGE="ghcr.io/projectcontour/contour:$VERSION"
+   export GENERATE_GATEWAY_CONFORMANCE_REPORT="true"
+   make setup-kind-cluster run-gateway-conformance cleanup-kind
+   ```
+
+   Note: you can omit the `cleanup-kind` target if you would prefer to keep the `kinD` cluster.
+
+4. Check the produced report
+
+   ```bash
+   cat gateway-conformance-report/projectcontour-contour-*.yaml
+   ```
+
+   Note: you can set `GATEWAY_CONFORMANCE_REPORT_OUTDIR` before running the tests to customize the output location.
+
+[0]: https://github.com/projectcontour/contour/blob/main/CONTRIBUTING.md#building-from-source
diff --git a/conformance/reports/v1.2.1/projectcontour-contour/experimental-v1.31.0-default-report.yaml b/conformance/reports/v1.2.1/projectcontour-contour/experimental-v1.31.0-default-report.yaml
new file mode 100644
index 00000000..b3c0be99
--- /dev/null
+++ b/conformance/reports/v1.2.1/projectcontour-contour/experimental-v1.31.0-default-report.yaml
@@ -0,0 +1,101 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-06T14:44:31-04:00"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.2.1
+implementation:
+  contact:
+  - '@projectcontour/maintainers'
+  organization: projectcontour
+  project: contour
+  url: https://projectcontour.io/
+  version: v1.31.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: partial
+    skippedTests:
+    - HTTPRouteHTTPSListener
+    statistics:
+      Failed: 0
+      Passed: 32
+      Skipped: 1
+  extended:
+    result: partial
+    skippedTests:
+    - GatewayStaticAddresses
+    - HTTPRouteInvalidParentRefSectionNameNotMatchingPort
+    - HTTPRouteRedirectPortAndScheme
+    statistics:
+      Failed: 0
+      Passed: 20
+      Skipped: 3
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+  name: GATEWAY-HTTP
+  summary: Core tests partially succeeded with 1 test skips. Extended tests partially
+    succeeded with 3 test skips.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  extended:
+    result: partial
+    skippedTests:
+    - GatewayStaticAddresses
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 1
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-TLS
+  summary: Core tests succeeded. Extended tests partially succeeded with 1 test skips.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  extended:
+    result: partial
+    skippedTests:
+    - GatewayStaticAddresses
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 1
+    supportedFeatures:
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded. Extended tests partially succeeded with 1 test skips.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.3.0/airlock-microgateway/README.md b/conformance/reports/v1.3.0/airlock-microgateway/README.md
new file mode 100644
index 00000000..bae978e3
--- /dev/null
+++ b/conformance/reports/v1.3.0/airlock-microgateway/README.md
@@ -0,0 +1,20 @@
+# Airlock Microgateway
+
+## Table of contents
+
+| API channel  | Implementation version                                               | Mode    | Report                                           |
+|--------------|----------------------------------------------------------------------|---------|--------------------------------------------------|
+| experimental | [v4.6.0](https://github.com/airlock/microgateway/releases/tag/4.6.0) | default | [link](./experimental-4.6.0-default-report.yaml) |
+
+## Reproduce
+
+The Airlock Microgateway conformance report can be reproduced by following the steps in the [Gateway API conformance guide](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/conformance.md) on GitHub.
+
+> [!NOTE]
+> The `HTTPRouteWeight` test fires 10 concurrent request to 3 backends totaling in 500 requests to assert a distribution that matches the configured weight.
+> Please be aware that this test exceeds the [5 req/sec rate-limit](https://docs.airlock.com/microgateway/latest/#data/1675772882054.html) enforced in the <!-- markdown-link-check-disable --> [community edition](https://www.airlock.com/en/secure-access-hub/components/microgateway/community-edition) <!-- markdown-link-check-enable -->, causing the test to fail.
+> To successfully pass this test a <!-- markdown-link-check-disable --> [premium license](https://www.airlock.com/en/secure-access-hub/components/microgateway/premium-edition)  <!-- markdown-link-check-enable --> is required.
+> 
+> The Airlock Microgateway drops all request headers except for a well-known built-in standard and tracing headers list (e.g., Accept, Cookie, X-CSRF-TOKEN) to reduce the attack surface.
+> Therefore, to run the conformance tests, a `ContentSecurityPolicy` with a `HeaderRewrites` (see [`conformance-report.yaml`](https://github.com/airlock/microgateway/tree/main/examples/gateway-api/conformance/manifests/conformance-report.yaml)) is required to disable request header filtering for all `HTTPRoute` tests relying on the `MakeRequestAndExpectEventuallyConsistentResponse` assertion.
+> Regardless of whether request header filtering is enabled or disabled, header-based routing works as specified in the Gateway API, as the headers are only filtered before the request is forwarded to the upstream.
\ No newline at end of file
diff --git a/conformance/reports/v1.3.0/airlock-microgateway/experimental-4.6.0-default-report.yaml b/conformance/reports/v1.3.0/airlock-microgateway/experimental-4.6.0-default-report.yaml
new file mode 100644
index 00000000..e0548256
--- /dev/null
+++ b/conformance/reports/v1.3.0/airlock-microgateway/experimental-4.6.0-default-report.yaml
@@ -0,0 +1,55 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T14:29:59Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://www.airlock.com/en/contact
+  organization: airlock
+  project: microgateway
+  url: https://github.com/airlock/microgateway
+  version: 4.6.0
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 18
+      Skipped: 0
+    supportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayStaticAddresses
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
diff --git a/conformance/reports/v1.3.0/cilium-cilium/README.md b/conformance/reports/v1.3.0/cilium-cilium/README.md
new file mode 100644
index 00000000..81b4fe17
--- /dev/null
+++ b/conformance/reports/v1.3.0/cilium-cilium/README.md
@@ -0,0 +1,12 @@
+# Cilium
+
+## Table of Contents
+
+| API channel  | Implementation version                    | Mode    | Report                                                 |
+|--------------|-------------------------------------------|---------|--------------------------------------------------------|
+| experimental | [main](https://github.com/cilium/cilium/) | default | [main report](./experimental-main-default-report.yaml) |
+
+## Reproduce
+
+Cilium conformance tests can be reproduced by follow the steps in CI `.github/workflows/conformance-gateway-api.yaml` 
+from within the [Cilium repo](https://github.com/cilium/cilium).
diff --git a/conformance/reports/v1.3.0/cilium-cilium/experimental-main-default-report.yaml b/conformance/reports/v1.3.0/cilium-cilium/experimental-main-default-report.yaml
new file mode 100644
index 00000000..77844490
--- /dev/null
+++ b/conformance/reports/v1.3.0/cilium-cilium/experimental-main-default-report.yaml
@@ -0,0 +1,140 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-19T11:21:16Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://github.com/cilium/community/blob/main/roles/Maintainers.md
+  organization: cilium
+  project: cilium
+  url: github.com/cilium/cilium
+  version: main
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 23
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - HTTPRouteParentRefPort
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayInfrastructurePropagation
+    - GatewayPort8080
+    - GatewayStaticAddresses
+  name: GATEWAY-TLS
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 1
+      Skipped: 0
+  name: MESH-GRPC
+  summary: Core tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 2
+      Skipped: 0
+    supportedFeatures:
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    - MeshClusterIPMatching
+    unsupportedFeatures:
+    - HTTPRouteParentRefPort
+    - MeshConsumerRoute
+  name: MESH-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+succeededProvisionalTests:
+- GatewayInfrastructure
+- HTTPRouteRequestPercentageMirror
diff --git a/conformance/reports/v1.3.0/envoy-gateway/README.md b/conformance/reports/v1.3.0/envoy-gateway/README.md
new file mode 100644
index 00000000..d48c5c9a
--- /dev/null
+++ b/conformance/reports/v1.3.0/envoy-gateway/README.md
@@ -0,0 +1,34 @@
+# Envoy Gateway
+
+## Table of Contents
+
+|API channel|Implementation version|Mode|Report|
+|-----------|----------------------|----|------|
+| experimental |[v1.4.0](https://github.com/envoyproxy/gateway/releases/tag/v1.4.0)| default |[link](./experimental-v1.4.0-default-report.yaml)|
+
+## Reproduce
+
+1. Clone the Envoy Gateway GitHub repository
+
+   ```bash
+   git clone https://github.com/envoyproxy/gateway.git && cd gateway
+   ```
+
+2. Check out the desired version
+
+   ```bash
+   export VERSION=v<x.y.z>
+   git checkout $VERSION
+   ```
+
+3. Run the conformance tests
+
+   ```bash
+   CONFORMANCE_REPORT_PATH=conformance-report-k8s.yaml make experimental-conformance
+   ```
+
+4. Check the produced report
+
+   ```bash
+   cat ./conformance-report-k8s.yaml
+   ```
diff --git a/conformance/reports/v1.3.0/envoy-gateway/experimental-v1.4.0-default-report.yaml b/conformance/reports/v1.3.0/envoy-gateway/experimental-v1.4.0-default-report.yaml
new file mode 100644
index 00000000..4504a506
--- /dev/null
+++ b/conformance/reports/v1.3.0/envoy-gateway/experimental-v1.4.0-default-report.yaml
@@ -0,0 +1,71 @@
+apiVersion: gateway.networking.k8s.io/v1
+date: "2025-05-14T03:12:24Z"
+gatewayAPIChannel: experimental
+gatewayAPIVersion: v1.3.0
+implementation:
+  contact:
+  - https://github.com/envoyproxy/gateway/blob/main/GOVERNANCE.md
+  organization: envoyproxy
+  project: envoy-gateway
+  url: https://github.com/envoyproxy/gateway
+  version: latest
+kind: ConformanceReport
+mode: default
+profiles:
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 12
+      Skipped: 0
+  name: GATEWAY-GRPC
+  summary: Core tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 33
+      Skipped: 0
+  extended:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 23
+      Skipped: 0
+    supportedFeatures:
+    - GatewayAddressEmpty
+    - GatewayHTTPListenerIsolation
+    - GatewayPort8080
+    - HTTPRouteBackendProtocolH2C
+    - HTTPRouteBackendProtocolWebSocket
+    - HTTPRouteBackendRequestHeaderModification
+    - HTTPRouteBackendTimeout
+    - HTTPRouteDestinationPortMatching
+    - HTTPRouteHostRewrite
+    - HTTPRouteMethodMatching
+    - HTTPRouteParentRefPort
+    - HTTPRoutePathRedirect
+    - HTTPRoutePathRewrite
+    - HTTPRoutePortRedirect
+    - HTTPRouteQueryParamMatching
+    - HTTPRouteRequestMirror
+    - HTTPRouteRequestMultipleMirrors
+    - HTTPRouteRequestPercentageMirror
+    - HTTPRouteRequestTimeout
+    - HTTPRouteResponseHeaderModification
+    - HTTPRouteSchemeRedirect
+    unsupportedFeatures:
+    - GatewayInfrastructurePropagation
+    - GatewayStaticAddresses
+  name: GATEWAY-HTTP
+  summary: Core tests succeeded. Extended tests succeeded.
+- core:
+    result: success
+    statistics:
+      Failed: 0
+      Passed: 11
+      Skipped: 0
+  name: GATEWAY-TLS
+  summary: Core tests succeeded.
+succeededProvisionalTests:
+- HTTPRouteRequestPercentageMirror
diff --git a/conformance/utils/suite/suite.go b/conformance/utils/suite/suite.go
index 53700d6c..e6a5cb12 100644
--- a/conformance/utils/suite/suite.go
+++ b/conformance/utils/suite/suite.go
@@ -74,6 +74,7 @@ type ConformanceTestSuite struct {
 	SkipTests                sets.Set[string]
 	SkipProvisionalTests     bool
 	RunTest                  string
+	Hook                     func(t *testing.T, test ConformanceTest, suite *ConformanceTestSuite)
 	ManifestFS               []fs.FS
 	UsableNetworkAddresses   []v1beta1.GatewaySpecAddress
 	UnusableNetworkAddresses []v1beta1.GatewaySpecAddress
@@ -121,7 +122,7 @@ type ConformanceTestSuite struct {
 	lock sync.RWMutex
 }
 
-// Options can be used to initialize a ConformanceTestSuite.
+// ConformanceOptions can be used to initialize a ConformanceTestSuite.
 type ConformanceOptions struct {
 	Client               client.Client
 	ClientOptions        client.Options
@@ -152,7 +153,8 @@ type ConformanceOptions struct {
 	SkipProvisionalTests bool
 	// RunTest is a single test to run, mostly for development/debugging convenience.
 	RunTest string
-
+	// Hook is an optional function that can be used to run custom logic after each test at suite level.
+	Hook       func(t *testing.T, test ConformanceTest, suite *ConformanceTestSuite)
 	ManifestFS []fs.FS
 
 	// UsableNetworkAddresses is an optional pool of usable addresses for
@@ -268,6 +270,7 @@ func NewConformanceTestSuite(options ConformanceOptions) (*ConformanceTestSuite,
 		mode:                        mode,
 		apiVersion:                  apiVersion,
 		apiChannel:                  apiChannel,
+		Hook:                        options.Hook,
 	}
 
 	for _, conformanceProfileName := range options.ConformanceProfiles.UnsortedList() {
@@ -470,6 +473,13 @@ func (suite *ConformanceTestSuite) Run(t *testing.T, tests []ConformanceTest) er
 		if res == testSucceeded || res == testFailed {
 			sleepForTestIsolation = true
 		}
+
+		// call the hook function if it was provided,
+		// this's useful for running custom logic after each test at suite level,
+		// such as collecting current state of the cluster for debugging.
+		if suite.Hook != nil {
+			suite.Hook(t, test, suite)
+		}
 	}
 
 	// now that the tests have completed, mark the test suite as not running
diff --git a/geps/gep-2162/index.md b/geps/gep-2162/index.md
index 38b2dbf6..a8959acc 100644
--- a/geps/gep-2162/index.md
+++ b/geps/gep-2162/index.md
@@ -123,7 +123,7 @@ Every feature should:
 
 #### Conformance test names
 
-Conformance tests file names should try to follow the `pascal-case-name.go` format.
+Conformance tests file names should try to follow the `kebab-case-name.go` format.
 For example for `HTTPRoutePortRedirect` - the test file would be `httproute-port-redirect.go`.
 
 We should treat this guidance as "best effort" because we might have test files that check the combination of several features and can't follow the same format.
diff --git a/hack/mkdocs-generate-conformance.py b/hack/mkdocs-generate-conformance.py
index f24832af..0486c530 100644
--- a/hack/mkdocs-generate-conformance.py
+++ b/hack/mkdocs-generate-conformance.py
@@ -21,10 +21,21 @@ import pandas
 from fnmatch import fnmatch
 import glob
 import os
+import re
 
 log = logging.getLogger(f'mkdocs.plugins.{__name__}')
 
 
+def process_feature_name(feature):
+    """
+    Process feature names by splitting camelCase into space-separated words
+    """
+    # Split camelCase
+    words = re.findall(r'HTTPRoute|[A-Z]+(?=[A-Z][a-z])|[A-Z][a-z]+|[A-Z\d]+', feature)
+    # Join words with spaces
+    return ' '.join(words)
+
+
 @plugins.event_priority(100)
 def on_files(files, config, **kwargs):
     log.info("generating conformance")
@@ -151,7 +162,9 @@ def generate_profiles_report(reports, route,version):
     for row in http_table.itertuples():
         if type(row._4) is list:
             for feat in row._4:
-                http_table.loc[row.Index, feat] = ':white_check_mark:'
+                # Process feature name before using it as a column
+                processed_feat = process_feature_name(feat)
+                http_table.loc[row.Index, processed_feat] = ':white_check_mark:'
     http_table = http_table.fillna(':x:')
     http_table = http_table.drop(['extended.supportedFeatures'], axis=1)
 
diff --git a/pkg/features/mesh.go b/pkg/features/mesh.go
index 711681c5..e2af0a60 100644
--- a/pkg/features/mesh.go
+++ b/pkg/features/mesh.go
@@ -50,6 +50,12 @@ const (
 	SupportMeshConsumerRoute FeatureName = "MeshConsumerRoute"
 	// This option indicates mesh support for HTTPRoute path rewrite (extended conformance)
 	SupportMeshHTTPRouteRewritePath FeatureName = "MeshHTTPRouteRewritePath"
+	// This option indicates mesh support for HTTPRoute scheme redirect (extended conformance)
+	SupportMeshHTTPRouteSchemeRedirect FeatureName = "MeshHTTPRouteSchemeRedirect"
+	// This option indicates mesh support for HTTPRoute port redirect (extended conformance)
+	SupportMeshHTTPRouteRedirectPort FeatureName = "MeshHTTPRouteRedirectPort"
+	// This option indicates mesh support for HTTPRoute path redirect (extended conformance)
+	SupportMeshHTTPRouteRedirectPath FeatureName = "MeshHTTPRouteRedirectPath"
 )
 
 var (
@@ -69,6 +75,24 @@ var (
 		Name:    SupportMeshHTTPRouteRewritePath,
 		Channel: FeatureChannelStandard,
 	}
+
+	// MeshHTTPRouteSchemeRedirect contains metadata for the MeshHTTPRouteSchemeRedirect feature.
+	MeshHTTPRouteSchemeRedirect = Feature{
+		Name:    SupportMeshHTTPRouteRewritePath,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteRedirectPort contains metadata for the MeshHTTPRouteRedirectPort feature.
+	MeshHTTPRouteRedirectPort = Feature{
+		Name:    SupportMeshHTTPRouteRedirectPort,
+		Channel: FeatureChannelStandard,
+	}
+
+	// MeshHTTPRouteRedirectPath contains metadata for the MeshHTTPRouteRedirectPath feature.
+	MeshHTTPRouteRedirectPath = Feature{
+		Name:    SupportMeshHTTPRouteRedirectPath,
+		Channel: FeatureChannelStandard,
+	}
 )
 
 // MeshExtendedFeatures includes all the supported features for the service mesh at
@@ -77,4 +101,6 @@ var MeshExtendedFeatures = sets.New(
 	MeshClusterIPMatchingFeature,
 	MeshConsumerRouteFeature,
 	MeshHTTPRouteRewritePath,
+	MeshHTTPRouteSchemeRedirect,
+	MeshHTTPRouteRedirectPath,
 )
diff --git a/site-src/guides/http-header-modifier.md b/site-src/guides/http-header-modifier.md
index a55e2b86..1118124e 100644
--- a/site-src/guides/http-header-modifier.md
+++ b/site-src/guides/http-header-modifier.md
@@ -1,7 +1,5 @@
 # HTTP Header Modifiers
 
-[HTTPRoute resources](../api-types/httproute.md) can modify the headers of HTTP requests and the HTTP responses from clients.
-There are two types of [filters](../api-types/httproute.md#filters-optional) available to meet these requirements: `RequestHeaderModifier` and `ResponseHeaderModifier`.
 [HTTPRoute resources](../api-types/httproute.md) can modify the headers of HTTP requests and the HTTP responses from clients.
 There are two types of [filters](../api-types/httproute.md#filters-optional) available to meet these requirements: `RequestHeaderModifier` and `ResponseHeaderModifier`.
 
diff --git a/site-src/implementations.md b/site-src/implementations.md
index 77fa74a7..3067f7d7 100644
--- a/site-src/implementations.md
+++ b/site-src/implementations.md
@@ -47,6 +47,7 @@ cover, and documentation to help users get started.
 
 ## Service Mesh Implementation Status <a name="meshes"></a>
 
+- [Google Cloud Service Mesh][38] (GA)
 - [Istio][9] (GA)
 - [Kuma][11] (GA)
 - [Linkerd][28] (experimental)
@@ -95,6 +96,7 @@ cover, and documentation to help users get started.
 [35]:#kong-gateway-operator
 [36]:#loxilb
 [37]:#kgateway
+[38]:#google-cloud-service-mesh
 
 
 [gamma]:/concepts/gamma/
@@ -115,21 +117,17 @@ In this section you will find specific links to blog posts, documentation and ot
 [epicsource]:https://github.com/epic-gateway
 
 ### Airlock Microgateway
-[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.2.1-Airlock%20Microgateway-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.2.1/airlock-microgateway)
+[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.3.0-Airlock%20Microgateway-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.3.0/airlock-microgateway)
 
-[Airlock Microgateway][airlock-microgateway] is a Kubernetes native WAAP (Web Application and API Protection) solution to protect microservices.
+[Airlock Microgateway][airlock-microgateway] is a Kubernetes native WAAP (Web Application and API Protection, formerly known as WAF) solution optimized for Kubernetes environments and certified for RedHat OpenShift.
 Modern application security is embedded in the development workflow and follows DevSecOps paradigms.
 Airlock Microgateway protects your applications and microservices with the tried-and-tested Airlock security features against attacks, while also providing a high degree of scalability.
 
-With [Airlock Microgateway 4.4][airlock-microgateway-gwapi-arch], Airlock Microgateway introduces a sidecarless data plane mode
-based on Gateway API to avoid the operational complexity of sidecars.
-
 #### Features
-- Kubernetes native integration with sidecar injection and Gateway API support
+- Comprehensive WAAP (formerly known as WAF) with security features like Deny Rules to protect against known attacks (OWASP Top 10), header filtering, JSON parsing, OpenAPI specification enforcement, and GraphQL schema validation
+- Identity aware proxy which makes it possible to enforce authentication using JWT authentication or OIDC
 - Reverse proxy functionality with request routing rules, TLS termination and remote IP extraction
-- Using native Envoy HTTP filters like Lua scripting, RBAC, ext_authz, JWT authentication
-- Content security filters for protecting against known attacks (OWASP Top 10)
-- API security features like JSON parsing, OpenAPI specification enforcement or GraphQL schema validation
+- Easy-to-use Grafana dashboards which provide valuable insights in allowed and blocked traffic and other metrics
 
 #### Documentation and links
 - [Product documentation][airlock-microgateway-documentation]
@@ -137,7 +135,6 @@ based on Gateway API to avoid the operational complexity of sidecars.
 - Check our [Airlock community forum][airlock-microgateway-community-support] and [support process][airlock-microgateway-premium-support] for support.
 
 [airlock-microgateway]:https://www.airlock.com/en/secure-access-hub/components/microgateway
-[airlock-microgateway-gwapi-arch]:https://docs.airlock.com/microgateway/latest/?topic=MGW-00000141
 [airlock-microgateway-documentation]:https://docs.airlock.com/microgateway/latest
 [airlock-microgateway-guide]:https://docs.airlock.com/microgateway/latest/?topic=MGW-00000142
 [airlock-microgateway-community-support]:https://forum.airlock.com/
@@ -209,13 +206,13 @@ effort, check out the #development channel or join our [weekly developer meeting
 
 ### Contour
 
-[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.1.0-Contour-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.1.0/projectcontour-contour)
+[![Conformance](https://img.shields.io/badge/Gateway%20API%20Conformance%20v1.2.1-Contour-green)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.2.1/projectcontour-contour)
 
 [Contour][contour] is a CNCF open source Envoy-based ingress controller for Kubernetes.
 
-Contour [v1.30.0][contour-release] implements Gateway API v1.1.0.
+Contour [v1.31.0][contour-release] implements Gateway API v1.2.1.
 All [Standard channel][contour-standard] v1 API group resources (GatewayClass, Gateway, HTTPRoute, ReferenceGrant), plus most v1alpha2 API group resources (TLSRoute, TCPRoute, GRPCRoute, ReferenceGrant, and BackendTLSPolicy) are supported.
-Contour's implementation passes all core and most extended Gateway API conformance tests included in the v1.1.0 release.
+Contour's implementation passes most core extended Gateway API conformance tests included in the v1.2.1 release.
 
 See the [Contour Gateway API Guide][contour-guide] for information on how to deploy and use Contour's Gateway API implementation.
 
@@ -290,6 +287,23 @@ profile except `HTTPRouteServiceTypes`.
 [gloogateway]:https://docs.solo.io/gateway/latest/
 [solo]:https://www.solo.io
 
+### Google Cloud Service Mesh
+
+
+[Google Kubernetes Engine (GKE)][gke] is a managed Kubernetes platform offered
+by Google Cloud.
+
+GKE's implementation of Gateway For Mesh (GAMMA) is through the [Cloud Service Mesh][cloud-service-mesh].
+
+
+Google Cloud Service Mesh supports [Envoy-based sidecar mesh][envoy-sidecar-mesh] and [Proxyless-GRPC][proxyless-grpc-mesh] (using GRPCRoute).
+
+
+[gke]:https://cloud.google.com/kubernetes-engine
+[cloud-service-mesh]:https://cloud.google.com/products/service-mesh
+[envoy-sidecar-mesh]:https://cloud.google.com/service-mesh/docs/gateway/set-up-envoy-mesh
+[proxyless-grpc-mesh]:https://cloud.google.com/service-mesh/docs/gateway/proxyless-grpc-mesh
+
 ### Google Kubernetes Engine
 
 [![Conformance](https://img.shields.io/badge/Gateway_API_Partial_Conformance_v1.1.0-Google_Kubernetes_Engine-orange)](https://github.com/kubernetes-sigs/gateway-api/blob/main/conformance/reports/v1.1.0/gke-gateway)
diff --git a/site-src/implementations/v1.0.md b/site-src/implementations/v1.0.md
index 901a48a1..ec3e6db2 100644
--- a/site-src/implementations/v1.0.md
+++ b/site-src/implementations/v1.0.md
@@ -42,7 +42,7 @@ Implementations only appear in this page if they pass Core conformance for the r
 
 ### HTTPRoute
 
-| Organization   | Project   | Version   | HTTPRouteRequestTimeout   | HTTPRoutePathRedirect   | HTTPRouteRequestMirror   | HTTPRoutePathRewrite   | HTTPRouteMethodMatching   | HTTPRouteRequestMultipleMirrors   | HTTPRouteBackendTimeout   | HTTPRouteResponseHeaderModification   | HTTPRoutePortRedirect   | HTTPRouteSchemeRedirect   | HTTPRouteHostRewrite   | HTTPRouteQueryParamMatching   |
-|:---------------|:----------|:----------|:--------------------------|:------------------------|:-------------------------|:-----------------------|:--------------------------|:----------------------------------|:--------------------------|:--------------------------------------|:------------------------|:--------------------------|:-----------------------|:------------------------------|
-| istio          | istio     | 1.2       | :white_check_mark:        | :white_check_mark:      | :white_check_mark:       | :white_check_mark:     | :white_check_mark:        | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:      | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            |
-| kumahq         | kuma      | 2.6.0     | :x:                       | :white_check_mark:      | :white_check_mark:       | :white_check_mark:     | :white_check_mark:        | :x:                               | :x:                       | :white_check_mark:                    | :white_check_mark:      | :white_check_mark:        | :white_check_mark:     | :white_check_mark:            |
\ No newline at end of file
+| Organization   | Project   | Version   | HTTPRoute Request Timeout   | HTTPRoute Path Redirect   | HTTPRoute Request Mirror   | HTTPRoute Path Rewrite   | HTTPRoute Method Matching   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Backend Timeout   | HTTPRoute Response Header Modification   | HTTPRoute Port Redirect   | HTTPRoute Scheme Redirect   | HTTPRoute Host Rewrite   | HTTPRoute Query Param Matching   |
+|:---------------|:----------|:----------|:----------------------------|:--------------------------|:---------------------------|:-------------------------|:----------------------------|:-------------------------------------|:----------------------------|:-----------------------------------------|:--------------------------|:----------------------------|:-------------------------|:---------------------------------|
+| istio          | istio     | 1.2       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:         | :white_check_mark:       | :white_check_mark:          | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:        | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               |
+| kumahq         | kuma      | 2.6.0     | :x:                         | :white_check_mark:        | :white_check_mark:         | :white_check_mark:       | :white_check_mark:          | :x:                                  | :x:                         | :white_check_mark:                       | :white_check_mark:        | :white_check_mark:          | :white_check_mark:       | :white_check_mark:               |
\ No newline at end of file
diff --git a/site-src/implementations/v1.1.md b/site-src/implementations/v1.1.md
index 577c5642..443ea07f 100644
--- a/site-src/implementations/v1.1.md
+++ b/site-src/implementations/v1.1.md
@@ -59,7 +59,7 @@ Implementations only appear in this page if they pass Core conformance for the r
 
 ### HTTPRoute
 
-| Organization   | Project   | Version   | Mode    | HTTPRouteBackendProtocolH2C   | HTTPRouteBackendProtocolWebSocket   | HTTPRouteBackendRequestHeaderModification   | HTTPRouteBackendTimeout   | HTTPRouteHostRewrite   | HTTPRouteMethodMatching   | HTTPRoutePathRedirect   | HTTPRoutePathRewrite   | HTTPRoutePortRedirect   | HTTPRouteQueryParamMatching   | HTTPRouteRequestMirror   | HTTPRouteRequestMultipleMirrors   | HTTPRouteRequestTimeout   | HTTPRouteResponseHeaderModification   | HTTPRouteSchemeRedirect   | MeshClusterIPMatching   | MeshConsumerRoute   | HTTPRouteParentRefPort   |
-|:---------------|:----------|:----------|:--------|:------------------------------|:------------------------------------|:--------------------------------------------|:--------------------------|:-----------------------|:--------------------------|:------------------------|:-----------------------|:------------------------|:------------------------------|:-------------------------|:----------------------------------|:--------------------------|:--------------------------------------|:--------------------------|:------------------------|:--------------------|:-------------------------|
-| cilium         | cilium    | v1.16.0   | default | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :white_check_mark:  | :x:                      |
-| istio          | istio     | 1.22      | default | :x:                           | :x:                                 | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :x:                     | :white_check_mark:  | :white_check_mark:       |
\ No newline at end of file
+| Organization   | Project   | Version   | Mode    | HTTPRoute Backend Protocol H2C   | HTTPRoute Backend Protocol Web Socket   | HTTPRoute Backend Request Header Modification   | HTTPRoute Backend Timeout   | HTTPRoute Host Rewrite   | HTTPRoute Method Matching   | HTTPRoute Path Redirect   | HTTPRoute Path Rewrite   | HTTPRoute Port Redirect   | HTTPRoute Query Param Matching   | HTTPRoute Request Mirror   | HTTPRoute Request Multiple Mirrors   | HTTPRoute Request Timeout   | HTTPRoute Response Header Modification   | HTTPRoute Scheme Redirect   | Mesh Cluster IP Matching   | Mesh Consumer Route   | HTTPRoute Parent Ref Port   |
+|:---------------|:----------|:----------|:--------|:---------------------------------|:----------------------------------------|:------------------------------------------------|:----------------------------|:-------------------------|:----------------------------|:--------------------------|:-------------------------|:--------------------------|:---------------------------------|:---------------------------|:-------------------------------------|:----------------------------|:-----------------------------------------|:----------------------------|:---------------------------|:----------------------|:----------------------------|
+| cilium         | cilium    | v1.16.0   | default | :white_check_mark:               | :white_check_mark:                      | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :white_check_mark:         | :white_check_mark:    | :x:                         |
+| istio          | istio     | 1.22      | default | :x:                              | :x:                                     | :white_check_mark:                              | :white_check_mark:          | :white_check_mark:       | :white_check_mark:          | :white_check_mark:        | :white_check_mark:       | :white_check_mark:        | :white_check_mark:               | :white_check_mark:         | :white_check_mark:                   | :white_check_mark:          | :white_check_mark:                       | :white_check_mark:          | :x:                        | :white_check_mark:    | :white_check_mark:          |
\ No newline at end of file
diff --git a/site-src/implementations/v1.2.md b/site-src/implementations/v1.2.md
index 5f7b35a3..21bb9806 100644
--- a/site-src/implementations/v1.2.md
+++ b/site-src/implementations/v1.2.md
@@ -55,4 +55,4 @@ Implementations only appear in this page if they pass Core conformance for the r
 | Organization   | Project   | Version       | Mode    | HTTPRouteBackendProtocolH2C   | HTTPRouteBackendProtocolWebSocket   | HTTPRouteBackendRequestHeaderModification   | HTTPRouteBackendTimeout   | HTTPRouteDestinationPortMatching   | HTTPRouteHostRewrite   | HTTPRouteMethodMatching   | HTTPRoutePathRedirect   | HTTPRoutePathRewrite   | HTTPRoutePortRedirect   | HTTPRouteQueryParamMatching   | HTTPRouteRequestMirror   | HTTPRouteRequestMultipleMirrors   | HTTPRouteRequestTimeout   | HTTPRouteResponseHeaderModification   | HTTPRouteSchemeRedirect   | MeshClusterIPMatching   | HTTPRouteParentRefPort   | MeshConsumerRoute   |
 |:---------------|:----------|:--------------|:--------|:------------------------------|:------------------------------------|:--------------------------------------------|:--------------------------|:-----------------------------------|:-----------------------|:--------------------------|:------------------------|:-----------------------|:------------------------|:------------------------------|:-------------------------|:----------------------------------|:--------------------------|:--------------------------------------|:--------------------------|:------------------------|:-------------------------|:--------------------|
 | cilium         | cilium    | v1.17.0-pre.1 | default | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :white_check_mark:      | :x:                      | :x:                 |
-| istio          | istio     | 1.24          | default | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :x:                     | :white_check_mark:       | :white_check_mark:  |
\ No newline at end of file
+| istio          | istio     | 1.24          | default | :white_check_mark:            | :white_check_mark:                  | :white_check_mark:                          | :white_check_mark:        | :white_check_mark:                 | :white_check_mark:     | :white_check_mark:        | :white_check_mark:      | :white_check_mark:     | :white_check_mark:      | :white_check_mark:            | :white_check_mark:       | :white_check_mark:                | :white_check_mark:        | :white_check_mark:                    | :white_check_mark:        | :x:                     | :white_check_mark:       | :white_check_mark:  |



Test patch:
diff --git a/conformance/tests/mesh/httproute-redirect-host-and-status.go b/conformance/tests/mesh/httproute-redirect-host-and-status.go
new file mode 100644
index 00000000..055b70a2
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-host-and-status.go
@@ -0,0 +1,84 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteRedirectHostAndStatus)
+}
+
+var MeshHTTPRouteRedirectHostAndStatus = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRedirectHostAndStatus",
+	Description: "An HTTPRoute with hostname and statusCode redirect filters",
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+	},
+	Manifests: []string{"tests/mesh/httproute-redirect-host-and-status.yaml"},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/hostname-redirect",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/host-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-host-and-status.yaml b/conformance/tests/mesh/httproute-redirect-host-and-status.yaml
new file mode 100644
index 00000000..8bb27798
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-host-and-status.yaml
@@ -0,0 +1,30 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-host-and-status
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /hostname-redirect
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /host-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        statusCode: 301
+        hostname: example.org
+
diff --git a/conformance/tests/mesh/httproute-redirect-path.go b/conformance/tests/mesh/httproute-redirect-path.go
new file mode 100644
index 00000000..bc4731e7
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-path.go
@@ -0,0 +1,139 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteRedirectPath)
+}
+
+var MeshHTTPRouteRedirectPath = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRedirectPath",
+	Description: "An HTTPRoute with scheme redirect filter",
+	Manifests:   []string{"tests/mesh/httproute-redirect-path.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteRedirectPath,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/original-prefix/lemon",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/replacement-prefix/lemon",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/full/path/original",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/full-path-replacement",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/path-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+					Path: "/replacement-prefix",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/path-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/replacement-prefix",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/full-path-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+					Path: "/replacement-full",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/full-path-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Path: "/replacement-full",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-path.yaml b/conformance/tests/mesh/httproute-redirect-path.yaml
new file mode 100644
index 00000000..05975f32
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-path.yaml
@@ -0,0 +1,76 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-path
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /original-prefix
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /replacement-prefix
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /full-path-replacement
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /path-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /replacement-prefix
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /path-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplacePrefixMatch
+          replacePrefixMatch: /replacement-prefix
+        statusCode: 301
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full-path-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /replacement-full
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /full-path-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        path:
+          type: ReplaceFullPath
+          replaceFullPath: /replacement-full
+        statusCode: 301
diff --git a/conformance/tests/mesh/httproute-redirect-port.go b/conformance/tests/mesh/httproute-redirect-port.go
new file mode 100644
index 00000000..cae14c23
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-port.go
@@ -0,0 +1,113 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteRedirectPort)
+}
+
+var MeshHTTPRouteRedirectPort = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteRedirectPort",
+	Description: "An HTTPRoute with a port redirect filter",
+	Manifests:   []string{"tests/mesh/httproute-redirect-port.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteRedirectPort,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Port: "8083",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host: "example.org",
+					Port: "8083",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Port: "8083",
+				},
+				Namespace: ns,
+			}, {
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/port-and-host-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Port: "8083",
+					Host: "example.org",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-port.yaml b/conformance/tests/mesh/httproute-redirect-port.yaml
new file mode 100644
index 00000000..522d6732
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-port.yaml
@@ -0,0 +1,48 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-port
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        port: 8083
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        port: 8083
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        port: 8083
+        statusCode: 301
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /port-and-host-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        port: 8083
+        hostname: example.org
+        statusCode: 302
diff --git a/conformance/tests/mesh/httproute-redirect-scheme.go b/conformance/tests/mesh/httproute-redirect-scheme.go
new file mode 100644
index 00000000..e2417309
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-scheme.go
@@ -0,0 +1,116 @@
+/*
+Copyright 2025 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package meshtests
+
+import (
+	"testing"
+
+	"sigs.k8s.io/gateway-api/conformance/utils/echo"
+	"sigs.k8s.io/gateway-api/conformance/utils/http"
+	"sigs.k8s.io/gateway-api/conformance/utils/roundtripper"
+	"sigs.k8s.io/gateway-api/conformance/utils/suite"
+	"sigs.k8s.io/gateway-api/pkg/features"
+)
+
+func init() {
+	MeshConformanceTests = append(MeshConformanceTests, MeshHTTPRouteSchemeRedirect)
+}
+
+var MeshHTTPRouteSchemeRedirect = suite.ConformanceTest{
+	ShortName:   "MeshHTTPRouteSchemeRedirect",
+	Description: "An HTTPRoute with a scheme redirect filter",
+	Manifests:   []string{"tests/mesh/httproute-redirect-scheme.yaml"},
+	Features: []features.FeatureName{
+		features.SupportMesh,
+		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteSchemeRedirect,
+	},
+	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {
+		ns := "gateway-conformance-mesh"
+		client := echo.ConnectToApp(t, s, echo.MeshAppEchoV1)
+
+		testCases := []http.ExpectedResponse{
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Scheme: "https",
+				},
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme-and-host",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Host:   "example.org",
+					Scheme: "https",
+				},
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 301,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Scheme: "https",
+				},
+				Namespace: ns,
+			},
+			{
+				Request: http.Request{
+					Host:             "echo",
+					Path:             "/scheme-and-host-and-status",
+					UnfollowRedirect: true,
+				},
+				Response: http.Response{
+					StatusCode: 302,
+				},
+				RedirectRequest: &roundtripper.RedirectRequest{
+					Scheme: "https",
+					Host:   "example.org",
+				},
+				Namespace: ns,
+			},
+		}
+		for i := range testCases {
+			// Declare tc here to avoid loop variable
+			// reuse issues across parallel tests.
+			tc := testCases[i]
+			t.Run(tc.GetTestCaseName(i), func(t *testing.T) {
+				t.Parallel()
+				client.MakeRequestAndExpectEventuallyConsistentResponse(t, tc, s.TimeoutConfig)
+			})
+		}
+	},
+}
diff --git a/conformance/tests/mesh/httproute-redirect-scheme.yaml b/conformance/tests/mesh/httproute-redirect-scheme.yaml
new file mode 100644
index 00000000..b5f4628c
--- /dev/null
+++ b/conformance/tests/mesh/httproute-redirect-scheme.yaml
@@ -0,0 +1,49 @@
+apiVersion: gateway.networking.k8s.io/v1
+kind: HTTPRoute
+metadata:
+  name: mesh-redirect-scheme
+  namespace: gateway-conformance-mesh
+spec:
+  parentRefs:
+  - group: ""
+    kind: Service
+    name: echo
+    port: 80
+  rules:
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        scheme: "https"
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme-and-host
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        hostname: example.org
+        scheme: "https"
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        scheme: "https"
+        statusCode: 301
+  - matches:
+    - path:
+        type: PathPrefix
+        value: /scheme-and-host-and-status
+    filters:
+    - type: RequestRedirect
+      requestRedirect:
+        scheme: "https"
+        statusCode: 302
+        hostname: example.org
+
diff --git a/conformance/tests/mesh/httproute-rewrite-path.go b/conformance/tests/mesh/httproute-rewrite-path.go
index 79416a96..22f8ae66 100644
--- a/conformance/tests/mesh/httproute-rewrite-path.go
+++ b/conformance/tests/mesh/httproute-rewrite-path.go
@@ -34,8 +34,8 @@ var MeshHTTPRouteRewritePath = suite.ConformanceTest{
 	Description: "An HTTPRoute with path rewrite filter",
 	Features: []features.FeatureName{
 		features.SupportMesh,
-		features.SupportMeshHTTPRouteRewritePath,
 		features.SupportHTTPRoute,
+		features.SupportMeshHTTPRouteRewritePath,
 	},
 	Manifests: []string{"tests/mesh/httproute-rewrite-path.yaml"},
 	Test: func(t *testing.T, s *suite.ConformanceTestSuite) {