Навіщо потрібні заголовки Control-Expose-Headpose?


78

Я шукав конкретні причини безпеки щодо того, чому це було додано. Це був якийсь момент WTH, коли я впроваджував cors і міг бачити, як повертаються всі заголовки, але я не міг отримати до них доступ через javascript ..

Відповіді:


95

CORS реалізовано таким чином, що він не порушує припущень, зроблених у попередньому CORS, світі, що має єдине походження.

У світі до CORS клієнт міг ініціювати запит на перехресне походження (наприклад, за допомогою тегу скрипта), але він не міг прочитати заголовки відповідей.

Для того, щоб гарантувати, що CORS не порушує цього припущення, специфікація CORS вимагає від сервера надання явних дозволів для читання клієнтами цих заголовків (через Access-Control-Expose-Headersзаголовок). Таким чином, несанкціоновані запити CORS поводяться так, як це було у світі, що передував CORS.


Я вважаю, що це посилання є гарним прикладом для цієї відповіді: fetch.spec.whatwg.org/#example-cors-with-response-header
yusong

1
Іншими словами, Access-Control-Expose-Headersне для безпеки взагалі, а для сумісності? Не існує нападу, який ми використовуємо Access-Control-Expose-Headersдля пом’якшення?
DavidS

4

Ось причина, чому потрібні Access-Control-Expose-Headers:

Access-Control-Expose-Headers (необов’язково) - об’єкт XMLHttpRequest 2 має метод getResponseHeader (), який повертає значення певного заголовка відповіді. Під час запиту CORS метод getResponseHeader () може отримати доступ лише до простих заголовків відповідей. Прості заголовки відповідей визначаються наступним чином:

  • Керування кешем
  • Мова вмісту
  • Тип вмісту
  • Термін дії закінчується
  • Остання зміна
  • Прагма

Якщо ви хочете, щоб клієнти мали доступ до інших заголовків, вам слід використовувати заголовок Access-Control-Expose-Headers . Значення цього заголовка - це розділений комами список заголовків відповідей, які ви хочете показати клієнту.

для отримання додаткової довідки, будь-ласка, перейдіть за посиланням https://www.html5rocks.com/en/tutorials/cors/

Щасливого кодування !!


3

Це досить гарне запитання. Переглядаючи http://www.w3.org/TR/cors/#simple-response-header , незрозуміло, чому ви хотіли б це робити чи потрібно.

Специфікація CORS надає велику вагу ідеї, що вам потрібно мати попереднє запит рукостискання, коли клієнт запитує тип підключення, а сервер відповідає, що він це дозволить - тому це може бути ще одним аспектом цього .

За замовчуванням довжина вмісту не є дозволеним заголовком, тому я зіткнувся з тією ж проблемою (пізніше, коли мені потрібно було отримати доступ до WebDAV і мені довелося змінити допустимі параметри) .. CORS насправді не має великого сенсу (для мене ), в першу чергу, щоб це не здивувало мене, якщо його примхливі частини.


3
CORS відчуває примхливість саме тому, що автори специфікації подбали про те, щоб добре подумати над цим. CORS повинен увімкнути запити на перехресне походження, захищаючи політику браузера з тим самим походженням. Саме необхідність збалансувати ці дві (іноді протилежні) сили робить специфікацію CORS важкою для розуміння.
monsur

1
Посилання на рекомендацію є найбільш корисним показником, який я отримав цього місяця та більше. Я знав про Access-Control-Allow-Headers, але не розглядав Access-Control-Expose-Headers і не міг зрозуміти, чому мої заголовки "Посилання" не потрапляють до моєї колекції Backbone. Вражаюче.
mcdave
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.