CORS з ПОЧТОМ


90

Цю тему задавали пару раз, але я все ще чогось не розумію:

Коли я читаю відповіді про

Немає заголовка 'Access-Control-Allow-Origin'

проблема, це говорить параметр повинен бути встановлений на запитуваній сервері, щоб дозволити междоменной add_header 'Access-Control-Allow-Origin' '*';.

Але, будь ласка, скажіть мені, чому на запит у листоноші (а це клієнт), це працює як шарм, і я отримав відповідь із запитуваного сервера?

Дякую


24
Листоноша не хвилює SOP, це інструмент розробника, а не браузер.
Муса

2
@Musa Добре, отже, якщо це проблема браузера (клієнта), чому мені потрібно щось змінювати на сервері?
IsraGab

8
Це сервер, який повідомляє браузеру, що він має право ( CORS ) чи ні, для певного сайту доступ до його вмісту, і браузер його шанує
Муса

У мене точно таке ж питання. Як можна це робити програмно, в даному випадку на електроні.
mluis

8
Справжнє питання тут полягає в тому, як налаштувати POSTMAN для імітації поведінки браузера, де спочатку надсилається запит ORIGIN. По суті, як змусити POSTMAN поводитися як браузер, тому що нам потрібно протестувати, щоб переконатися, що наші API налаштовані правильно. То що, якщо API працює від POSTMAN, і він ламається через CORS з браузера. Це означає, що API марний.
Кріс Лав

Відповіді:


50

Як коментує @Musa, здається, що причина в тому, що:

Листоноша не хвилює SOP, це інструмент розробника, а не браузер

До речі, ось розширення chrome , щоб воно працювало у вашому браузері (це для chrome, але ви можете знайти його як для FF, так і для Safari).

Перевірте тут, якщо ви хочете дізнатись більше про Cross-Origin та чому він працює для розширень.


5
Тоді як я можу захистити мої маршрути API, до яких отримують доступ, від таких інструментів, як Postman? Наприклад, API, який вимагає перевірки капчі. Але при прямому доступі з
поштарки

5
Посилання на розширення порушено.
jayarjo

Те саме питання, крім цього, як розширення може порушити політику єдиного походження?
Іван Кортес Ромеро,

посилання на chrome-extension розірвано
OhadR

46

Якщо ви користуєтесь веб-сайтом і заповнюєте форму для подання інформації (наприклад, номер свого соціального страхування), ви хочете бути впевнені, що інформація надсилається на той сайт, на який, на вашу думку, вона надсилається. Тож браузери були побудовані так, щоб за замовчуванням говорити: „Не надсилати інформацію домену, крім домену, який відвідують).

Згодом це стало занадто обмежуючим, але ідея за замовчуванням все ще залишається у браузерах. Не дозволяйте веб-сторінці надсилати інформацію в інший домен. Але це все перевірка браузера. Chrome, Firefox та ін. Мають вбудований код, який говорить: "перед тим, як надіслати цей запит, ми перевіримо, чи адресат відповідає відвідуваній сторінці".

У листоноші (або CURL на рядку cmd) немає вбудованих чеків. Ви взаємодієте із сайтом вручну, щоб мати повний контроль над тим, що надсилаєте.


2
Точніше, листоноша не надсилає запит XmlHttp, який перевіряється, а мережевий дзвінок верхнього рівня (наприклад, відкриття URL-адреси на новій вкладці браузера), тому його не
запускають,

Браузер не перевіряє, чи ваш сайт не надсилає дані в інший домен: якщо інший сайт домену дозволяє всі джерела, ваш браузер на 100% добре з цим. Це навпаки, це захист іншого домену, на випадок, якщо ваш сайт буде використовувати свої ресурси без авторизації.
XouDo

36

CORS(Cross-Origin Resource Sharing) і SOP(Same-Origin Policy) - це конфігурації на стороні сервера, які клієнти вирішують застосувати чи ні .

Пов’язані з клієнтами

  • Більшість браузерів застосовують його, щоб запобігти проблемам, пов’язаним з CSRFатакою.
  • Більшість засобів розробки не піклуються про це.

11

Хоча всі відповіді тут - це справді гарне пояснення того, що таке cors, але прямою відповіддю на ваше запитання буде через наступні відмінності листоноші та браузера.

Браузер: надсилає OPTIONSвиклик для перевірки типу сервера та отримання заголовків перед відправкою будь-якого нового запиту до кінцевої точки API. Де це перевіряє Access-Control-Allow-Origin. Враховуючи це, Access-Control-Allow-Originзаголовок просто вказує, які всі КРОСОВІ ПОХОДЖЕННЯ дозволяються, хоча за замовчуванням браузер дозволить лише однакові джерела.

Листоноша: відправка прямої GET, POST, PUT, і DELETEт.д. запит без перевірки , який тип сервера є і отримувати заголовок Access-Control-Allow-Originза допомогою OPTIONSвиклику до сервера.


"Надсилає виклик OPTIONS для перевірки типу сервера та отримання заголовків перед відправленням будь-якого нового запиту до кінцевої точки API" - Це не відповідає дійсності. Це робиться лише для непростих запитів.
Квентін,

1

Як правило, Листоноша використовується для налагодження та використовується на стадії розробки. Але якщо ви хочете заблокувати це навіть у листоноші, спробуйте це.

    const referrer_domain = "[enter-the-domain-name-of-the-referrer]"
    //check for the referrer domain
    app.all('/*', function(req, res, next) {
      if(req.headers.referer.indexOf(referrer_domain) == -1){
        res.send('Invalid Request')
      }

      next();
    });

додайте код у свій файл за допомогою маршрутизатора. Якщо у вас є файл із "маршрутизаторами", додайте код у верхній частині файлу. Той самий файл, де ви маєте: const express = require ('express') const app = express (); const cors = require ('cors');
samceena

відредагуйте його, app.jsякщо ви використовуєте node app.jsдля запуску сервера.
Бхарат Пабба,

може це захистити ваш сервер від ddos?
SuperUberDuper

-1

Використовуйте плагін браузера / chrome листоноша, щоб перевірити CORS / SOP як веб-сайт. Натомість використовуйте настільну програму, щоб уникнути цих елементів керування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.