Skip to content

Commit 8cf2d60

Browse files
committed
Review udpates
1 parent 7044ee6 commit 8cf2d60

File tree

1 file changed

+23
-23
lines changed

1 file changed

+23
-23
lines changed

5-network/07-url/article.md

+23-23
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,28 @@
11

2-
# URL об'єкт
2+
# URL об’єкти
33

44
Вбудований клас [URL](https://url.spec.whatwg.org/#api) надає зручний інтерфейс для створення та розбирання URL на частини.
55

6-
Методи, що дають змогу зробити мережевий запит, досить передати просто рядок, вони не вимагають саме екземпляр класу `URL`. Тому нас нічого не зобов'язує використовувати клас `URL`. Але це дійсно може стати в нагоді.
6+
Зазвичай, щоб зробити мережевий запит, достатньо передати лише рядок з адресою, передавати саме екземпляр класу `URL` не має жодної потреби. Тому нас ніхто не зобовязує використовувати клас `URL`. Але іноді це може стати в нагоді.
77

88
## Створення URL
99

10-
Синтаксис для створення `URL` об'єктів наступний:
10+
Синтаксис для створення `URL` обєктів:
1111

1212
```js
1313
new URL(url, [base])
1414
```
1515

1616
- **`url`** -- повний URL чи, якщо задано другий параметр, тільки шлях (дивись далі),
17-
- **`base`** -- необов'язковий параметр з "основою" відносно якої буде побудовано URL, якщо в першому параметрі передано тільки шлях.
17+
- **`base`** -- необовязковий параметр з "основою" відносно якої буде побудовано URL, якщо в першому параметрі передано тільки шлях.
1818

1919
Наприклад:
2020

2121
```js
2222
let url = new URL('https://javascript.info/profile/admin');
2323
```
2424

25-
В обох випадках буде згенеровано однакові URLи:
25+
В обох випадках буде згенеровано однакові URL:
2626

2727
```js run
2828
let url1 = new URL('https://javascript.info/profile/admin');
@@ -41,7 +41,7 @@ let newUrl = new URL('tester', url);
4141
alert(newUrl); // https://javascript.info/profile/tester
4242
```
4343

44-
Об'єкт `URL` дозволяє негайно отримати доступ до його складових, тому це зручний спосіб для розбору URL адрес:
44+
Обєкт `URL` дозволяє негайно отримати доступ до його складових, тому це зручний спосіб для розбору URL адреси:
4545

4646
```js run
4747
let url = new URL('https://javascript.info/url');
@@ -51,21 +51,21 @@ alert(url.host); // javascript.info
5151
alert(url.pathname); // /url
5252
```
5353

54-
Підказка зі складовими URL:
54+
Підказка зі складовими URL об’єкту:
5555

5656
![](url-object.svg)
5757

5858
- `href` повна URL-адреса, те ж саме, що `url.toString()`
5959
- `protocol` протокол, закінчується символом двокрапки `:`
60-
- `search` - рядок з параметрами, починається символом знаку запитання `?`
60+
- `search` -- рядок з параметрами, починається символом знаку запитання `?`
6161
- `hash` починається символом решітки`#`
6262
- також можуть бути присутні властивості `user` та `password`, якщо використовується формат для HTTP аутентифікації: `http://login:[email protected]` (не згадано вище, бо рідко використовується).
6363

6464

65-
```smart header="`URL` об'єкт можна передати у методи, що використовуються для мережевих запитів замість рядку"
66-
`fetch` чи `XMLHttpRequest` можуть отримувати `URL` об'єкти майже всюди, де можна передати рядок з URL.
65+
```smart header="`URL` обєкт можна передати у методи, що використовуються для мережевих запитів замість рядку"
66+
`fetch` чи `XMLHttpRequest` можуть використовувати `URL` обєкти майже всюди, де можна передати рядок з `URL`.
6767

68-
Зазвичай, `URL` об'єкт можна передати в будь-який метод замість рядку, оскільки більшість методів перетворять об'єкт в рядок, що містить повну URL-адресу.
68+
Зазвичай, `URL` обєкт можна передати в будь-який метод замість рядку, оскільки більшість методів перетворять обєкт в рядок, що містить повну URL-адресу.
6969
```
7070
7171
## Параметри пошуку "?..."
@@ -80,18 +80,18 @@ new URL('https://google.com/search?query=JavaScript')
8080

8181
...Але параметри повинні бути закодованими, якщо вони містять пробіли, не латинські символи тощо (більше про це нижче).
8282

83-
Отже, для цього `URL` має властивість: `url.searchParams`, об'єкт типу [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams).
83+
Отже, для цього `URL` має властивість: `url.searchParams`, обєкт типу [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams).
8484

8585
Він надає зручні методи для роботи з параметрами пошуку:
8686

87-
- **`append(name, value)`** -- додати параметр з ім'ям `name`,
87+
- **`append(name, value)`** -- додати параметр з іменем `name`,
8888
- **`delete(name)`** -- видалити параметр з іменем `name`,
8989
- **`get(name)`** -- отримати значення параметру з іменем `name`,
9090
- **`getAll(name)`** -- отримати всі параметри, що мають ім'я `name` (наприклад, `?user=John&user=Pete`),
9191
- **`has(name)`** -- перевірити чи існує параметр з іменем `name`,
9292
- **`set(name, value)`** -- встановити/замінити параметр з іменем `name`,
9393
- **`sort()`** -- відсортувати параметри за іменем, рідко стає в нагоді,
94-
- ...і це об'єкт також можна перебрати, подібно до `Map`.
94+
- ...і це обєкт також можна перебрати, подібно до `Map`.
9595

9696
Приклад з параметрами, що містять пробіли та знаки пунктуації:
9797

@@ -118,9 +118,9 @@ for(let [name, value] of url.searchParams) {
118118

119119
Набір символів, що можуть дозволено до використання в URL-адресах, визначено в стандарті [RFC3986](https://tools.ietf.org/html/rfc3986).
120120

121-
Усі інші символи, що не дозволені стандартом, повинні бути закодовані. Наприклад, не латинські букви та пробіл повинні бути заміненими на їх UTF-8 коди, що починаються з `%`. Пробіл буде закодовано у вигляді `%20` (з історичних причин пробіл дозволено закодувати як `+`).
121+
Усі інші символи, що не дозволені стандартом, повинні бути закодовані. Наприклад, не латинські букви та пробіли мають бути замінені на їх UTF-8 коди, що починаються з `%`. Пробіл буде закодовано у вигляді `%20` (з історичних причин пробіл дозволено закодувати як `+`).
122122

123-
Гарна новина полягає в тому, що `URL` об'єкт виконає всі перетворення автоматично. Нам потрібно тільки передати всі параметри, а потім перетворити `URL` в рядок:
123+
Гарна новина полягає в тому, що `URL` обєкт виконає всі перетворення автоматично. Нам потрібно тільки передати всі параметри, а потім перетворити `URL` в рядок:
124124

125125
```js run
126126
// для прикладу використано кириличні символи
@@ -137,22 +137,22 @@ URL-адреса стала довшою, бо кожен кириличний
137137

138138
### Кодування рядків
139139

140-
До появи `URL`, розробники використовували рядки для URL-адрес.
140+
До появи `URL` об’єктів, розробники використовували рядки для URL-адрес.
141141

142-
Наразі, зручніше використовувати `URL`, але рядки все ще можна використовувати. У більшості випадків, використання рядків потребує менше коду.
142+
Наразі, зручніше використовувати `URL` об’єкти, але рядки все ще можна використовувати. У більшості випадків, використання рядків потребує менше коду.
143143

144144
Слід зауважити, якщо ми використовуємо рядки, то закодувати та декодувати символи нам потрібно вручну.
145145

146146
Для цього є вбудовані функції:
147147

148148
- [encodeURI](mdn:/JavaScript/Reference/Global_Objects/encodeURI) - закодувати URL-адресу повністю.
149149
- [decodeURI](mdn:/JavaScript/Reference/Global_Objects/decodeURI) - розкодувати її.
150-
- [encodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/encodeURIComponent) - закодувати частину URL-адреси, наприклад, параметри пошуку, шлях чи геш.
150+
- [encodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/encodeURIComponent) - закодувати частину URL-адреси, наприклад, параметри пошуку, шлях чи хеш.
151151
- [decodeURIComponent](mdn:/JavaScript/Reference/Global_Objects/decodeURIComponent) - розкодувати відповідну частину.
152152

153-
Може виникнути природне питання: "Яка різниця між `encodeURIComponent` та `encodeURI`? В якому випадку краще використовувати кожну функцію?"
153+
Може виникнути природне питання: "Яка різниця між `encodeURIComponent` та `encodeURI`? Коли використовувати яку?"
154154

155-
Це стає легше зрозуміти, якщо подивитися на URL-адресу, що показано розділеною на частини вище.
155+
Це легше зрозуміти, якщо подивитися на URL-адресу, що показано розділеною на частини вище.
156156

157157
```
158158
https://site.com:8080/path/page?p1=v1&p2=v2#hash
@@ -196,7 +196,7 @@ alert(url); // https://google.com/search?q=Rock&Roll
196196

197197
Але нам потрібно закодувати `&` всередині параметрів пошуку, інакше ми отримаємо `q=Rock&Roll`, що означатиме `q=Rock` та незрозумілий параметр `Roll`. Не те, що ми очікували.
198198

199-
Нам слід використовувати тільки `encodeURIComponent` з параметрами пошуку для правильного вставлення в рядок URL. Для повної безпеки, слід кодувати ім'я та значення параметрів, якщо ми не можемо бути повністю впевненими, що вони містять тільки дозволені символи.
199+
Нам слід використовувати тільки `encodeURIComponent` з параметрами пошуку для правильного вставлення в рядок URL. Для повної безпеки, слід кодувати імя та значення параметрів, якщо ми не можемо бути повністю впевненими, що вони містять тільки дозволені символи.
200200

201201
````smart header="Різниця в кодуванні у порівнянні з `URL`"
202202
Класи [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).
@@ -211,7 +211,7 @@ alert(encodeURI(url)); // http://%5B2607:f8b0:4005:802::1007%5D/
211211
alert(new URL(url)); // http://[2607:f8b0:4005:802::1007]/
212212
```
213213

214-
Як бачимо, `encodeURI` заміню квадратні дужки `[...]`, що є помилкою, причиною є те, що IPv6 адреси ще не існували в часи створення стандарту RFC2396 (серпень 1998).
214+
Як бачимо, `encodeURI` замінила квадратні дужки `[...]`, що є помилкою, причиною є те, що IPv6 адреси ще не існували в часи створення стандарту RFC2396 (серпень 1998).
215215

216216
Такі випадки рідко трапляються, функції `encode*` добре справляються в більшості випадків.
217217
````

0 commit comments

Comments
 (0)