From 1abe791d46d3a079dd63cbaa0940ac6184ca9686 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 11 Jun 2020 19:24:20 -0500 Subject: [PATCH] Revert "feat(platform-server): use absolute URLs from Location for HTTP (#37071)" (#37547) This reverts commit 9edea0bb75c27359bffa6a3062a5a46fc5a2cfcb. PR Close #37547 --- packages/platform-server/src/http.ts | 33 ++++--------- .../platform-server/test/integration_spec.ts | 48 ------------------- 2 files changed, 8 insertions(+), 73 deletions(-) diff --git a/packages/platform-server/src/http.ts b/packages/platform-server/src/http.ts index 682da84fa0..9cf9b34a89 100644 --- a/packages/platform-server/src/http.ts +++ b/packages/platform-server/src/http.ts @@ -10,13 +10,10 @@ const xhr2: any = require('xhr2'); import {Injectable, Injector, Provider} from '@angular/core'; -import {DOCUMENT} from '@angular/common'; -import {HttpEvent, HttpRequest, HttpHandler, HttpBackend, XhrFactory, ɵHttpInterceptingHandler as HttpInterceptingHandler} from '@angular/common/http'; -import {Observable, Observer, Subscription} from 'rxjs'; -// @see https://www.w3.org/Protocols/HTTP/1.1/draft-ietf-http-v11-spec-01#URI-syntax -const isAbsoluteUrl = /^[a-zA-Z\-\+.]+:\/\//; -const FORWARD_SLASH = '/'; +import {HttpEvent, HttpRequest, HttpHandler, HttpBackend, XhrFactory, ɵHttpInterceptingHandler as HttpInterceptingHandler} from '@angular/common/http'; + +import {Observable, Observer, Subscription} from 'rxjs'; @Injectable() export class ServerXhr implements XhrFactory { @@ -105,21 +102,11 @@ export abstract class ZoneMacroTaskWrapper { export class ZoneClientBackend extends ZoneMacroTaskWrapper, HttpEvent> implements HttpBackend { - constructor(private backend: HttpBackend, private doc: Document) { + constructor(private backend: HttpBackend) { super(); } handle(request: HttpRequest): Observable> { - const href = this.doc.location.href; - if (!isAbsoluteUrl.test(request.url) && href) { - const urlParts = Array.from(request.url); - if (request.url[0] === FORWARD_SLASH && href[href.length - 1] === FORWARD_SLASH) { - urlParts.shift(); - } else if (request.url[0] !== FORWARD_SLASH && href[href.length - 1] !== FORWARD_SLASH) { - urlParts.splice(0, 0, FORWARD_SLASH); - } - return this.wrap(request.clone({url: href + urlParts.join('')})); - } return this.wrap(request); } @@ -128,16 +115,12 @@ export class ZoneClientBackend extends } } -export function zoneWrappedInterceptingHandler( - backend: HttpBackend, injector: Injector, doc: Document) { +export function zoneWrappedInterceptingHandler(backend: HttpBackend, injector: Injector) { const realBackend: HttpBackend = new HttpInterceptingHandler(backend, injector); - return new ZoneClientBackend(realBackend, doc); + return new ZoneClientBackend(realBackend); } export const SERVER_HTTP_PROVIDERS: Provider[] = [ - {provide: XhrFactory, useClass: ServerXhr}, { - provide: HttpHandler, - useFactory: zoneWrappedInterceptingHandler, - deps: [HttpBackend, Injector, DOCUMENT] - } + {provide: XhrFactory, useClass: ServerXhr}, + {provide: HttpHandler, useFactory: zoneWrappedInterceptingHandler, deps: [HttpBackend, Injector]} ]; diff --git a/packages/platform-server/test/integration_spec.ts b/packages/platform-server/test/integration_spec.ts index d0fbfa0f3c..f1b49ef60a 100644 --- a/packages/platform-server/test/integration_spec.ts +++ b/packages/platform-server/test/integration_spec.ts @@ -793,54 +793,6 @@ describe('platform-server integration', () => { }); })); - it('can make relative HttpClient requests', async () => { - const platform = platformDynamicServer([ - {provide: INITIAL_CONFIG, useValue: {document: '', url: 'http://localhost'}} - ]); - const ref = await platform.bootstrapModule(HttpClientExampleModule); - const mock = ref.injector.get(HttpTestingController) as HttpTestingController; - const http = ref.injector.get(HttpClient); - ref.injector.get(NgZone).run(() => { - http.get('/testing').subscribe((body: string) => { - NgZone.assertInAngularZone(); - expect(body).toEqual('success!'); - }); - mock.expectOne('http://localhost/testing').flush('success!'); - }); - }); - - it('can make relative HttpClient requests two slashes', async () => { - const platform = platformDynamicServer([ - {provide: INITIAL_CONFIG, useValue: {document: '', url: 'http://localhost/'}} - ]); - const ref = await platform.bootstrapModule(HttpClientExampleModule); - const mock = ref.injector.get(HttpTestingController) as HttpTestingController; - const http = ref.injector.get(HttpClient); - ref.injector.get(NgZone).run(() => { - http.get('/testing').subscribe((body: string) => { - NgZone.assertInAngularZone(); - expect(body).toEqual('success!'); - }); - mock.expectOne('http://localhost/testing').flush('success!'); - }); - }); - - it('can make relative HttpClient requests no slashes', async () => { - const platform = platformDynamicServer([ - {provide: INITIAL_CONFIG, useValue: {document: '', url: 'http://localhost'}} - ]); - const ref = await platform.bootstrapModule(HttpClientExampleModule); - const mock = ref.injector.get(HttpTestingController) as HttpTestingController; - const http = ref.injector.get(HttpClient); - ref.injector.get(NgZone).run(() => { - http.get('testing').subscribe((body: string) => { - NgZone.assertInAngularZone(); - expect(body).toEqual('success!'); - }); - mock.expectOne('http://localhost/testing').flush('success!'); - }); - }); - it('requests are macrotasks', async(() => { const platform = platformDynamicServer( [{provide: INITIAL_CONFIG, useValue: {document: ''}}]);