2015-03-21 1 views
2

У нас есть приложение на основе Node.js на одном из наших серверов (позвоните ему «my.apiserver.com»). Наш клиент имеет веб-сайт в другом домене (my.client.com). Когда пользователь переходит на веб-сайт нашего клиента, на наш сервер высылается серия html-страниц, полученных от и на основе аякс-запросов. Похоже, что это хорошо работает во всех устройствах и браузерах, за исключением последней версии Safari (8). Для большинства (но как ни странно, не все) из пользователей Safari-8 они получают сообщения об ошибках по этим линиям:Проблема с Safari с CORS: Происхождение не разрешено Access-Control-Allow-Origin

XMLHttpRequest не может загрузить http://my.apiserver.com/views/view1.html. Происхождение http://my.client.com не допускается Access-Control-Allow-Origin

и

XMLHttpRequest не может загрузить http://my.apiserver.com/ajax_endpoint1?id=12345. Происхождение http://my.client.com не допускается Access-Control-Allow-Origin

Внутри нашего app.js файла приложение узла имеет его настройку безопасности междоменной следующий образом:

/***************************************************************************/ 
/* configure CORS 
/***************************************************************************/ 
app.use(function(req, res, next) { 
    res.set('Access-Control-Allow-Origin', 'http://my.client.com'); 
    res.set('Access-Control-Allow-Credentials', true); 
    res.set('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); 
    res.set('Access-Control-Allow-Headers', 'Origin, Product-Session, X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept, Referer, User-Agent'); 

    // intercept OPTIONS method 
    if ('OPTIONS' == req.method) { 
    res.send(200); 
    } 
    else { 
    next(); 
    } 
}); 

Любые идеи, как почему наша установка cors не подходит для последнего Safari, будет оценена по достоинству.

Благодаря

+0

Ну, на самом деле это все прекрасно. Были некоторые [вопрос] (https://bugs.webkit.org/show_bug.cgi?id=63090) с ведрами Amazon S3 и Webkit. В основном: Amazon не предлагает полную поддержку CORS. Будет ли это иметь какой-то смысл? Вы пытались разрешить любое происхождение с помощью '*'? – eljefedelrodeodeljefe

+0

Спасибо eljefedelrodeodeljefe. Да, мы попытались установить исходный набор на * в начале, но не очень хорошо, поскольку его потребности должны быть конкретными, учитывая, что мы используем allow-creds. – Gatmando

ответ

8

В конце концов, это не было проблемой CORS, это был вопрос печенье. В частности, это была проблема сторонних cookie, поскольку более поздние версии Safari не разрешают сторонние файлы cookie по умолчанию. Поскольку мы являемся третьей стороной, данные cookie не сохранялись и не передавались обратно на наш сервер, и проблема по какой-то причине проявлялась как ошибка cors. После того, как сторонние файлы cookie были включены, звонки api работали, как ожидалось. Конечно, сейчас нам нужно решить эту проблему.

Смежные вопросы