Page 148 - 6108
P. 148

«Непростими» вважаються всі інші, наприклад, запит з методом PUT або з
               заголовком Authorization не підходить під обмеження вище.
                     Принципова різниця між ними полягає в тому, що «простий» запит можна
               сформувати  і  відправити  на  сервер  і  без  XMLHttpRequest,  наприклад  за
               допомогою HTML-форми.
                     CORS для простих запитів
                     У крос-доменний запит браузер автоматично додає заголовок Origin, що
               містить домен, з якого здійснено запит.
                     У  разі  запиту  на  http://anywhere.com/request  з  http://somewhere.com/page
               заголовки будуть приблизно такі:

                      GET / request
                      Host: anywhere.com
                      Origin: http: //somewhere.com
                      ...

                      Сервер повинен, зі свого боку, відповісти спеціальними заголовками, чи
               дозволяє він такий запит до себе.
                      Якщо сервер дозволяє крос-доменний запит з цього домену - він повинен
               додати  до  відповіді  заголовок  Access-Control-Allow-Origin,  що  містить
               домен запиту (в даному випадку «somewhere.com») або зірочку *.
                      Тільки  при  наявності  такого  заголовка  у  відповіді  -  браузер  вважатиме
               запит успішним, а інакше JavaScript отримає помилку.
                      Тобто, відповідь сервера може бути приблизно таким:





                      HTTP / 1.1 200 OK
                      Content-Type: text / html; charset = UTF-8
                      Access-Control-Allow-Origin: http://somewhere.com

                      Якщо  Access-Control-Allow-Origin  немає,  то  браузер  вважає,  що
               дозвіл не отримано, і завершує запит з помилкою.
                      При  таких  запитах  не  передаються  куки  і  заголовки  HTTP-авторизації.
               Параметри user і password в методі open ігноруються.
                      За  замовчуванням  браузер  не  передає  з  запитом  куки  і  авторизаційні
               заголовки.  Щоб  браузер  передав  разом  із  запитом  куки  і  HTTP-авторизацію,
               потрібно поставити запитом xhr.withCredentials = true:
                      var xhr = new XMLHttpRequest ();
                      xhr.withCredentials = true;
                      xhr.open ( 'POST', 'http://anywhere.com/request', true)
                        ...
                      Далі – все як завжди, додаткових дій з боку клієнта не потрібно. Такий
               XMLHttpRequest з куками, природно, вимагає від сервера більше дозволів, ніж
               «анонімний».  Тому  для  запитів  з  withCredentials  передбачено  додаткове
               підтвердження з боку сервера.
   143   144   145   146   147   148   149   150   151   152   153