Почему javascript игнорирует порт строки URL при создании объекта url? - PullRequest
2 голосов
/ 23 октября 2019

Я хочу прочитать порт строки url, которая у меня есть. Я обнаружил, что вы можете создать новый URL-объект с urlstring в качестве аргумента. Затем вы можете вызвать свойство порта этого объекта, чтобы получить порт urlstring.

. Порт моего url равен 443. Если я передам строку с 443 в качестве порта в объект URL, свойство порта url-object будет "". Если я выберу другие номера в качестве порта, он будет работать нормально.

Кто-нибудь знает, почему это происходит?

Вот фрагмент кода:

const URL_STRING1 = "https://example.com:443/";

let url1 = new URL(URL_STRING1);
console.log(url1.port);

const URL_STRING2 = "https://example.com:442/";

let url2 = new URL(URL_STRING2);
console.log(url2.port);

const URL_STRING3 = "https://example.com:444/";

let url3 = new URL(URL_STRING3);
console.log(url3.port);

Ответы [ 2 ]

1 голос
/ 23 октября 2019

443 порт по умолчанию для https

URL reference for full specs

....
--->   Set url’s port to null, if port is url’s scheme’s default port, and to port otherwise.
                                                ^^^^^^^^^^^^^^^^^^^^^
....

Default scheme reference for full specs

A special scheme is a scheme listed in the first column of the following table. A default port is a special scheme’s optional corresponding port and is listed in the second column on the same row.

scheme  port
"ftp"   21
"file"  
"http"  80
"https"     443
"ws"    80
"wss"   443 
0 голосов
/ 23 октября 2019

Этот объект является экспериментальным, поэтому вы можете использовать его. Используйте простое регулярное выражение для извлечения порта -

const URL_STRING1 = "https://example.com:443/";
console.log(URL_STRING1.match(/https:\/\/example\.com:(?<=:)(\d{3})/));
...