You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 5-network/07-url/article.md
+23-23
Original file line number
Diff line number
Diff line change
@@ -1,28 +1,28 @@
1
1
2
-
# URL об'єкт
2
+
# URL об’єкти
3
3
4
4
Вбудований клас [URL](https://url.spec.whatwg.org/#api) надає зручний інтерфейс для створення та розбирання URL на частини.
5
5
6
-
Методи, що дають змогу зробити мережевий запит, досить передати просто рядок, вони не вимагають саме екземпляр класу `URL`. Тому нас нічого не зобов'язує використовувати клас `URL`. Але це дійсно може стати в нагоді.
6
+
Зазвичай, щоб зробити мережевий запит, достатньо передати лише рядок з адресою, передавати саме екземпляр класу `URL` не має жодної потреби. Тому нас ніхто не зобов’язує використовувати клас `URL`. Але іноді це може стати в нагоді.
7
7
8
8
## Створення URL
9
9
10
-
Синтаксис для створення `URL` об'єктів наступний:
10
+
Синтаксис для створення `URL` об’єктів:
11
11
12
12
```js
13
13
newURL(url, [base])
14
14
```
15
15
16
16
-**`url`** -- повний URL чи, якщо задано другий параметр, тільки шлях (дивись далі),
17
-
-**`base`** -- необов'язковий параметр з "основою" відносно якої буде побудовано URL, якщо в першому параметрі передано тільки шлях.
17
+
-**`base`** -- необов’язковий параметр з "основою" відносно якої буде побудовано URL, якщо в першому параметрі передано тільки шлях.
18
18
19
19
Наприклад:
20
20
21
21
```js
22
22
let url =newURL('https://javascript.info/profile/admin');
23
23
```
24
24
25
-
В обох випадках буде згенеровано однакові URLи:
25
+
В обох випадках буде згенеровано однакові URL:
26
26
27
27
```js run
28
28
let url1 =newURL('https://javascript.info/profile/admin');
@@ -41,7 +41,7 @@ let newUrl = new URL('tester', url);
-`href` повна URL-адреса, те ж саме, що `url.toString()`
59
59
-`protocol` протокол, закінчується символом двокрапки `:`
60
-
-`search` - рядок з параметрами, починається символом знаку запитання `?`
60
+
-`search` -- рядок з параметрами, починається символом знаку запитання `?`
61
61
-`hash` починається символом решітки`#`
62
62
- також можуть бути присутні властивості `user` та `password`, якщо використовується формат для HTTP аутентифікації: `http://login:[email protected]` (не згадано вище, бо рідко використовується).
63
63
64
64
65
-
```smart header="`URL` об'єкт можна передати у методи, що використовуються для мережевих запитів замість рядку"
66
-
`fetch` чи `XMLHttpRequest` можуть отримувати`URL` об'єкти майже всюди, де можна передати рядок з URL.
65
+
```smart header="`URL` об’єкт можна передати у методи, що використовуються для мережевих запитів замість рядку"
66
+
`fetch` чи `XMLHttpRequest` можуть використовувати`URL` об’єкти майже всюди, де можна передати рядок з `URL`.
67
67
68
-
Зазвичай, `URL` об'єкт можна передати в будь-який метод замість рядку, оскільки більшість методів перетворять об'єкт в рядок, що містить повну URL-адресу.
68
+
Зазвичай, `URL` об’єкт можна передати в будь-який метод замість рядку, оскільки більшість методів перетворять об’єкт в рядок, що містить повну URL-адресу.
69
69
```
70
70
71
71
## Параметри пошуку "?..."
@@ -80,18 +80,18 @@ new URL('https://google.com/search?query=JavaScript')
80
80
81
81
...Але параметри повинні бути закодованими, якщо вони містять пробіли, не латинські символи тощо (більше про це нижче).
82
82
83
-
Отже, для цього `URL` має властивість: `url.searchParams`, об'єкт типу [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams).
83
+
Отже, для цього `URL` має властивість: `url.searchParams`, об’єкт типу [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams).
84
84
85
85
Він надає зручні методи для роботи з параметрами пошуку:
86
86
87
-
-**`append(name, value)`** -- додати параметр з ім'ям`name`,
87
+
-**`append(name, value)`** -- додати параметр з іменем`name`,
88
88
-**`delete(name)`** -- видалити параметр з іменем `name`,
89
89
-**`get(name)`** -- отримати значення параметру з іменем `name`,
90
90
-**`getAll(name)`** -- отримати всі параметри, що мають ім'я `name` (наприклад, `?user=John&user=Pete`),
91
91
-**`has(name)`** -- перевірити чи існує параметр з іменем `name`,
92
92
-**`set(name, value)`** -- встановити/замінити параметр з іменем `name`,
93
93
-**`sort()`** -- відсортувати параметри за іменем, рідко стає в нагоді,
94
-
- ...і це об'єкт також можна перебрати, подібно до `Map`.
94
+
- ...і це об’єкт також можна перебрати, подібно до `Map`.
95
95
96
96
Приклад з параметрами, що містять пробіли та знаки пунктуації:
97
97
@@ -118,9 +118,9 @@ for(let [name, value] of url.searchParams) {
118
118
119
119
Набір символів, що можуть дозволено до використання в URL-адресах, визначено в стандарті [RFC3986](https://tools.ietf.org/html/rfc3986).
120
120
121
-
Усі інші символи, що не дозволені стандартом, повинні бути закодовані. Наприклад, не латинські букви та пробіл повинні бути заміненими на їх UTF-8 коди, що починаються з `%`. Пробіл буде закодовано у вигляді `%20` (з історичних причин пробіл дозволено закодувати як `+`).
121
+
Усі інші символи, що не дозволені стандартом, повинні бути закодовані. Наприклад, не латинські букви та пробіли мають бути замінені на їх UTF-8 коди, що починаються з `%`. Пробіл буде закодовано у вигляді `%20` (з історичних причин пробіл дозволено закодувати як `+`).
122
122
123
-
Гарна новина полягає в тому, що `URL` об'єкт виконає всі перетворення автоматично. Нам потрібно тільки передати всі параметри, а потім перетворити `URL` в рядок:
123
+
Гарна новина полягає в тому, що `URL` об’єкт виконає всі перетворення автоматично. Нам потрібно тільки передати всі параметри, а потім перетворити `URL` в рядок:
124
124
125
125
```js run
126
126
// для прикладу використано кириличні символи
@@ -137,22 +137,22 @@ URL-адреса стала довшою, бо кожен кириличний
137
137
138
138
### Кодування рядків
139
139
140
-
До появи `URL`, розробники використовували рядки для URL-адрес.
140
+
До появи `URL` об’єктів, розробники використовували рядки для URL-адрес.
141
141
142
-
Наразі, зручніше використовувати `URL`, але рядки все ще можна використовувати. У більшості випадків, використання рядків потребує менше коду.
142
+
Наразі, зручніше використовувати `URL` об’єкти, але рядки все ще можна використовувати. У більшості випадків, використання рядків потребує менше коду.
143
143
144
144
Слід зауважити, якщо ми використовуємо рядки, то закодувати та декодувати символи нам потрібно вручну.
-[encodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/encodeURIComponent) - закодувати частину URL-адреси, наприклад, параметри пошуку, шлях чи геш.
150
+
-[encodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/encodeURIComponent) - закодувати частину URL-адреси, наприклад, параметри пошуку, шлях чи хеш.
Але нам потрібно закодувати `&` всередині параметрів пошуку, інакше ми отримаємо `q=Rock&Roll`, що означатиме `q=Rock` та незрозумілий параметр `Roll`. Не те, що ми очікували.
198
198
199
-
Нам слід використовувати тільки `encodeURIComponent` з параметрами пошуку для правильного вставлення в рядок URL. Для повної безпеки, слід кодувати ім'я та значення параметрів, якщо ми не можемо бути повністю впевненими, що вони містять тільки дозволені символи.
199
+
Нам слід використовувати тільки `encodeURIComponent` з параметрами пошуку для правильного вставлення в рядок URL. Для повної безпеки, слід кодувати ім’я та значення параметрів, якщо ми не можемо бути повністю впевненими, що вони містять тільки дозволені символи.
200
200
201
201
````smart header="Різниця в кодуванні у порівнянні з `URL`"
202
202
Класи [URL](https://url.spec.whatwg.org/#url-class) та [URLSearchParams](https://url.spec.whatwg.org/#interface-urlsearchparams) ґрунтуються на останній специфікації URL: [RFC3986](https://tools.ietf.org/html/rfc3986), але функції `encode*` використовують застарілу версію [RFC2396](https://www.ietf.org/rfc/rfc2396.txt).
Як бачимо, `encodeURI`заміню квадратні дужки `[...]`, що є помилкою, причиною є те, що IPv6 адреси ще не існували в часи створення стандарту RFC2396 (серпень 1998).
214
+
Як бачимо, `encodeURI`замінила квадратні дужки `[...]`, що є помилкою, причиною є те, що IPv6 адреси ще не існували в часи створення стандарту RFC2396 (серпень 1998).
215
215
216
216
Такі випадки рідко трапляються, функції `encode*` добре справляються в більшості випадків.
0 commit comments