[Bug]: [MCP/CLI] Bare loopback IP addresses (127.0.0.1:port) and hosts with ports fail to navigate due to erroneous scheme inference
I maintainer di solito rispondono entro 1 giorno
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- cli
Direzione di ricerca
L'inferenza dello schema si trova in checkUrlAndNavigate, in packages/playwright-core/src/tools/backend/tab.ts. Inizia leggendo questa funzione, poi verifica come il ramo catch decide tra http:// e https://, e tieni presente che new URL('example.com:8080') non genera un'eccezione. Il lavoro è completo quando 127.0.0.1:3000, 0.0.0.0:8000 e [::1]:8080 usano http:// come predefinito, example.com:8080 usa https:// come predefinito e uno schema esplicito già presente viene lasciato invariato. Cerca i test esistenti sulla navigazione tra le schede per confermare il comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
What's going on?
In Playwright CLI and MCP server (playwright open, tab-new, browser_navigate), when opening or navigating to URLs specified without an explicit scheme:
-
Bare loopback IP addresses fail with
net::ERR_SSL_PROTOCOL_ERROR:
When targeting local development servers on loopback IPs (e.g.,127.0.0.1:3000,0.0.0.0:8000,[::1]:8080), navigation fails immediately:page.goto: net::ERR_SSL_PROTOCOL_ERROR at https://127.0.0.1:3000/This happens because
checkUrlAndNavigateonly checksurl.startsWith('localhost')before defaulting tohttps://. As local development servers predominantly run on plain HTTP, forcinghttps://causes SSL protocol failure. -
Bare hostnames with ports fail with
net::ERR_ABORTED:
When specifying a bare host with a port (e.g.,example.com:8080), navigation fails:page.goto: net::ERR_ABORTED at example.com:8080According to the WHATWG URL standard,
new URL('example.com:8080')parses successfully withprotocol: "example.com:"andpathname: "8080". Becausenew URL(...)does not throw an error, thetry / catchblock incheckUrlAndNavigateis bypassed entirely, leaving the raw string without anhttp://orhttps://scheme.
Visual Evidence
1. Reproduction — SSL Protocol Error on Loopback IP & Aborted Custom Scheme:

2. Fixed Behavior — Loopback IPs and Ported Hosts Normalized Properly:

Why does this happen?
In packages/playwright-core/src/tools/backend/tab.ts:
async checkUrlAndNavigate(url: string): Promise<string> {
try {
new URL(url);
} catch (e) {
if (url.startsWith('localhost'))
url = 'http://' + url;
else
url = 'https://' + url;
}
this.context.checkUrlAllowed(url);
await this.navigate(url);
return url;
}
- WHATWG
new URL()does not throw onhost:portbecausehost:is treated as a valid scheme name ifhostbegins with an ASCII alpha character ([a-zA-Z]). - Loopback IPs begin with numbers (
127.0.0.1) sonew URL()throws, but the catch branch only checkslocalhost, falling through tohttps://for all IPv4/IPv6 loopback addresses.
Expected behavior
- URLs without an explicit scheme (
^[a-zA-Z][a-zA-Z0-9+.-]*:\/\/or^(about|data|blob|javascript):) should be normalized. - Local loopback addresses (
localhost,127.0.0.1,0.0.0.0,[::1]) should default tohttp://. - Other bare hosts (e.g.
example.com:8080,playwright.dev) should default tohttps://.
- Lingua principale
- TypeScript
- Stelle
- 98k
- Fork
- 6.6k
- Merge medio
- 16h 1m
- PR unite (30g)
- 309
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Nessun modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/playwright
-
[Feature]: Set `this.name` in `TargetClosedError` constructorForse di nuovo libera @LeonxLJX l’ha presa 47 giorni fa e non c’è nessuna pull request aperta. ApertaP3-collecting-feedback
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
microsoft/playwright#42522 · 7 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
microsoft/playwright#43564 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
microsoft/playwright#43563 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: `request.response()` never resolves for a service worker's own script when many contexts register service workers at onceForse già presa @pavelfeldman l’ha presa oggi. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
microsoft/playwright#43562 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]:Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 25/100
microsoft/playwright#43559 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di microsoft/playwright
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 72/100
zts212653/clowder-ai#1678 ·
I maintainer di solito rispondono entro 1 giorno
-
good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
Progressive-Victory/the-website#680 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100