Задать вопрос
kinglostov
@kinglostov
просто lostov

AJAX, jQuery запрос с полями CURLOPT_HTTPHEADER как в PHP?

$data = json_encode(["a"=>1,"b"=>true,"c"=>"d"]);
$ch = curl_init("https://$IP:8089/common_api/1.0/$method");
curl_setopt( $ch, CURLOPT_POST, TRUE );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $data);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
curl_setopt( $ch, CURLOPT_TIMEOUT, 3 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
    'Signature: ' . md5($data . $key),
    "Content-Type: application/json"
));
$response = json_decode(curl_exec( $ch ));
$error_code = curl_errno($ch);
curl_close($ch);
return $response;

Как сделать эту запрос в AJAX?

$.ajax({
url: "https://"+IP+":8089/common_api/1.0/update_driver_info",
dataType: 'json',
contentType: "application/json",
data: {"a":1,"b":true,"c":"d"},
headers: {
'Access-Control-Allow-Origin': '*',
'Signature': 'e664a6438abfee0d10e66f35c4f655c9',// php md5('{"a":1,"b":true,"c":"d"}'.$key)
},
success: function (data, status) {
debugger;
alert("Sucess");
}})


и тут ошибка:
Access to XMLHttpRequest at 'ну тут ссылка' from origin 'null' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
  • Вопрос задан
  • 90 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@GrinFil
Начнём издалека.
В чём принципиальная разница между этими запросами?
Первый запрос - это запрос серверный, второй запрос - это запрос браузерный.
Иными словами, в первом случае запрос посылается (с точки зрения принимающей стороны) машиной. второй запрос - человеком, при помощи браузера. Второй запрос не считается как доверенный почти никогда.
Из этой ситуации есть 2 выхода:
1. На принимающей стороне настроить заголовки ответа. Если там PHP, то добавить в код строку:
Header('Access-Control-Allow-Origin: *');
Это позволит данному скрипту быть вызванным через браузер.
Для реализации, очевидно, нужно иметь доступ к принимающему скрипту.

2. Сделать промежуточную проксю в виде серверного скрипта на своей стороне. Браузерный аякс будет посылать запрос на ваш скрипт, сам скрипт посылает уже серверный запрос в нужную вам точку, тем самым обходя CORS. Внутри вашего скрипта, соответственно, должна присутствовать строка из пункта 1, если он не в том же домене, что и страница браузера, с которой посылается запрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы