Как правильно настроить CORS - PullRequest
0 голосов
/ 06 апреля 2020

У нас есть старый SharePoint 2010 сервер, с которого мы хотим запрашивать данные в сети. Я уже знаю, что не могу запрашивать данные с других серверов из-за CORS, но на самом деле, насколько я понимаю, есть возможность разрешать такие запросы. Поэтому мне нужно изменить заголовки HTTP-ответов серверов, не так ли?

На самом деле у меня есть эта настройка, но она на самом деле не работает.

Сервер - SharePoint 2010 - IIS:

enter image description here

Я установил Access-Control-Allow-Origin для имени моего ноутбука (grolne-nb090). В приложении javascript определен следующий запрос:

onButtonClickHandler(event) {
    event.preventDefault();
    fetch('https://my.sharepointserver.com/sites/IT/_layouts/ArchiveSearch/ajax.aspx?requestType=test', {
        method: 'GET', 
        mode: 'cors',
        headers: {
            'Access-Control-Allow-Origin': 'http://grolne-nb090:3000',
            'Access-Control-Allow-Methods': 'GET, POST, PUT, PATCH, POST, DELETE, OPTIONS',
            'Access-Control-Allow-Headers': 'Content-Type,Authorization,Accept',
            'Content-Type': 'application/json', //'text/plain', //
            'Accept': 'application/json'
        },
        credentials: 'include'
    })
    .then((response) => {
        console.log('fetch data', response);
        return response.json();
      })
    .then((data) => {
        console.log('data',data);
    })
    .catch((error) => {
        console.error('Error on fetch request:', error);
    });
}

Текущее сообщение об ошибке:

Доступ к выборке в 'https://my.sharepointserver.com/sites/IT/_layouts/ArchiveSearch/ajax.aspx?requestType=test 'from origin' http://grolne-nb090: 3000 'было заблокировано политикой CORS: Ответ на предполётный запрос не проходит проверку контроля доступа: не имеет статуса HTTP ok.

Если изменить mode на no-cors, я получу ответ opaque.

Как правильно настроить сервер / приложение, чтобы я мог получить доступ к этим данным? Какие заголовки HTTP-ответа мне нужно установить на стороне сервера и как должен выглядеть запрос javascript? Только одна мысль, должен ли запрашивающий URL-адрес также использовать HTTPS? Может ли это быть проблемой? Заранее большое спасибо за любую помощь!

ОБНОВЛЕНИЕ

Я много гуглил, и кажется, что запрос к серверу SharePoint требует аутентификации, которую предварительно Рейс не обеспечивает. Таким образом, ответ от SharePoint, кажется, 401 Unauthorized для предполетного полета, и это приводит к сбою всего запроса. Сейчас я ищу, как я могу отключить аутентификацию для одной страницы SharePoint ... (или, если это возможно)

1 Ответ

0 голосов
/ 07 апреля 2020

Мне удалось решить проблему. Проблема заключалась в том, что SharePoint требует проверки подлинности, которая не предоставляется в предполетном периоде. Таким образом, предварительный полет получает 401 Unauthorized, и полный запрос не выполняется. Поэтому я снова прочитал статью о Mozilla ...

https://developer.mozilla.org/de/docs/Web/HTTP/CORS

... и увидел, что предполет не выполняется на simple requests (см. ссылку выше для деталей о simple requests). Поэтому я изменил код следующим образом:

fetch('https://my.sharepointserver.com/sites/IT/_layouts/ArchiveSearch/ajax.aspx?requestType=test', {
    method: 'GET', 
    mode: 'cors',
    headers: {
        'Content-Type': 'text/plain', 
        'Accept': 'application/json'

    },
    credentials: 'include'
})

"Волхвы c" в данном случае это 'Content-Type': 'text/plain'. Затем запрос обрабатывается как simple request, и предполёт не происходит.

Заголовки ответа HTTP, которые я установил в IIS, работали таким образом, как вы можете видеть на изображении вступительного поста. .

...