|
Вызов веб-сервиса базы 1с с помощью jquery (js), отсутствует заголовок Access-Co | ☑ | ||
---|---|---|---|---|
0
Slavenia
28.04.16
✎
15:22
|
Приветствую, коллеги!
Есть 1с веб-сервис, результат операции которого я безуспешно пытаюсь получить используя jquery функцию $.ajax с методом POST и указанием всех параметров (авторизация на веб-сервисе не требуется). При попытке отправить запрос в консоли браузера (Firefox) получаю следующее: "Загрузка смешанного (небезопасного) активного содержимого "<url моего веб-сервиса>" на защищенной странице "Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на <url моего веб-сервиса>. (Причина: отсутствует заголовок CORS 'Access-Control-Allow-Origin')." На других форумах советуют данный заголовок со значением * прописывать в ответе от веб-сервера. Подскажите, как (и возможно ли) это реализовать на стороне 1с (возможно где-либо в настройках веб-сервиса или в генерируемом wsdl-файле) - чтобы в ответе на запрос извне добавлялся вышеприведенный заголовок? На партнерском подсказали использовать промежуточный php-файл, но возможно кто-либо сталкивался и предложит иной вариант? |
|||
1
Юрий Лазаренко
28.04.16
✎
15:44
|
(0) А чем промежуточный php не устраивает? Мы через них базу дергаем с сайта через аякс - шикарно дергается.
|
|||
2
Slavenia
28.04.16
✎
15:48
|
Возможно есть вариант через настройки веб-сервиса?
|
|||
3
Serginio1
28.04.16
✎
15:52
|
||||
4
Serginio1
28.04.16
✎
15:58
|
||||
5
Slavenia
29.04.16
✎
12:57
|
(4) Про это и толкую в (0), можно ли без прослойки из php инициировать передачу этого заголовка в ответе от веб-сервиса 1с на POST-запрос со стороннего сайта, написанный на jquery?
|
|||
6
Карупян
29.04.16
✎
13:12
|
сайт https а веб сервис http?
|
|||
7
4St
29.04.16
✎
13:47
|
(5) речь точно идёт о прикладном объекте "webсервис" (т.е. soap), а не "httpсервис" (rest)?
|
|||
8
Serginio1
29.04.16
✎
15:52
|
(5) Там же написано как это сделать. Нужно в заголовках указывать доверенные сайты
|
|||
9
PRO100 NigGaZ
29.04.16
✎
16:04
|
(0) блин, только что столкнулся с такой же ошибкой :[
|
|||
10
PRO100 NigGaZ
29.04.16
✎
17:03
|
Ответ.Заголовки.Вставить("Access-Control-Allow-Origin","*");
|
|||
11
Slavenia
02.06.16
✎
16:09
|
(6) Да. Именно так.
|
|||
12
Slavenia
02.06.16
✎
16:11
|
(7) веб-сервис.
|
|||
13
Slavenia
02.06.16
✎
16:23
|
Попробовал через php-файл: с https-ресурса вызываю php-файл (с помощью jquery ajax), который находится на http-ресурсе.
Содержимое php-файла следующее: <?php header('Access-Control-Allow-Origin; *'); $ch = curl_init(); $headers = array( 'Content-type: application/xml', 'Access-Control-Allow-Origin: *', ); $data = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sof="http://ресурс"> <soap:Header/> <soap:Body> <sof:GetCustomerInfo> <sof:INN>1234567890</sof:INN> </sof:GetCustomerInfo> </soap:Body> </soap:Envelope>'; curl_setopt($ch, CURLOPT_URL, 'http://веб-сервис'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $res = curl_exec($ch); curl_close($ch); ?> Подскажите, что не так делаю? |
|||
14
Fragster
гуру
02.06.16
✎
16:26
|
для httpсервиса:
Процедура ЗаполнитьЗаголовки(Запрос, Ответ) Ответ.Заголовки.Вставить("Access-Control-Allow-Headers", "Authorization,Content-type"); Ответ.Заголовки.Вставить("Access-Control-Allow-Credentials", "true"); Если Ложь Тогда Запрос = Новый HTTPЗапрос; КонецЕсли; Origin = Запрос.Заголовки.Получить("Origin"); Если Origin = Неопределено Тогда Ответ.Заголовки.Вставить("Access-Control-Allow-Origin", "*"); Иначе Ответ.Заголовки.Вставить("Access-Control-Allow-Origin", Origin); КонецЕсли; КонецПроцедуры Функция ШаблонOptions(Запрос) Ответ = Новый HTTPСервисОтвет(200); ЗаполнитьЗаголовки(Запрос, Ответ); Возврат Ответ; КонецФункции |
|||
15
Fragster
гуру
02.06.16
✎
16:27
|
(13) всё
|
|||
16
Юрий Лазаренко
02.06.16
✎
16:29
|
(13) Следует добавить
echo($res) |
|||
17
Fragster
гуру
02.06.16
✎
16:29
|
для обращению к вебсервису 1с из php
ini_set("soap.wsdl_cache_enabled", "0"); $client = new SoapClient(".....?wsdl", array( 'login' => '...', 'password' => '...', 'trace' => true, 'features' => SOAP_USE_XSI_ARRAY_TYPE, //'compression' => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5 ) ); |
|||
18
Slavenia
03.06.16
✎
19:08
|
Добавил настройку curl CURLOPT_RETURNTRANSFER для сохранения результата в переменную $res, добавил заголовки header...
В итоге вызов php-файла со следующим содержимым отработал корректно: <?php $ch = curl_init(); $data = '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sof="http://ресурс"> <soap:Header/> <soap:Body> <sof:GetCustomerInfo> <sof:INN>1234567890</sof:INN> </sof:GetCustomerInfo> </soap:Body> </soap:Envelope>'; curl_setopt($ch, CURLOPT_URL, 'http://<url веб-сервиса>'); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $res = curl_exec($ch); // завершение сеанса и освобождение ресурсов curl_close($ch); echo($res); header('Access-Control-Allow-Origin:https://<url сайта, с которого идет вызов>'); header('Access-Control-Allow-Credentials:true'); header('Access-Control-Allow-Headers: x-csrf-token'); ?> Всем спасибо за помощь. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |