Skip to content

New web dev proxy does not proxy query string #178152

@woprandi

Description

@woprandi

Steps to reproduce

  1. Open/create flutter web project
  2. Setup dart proxy listening on port 8080 with the web_dev_config.yaml in the root of project with content :
server:
  port: 8080
  proxy:
    - target: "http://localhost:5000"
      regex: "^/login"
  1. Run a upstream http server (listening port 5000 here) : $ python -m http.server 5000
  2. Run the flutter project with flutter run -d web-server
  3. Request the proxy with a matching regex and query string $ curl http://localhost:8080/login?foo=bar or use code sample below and click to the middle button
  4. Check logs of the upstream webserver
    Reproduced with channel master + beta

Expected results

Upstream server get request with query string. e.g :

127.0.0.1 - - [07/Nov/2025 10:29:07] "GET /login?foo=bar HTTP/1.1" 404 -

Actual results

Upstream server does not receive query string

127.0.0.1 - - [07/Nov/2025 10:31:04] "GET /login HTTP/1.1" 404 -

Code sample

Code sample
import 'package:http/http.dart' as http;


void main() {
  runApp(Bug());
}

class Bug extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: TextButton(
            onPressed: () async {
              final response = await http.get(Uri.parse("/login?foo=bar"));
            },
            child: Text("Request"),
          ),
        ),
      ),
    );
  }
}

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
flutter run -d web-server --verbose
[  +15 ms] executing: uname -m
[   +3 ms] Exit code 0 from: uname -m
[        ] x86_64
[   +8 ms] Artifact Instance of 'MaterialFonts' is not required, skipping update.
[        ] Artifact Instance of 'GradleWrapper' is not required, skipping update.
[        ] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[        ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update.
[        ] Artifact Instance of 'FlutterSdk' is not required, skipping update.
[        ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IosUsbArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FontSubsetArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'PubDependencies' is not required, skipping update.
[        ] executing: [/var/home/william.oprandi/Documents/flutter/] git -c log.showSignature=false log
HEAD -n 1 --pretty=format:%ad --date=iso
[   +5 ms] Exit code 0 from: git -c log.showSignature=false log HEAD -n 1 --pretty=format:%ad --date=iso
[        ] 2025-11-07 02:39:25 -0500
[  +16 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterWebSdk' is not required, skipping update.
[        ] Artifact Instance of 'FlutterEngineStamp' is not required, skipping update.
[        ] Artifact Instance of 'LegacyCanvasKitRemover' is not required, skipping update.
[        ] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[  +22 ms] Artifact Instance of 'AndroidGenSnapshotArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'AndroidInternalBuildArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'IOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterEngineStamp' is not required, skipping update.
[   +1 ms] Artifact Instance of 'WindowsEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxEngineArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'LinuxFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'MacOSFuchsiaSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerSDKArtifacts' is not required, skipping update.
[        ] Artifact Instance of 'FlutterRunnerDebugSymbols' is not required, skipping update.
[  +20 ms] [WebDevServer] Loaded configuration from web_dev_config.yaml
[        ] WebDevServerConfig:
             headers: {}
             host: any
             port: 8080
             https: null
             proxy: [{regex: ^/login, target: http://localhost:5000/, replace: null}]
[   +6 ms] Skipping pub get: version match.
[  +96 ms] Skipping generating web_plugin_registrant.dart because it is up-to-date.
[  +33 ms] Skipping generating generated_plugin_registrant.h because it is up-to-date.
[   +1 ms] Skipping generating generated_plugin_registrant.cc because it is up-to-date.
[        ] Skipping generating generated_plugins.cmake because it is up-to-date.
[  +36 ms] Launching lib/main.dart on Web Server in debug mode...
[  +41 ms] Initializing file store
[        ] Done initializing file store
[   +5 ms] Skipping target: gen_localizations
[        ] Skipping target: gen_dart_plugin_registrant
[        ] Skipping target: _composite
[   +1 ms] complete
[        ] Updating assets
[        ] runHooks() with {TargetFile:
/var/home/william.oprandi/Documents/Repos/flutter_playground/lib/main.dart, BuildMode: debug} and
TargetPlatform.web_javascript
[        ] runHooks() - will perform dart build
[        ] Initializing file store
[        ] Done initializing file store
[   +5 ms] Skipping target: dart_build
[        ] Persisting file store
[   +1 ms] Done persisting file store
[   +3 ms] runHooks() - done
[  +51 ms] Waiting for connection from debug service on Web Server...
[  +48 ms] shaderc command:
[/var/home/william.oprandi/Documents/flutter/bin/cache/artifacts/engine/linux-x64/impellerc, --sksl,
--iplr, --json, --sl=build/flutter_assets/shaders/ink_sparkle.frag,
--spirv=build/flutter_assets/shaders/ink_sparkle.frag.spirv,
--input=/var/home/william.oprandi/Documents/flutter/packages/flutter/lib/src/material/shaders/ink_sparkle.
frag, --input-type=frag,
--include=/var/home/william.oprandi/Documents/flutter/packages/flutter/lib/src/material/shaders,
--include=/var/home/william.oprandi/Documents/flutter/bin/cache/artifacts/engine/linux-x64/shader_lib]
[   +1 ms] shaderc command:
[/var/home/william.oprandi/Documents/flutter/bin/cache/artifacts/engine/linux-x64/impellerc, --sksl,
--iplr, --json, --sl=build/flutter_assets/shaders/stretch_effect.frag,
--spirv=build/flutter_assets/shaders/stretch_effect.frag.spirv,
--input=/var/home/william.oprandi/Documents/flutter/packages/flutter/lib/src/material/shaders/stretch_effe
ct.frag, --input-type=frag,
--include=/var/home/william.oprandi/Documents/flutter/packages/flutter/lib/src/material/shaders,
--include=/var/home/william.oprandi/Documents/flutter/bin/cache/artifacts/engine/linux-x64/shader_lib]
[ +162 ms] <- reset
[   +3 ms] /var/home/william.oprandi/Documents/flutter/bin/cache/dart-sdk/bin/dartaotruntime
/var/home/william.oprandi/Documents/flutter/bin/cache/dart-sdk/bin/snapshots/frontend_server_aot.dart.snap
shot --sdk-root /var/home/william.oprandi/Documents/flutter/bin/cache/flutter_web_sdk/ --incremental
--target=dartdevc --experimental-emit-debug-metadata -DFLUTTER_VERSION=3.38.0-1.0.pre-462
-DFLUTTER_CHANNEL=master -DFLUTTER_GIT_URL=https://github.com/flutter/flutter.git
-DFLUTTER_FRAMEWORK_REVISION=b296302559 -DFLUTTER_ENGINE_REVISION=b296302559 -DFLUTTER_DART_VERSION=3.11.0
(build 3.11.0-93.1.beta) --output-dill /tmp/flutter_tools.JLWBIW/flutter_tool.DMNZFA/app.dill --packages
/var/home/william.oprandi/Documents/Repos/flutter_playground/.dart_tool/package_config.json
-Ddart.vm.profile=false -Ddart.vm.product=false --enable-asserts --track-widget-creation --filesystem-root
/tmp/flutter_tools.JLWBIW/flutter_tools.PKZZGX --filesystem-scheme org-dartlang-app --initialize-from-dill
build/4974e2c2d1cef0e5845fc077eec1d14d.cache.dill.track.dill --platform
file:///var/home/william.oprandi/Documents/flutter/bin/cache/flutter_web_sdk/kernel/ddc_outline.dill
--verbosity=error --dartdevc-canary --dartdevc-module-format=ddc
[  +10 ms] <- compile org-dartlang-app:/web_entrypoint.dart
[+11341 ms] Waiting for connection from debug service on Web Server... (completed in 11,6s)
[        ] Synced 87.7MB.
[        ] <- accept
[        ] Caching compiled dill
[  +55 ms] lib/main.dart is being served at http://localhost:8080
[        ] The web-server device requires the Dart Debug Chrome extension for debugging. Consider using
the Chrome or
           Edge devices for an improved development workflow.
[   +2 ms] Flutter run key commands.
[   +3 ms] r Hot reload. 🔥🔥🔥
[   +1 ms] R Hot restart.
[        ] h List all available interactive commands.
[        ] d Detach (terminate "flutter run" but leave application running).
[        ] c Clear the screen
[        ] q Quit (terminate the application on the device).
[+3350 ms] [proxyMiddleware] Matched "/login". Requesting "http://localhost:5000/login"
[        ] [proxyMiddleware] Matched with proxy rule: {regex: ^/login, target: http://localhost:5000/,
replace: null}
[        ] [proxyMiddleware] "http://localhost:5000/login" responded with status 404

Flutter Doctor output

Doctor output
✓] Flutter (Channel master, 3.38.0-1.0.pre-462, on Fedora Linux 43.20251106.0 (Silverblue)
    6.17.7-300.fc43.x86_64, locale fr_FR.UTF-8) [560ms]
    • Flutter version 3.38.0-1.0.pre-462 on channel master at /var/home/william.oprandi/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision b296302559 (il y a 2 heures), 2025-11-07 02:39:25 -0500
    • Engine revision b296302559
    • Dart version 3.11.0 (build 3.11.0-93.1.beta)
    • DevTools version 2.52.0
    • Feature flags: enable-web, enable-linux-desktop, enable-macos-desktop, enable-windows-desktop,
      enable-android, enable-ios, cli-animations, enable-native-assets, omit-legacy-version-file,
      enable-lldb-debugging

[!] Android toolchain - develop for Android devices (Android SDK version 35.0.0) [1 661ms]
    • Android SDK at /var/home/william.oprandi/Android/Sdk
    • Emulator version 36.2.12.0 (build_id 14214601) (CL:N/A)
    • Platform android-36, build-tools 35.0.0
    • Java binary at: /home/william.oprandi/.jdks/temurin-17.0.13/bin/java
      This JDK is specified in your Flutter configuration.
      To change the current JDK, run: `flutter config --jdk-dir="path/to/jdk"`.
    • Java version OpenJDK Runtime Environment Temurin-17.0.13+11 (build 17.0.13+11)
    ! Some Android licenses not accepted. To resolve this, run: flutter doctor --android-licenses

[✓] Chrome - develop for the web [8ms]
    • Chrome at google-chrome

[✗] Linux toolchain - develop for Linux desktop [78ms]
    ✗ clang++ is required for Linux development.
      It is likely available from your distribution (e.g.: apt install clang), or can be downloaded from
      https://releases.llvm.org/
    ✗ CMake is required for Linux development.
      It is likely available from your distribution (e.g.: apt install cmake), or can be downloaded from
      https://cmake.org/download/
    ✗ ninja is required for Linux development.
      It is likely available from your distribution (e.g.: apt install ninja-build), or can be downloaded
      from https://github.com/ninja-build/ninja/releases
    • pkg-config version 2.3.0
    ✗ GTK 3.0 development libraries are required for Linux development.
      They are likely available from your distribution (e.g.: apt install libgtk-3-dev)
    ! Unable to access driver information using 'eglinfo'.
      It is likely available from your distribution (e.g.: apt install mesa-utils)

[✓] Connected device (2 available) [89ms]
    • Linux (desktop) • linux  • linux-x64      • Fedora Linux 43.20251106.0 (Silverblue)
      6.17.7-300.fc43.x86_64
    • Chrome (web)    • chrome • web-javascript • Google Chrome 142.0.7444.134

[✓] Network resources [228ms]
    • All expected network resources are available.

! Doctor found issues in 2 categories.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work listfound in release: 3.38Found to occur in 3.38fyi-toolFor the attention of Flutter Tool teamgood first issueRelatively approachable for first-time contributorshas reproducible stepsThe issue has been confirmed reproducible and is ready to work onplatform-webWeb applications specificallyr: fixedIssue is closed as already fixed in a newer versionteam-webOwned by Web platform teamtoolAffects the "flutter" command-line tool. See also t: labels.triaged-webTriaged by Web platform team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions