2015-08-28 26 views
1

Я пытаюсь сделать простой JQuery Ajax вызов APIRest API вызова из Jquery AJAX дает ошибку 403 Forbidden

Мой код:

 jQuery.ajax({ 
     type: "GET", 
     url: "http://example.com/api/v1/testapi", 
     headers: { "Authorization": "Basic Ylc5aWXXXXXXlk1ucWx5ZnA=" }, 
     success: function (data, status) { 
      // do something 
     }, 

     error: function (status) { 
      // error handler 
     } 
}); 

заголовков запроса:

OPTIONS /api/v1/testapi HTTP/1.1 
Host: example.com 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:40.0) Gecko/20100101 Firefox/40.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Origin: http://localhost 
Access-Control-Request-Method: GET 
Access-Control-Request-Headers: authorization 
Connection: keep-alive 

Ответные заголовки:

HTTP/1.1 403 Forbidden 
Date: Fri, 28 Aug 2015 10:43:01 GMT 
Server: Apache/2.2.15 (CentOS) 
X-Powered-By: PHP/5.3.3 
Cache-Control: no-cache 
access-control-allow-headers: origin, content-type, accept 
Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: POST, GET, PUT, DELETE 
access-control-allow-credentials: 1 
X-Debug-Token: 0346f5 
Connection: close 
Transfer-Encoding: chunked 
Content-Type: application/json 

Api работает с почтальоном, но дает ошибку 403 Запрещено, когда я позвонил ему из JQuery ajax

ответ

0

вставьте этот код над вашей главной страницей веб-служб.

if (isset($_SERVER['HTTP_ORIGIN'])) 
{ 
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
    header('Access-Control-Allow-Credentials: true'); 
    header('Access-Control-Max-Age: 86400'); // cache for 1 day 
} 


if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') 
{ 
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) 
     header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");   

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) 
     header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 

} 
+0

с такой же ошибкой; ( – Avinash

+0

без базового auth он будет работать? –

+0

Нет, он не будет работать без auth – Avinash

0

Запросы AJAX должны быть в пределах same domain. Я пробовал то же самое из Firefox и получил сообщение об ошибке как его междоменный вызов AJAX.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading 
the remote resource at http://example.com/api/v1/testapi. 
(Reason: CORS header 'Access-Control-Allow-Origin' missing) 

Также похоже, что вы устанавливаете заголовки авторизации через JS. Было бы безопаснее позвонить на ваш сервер, который, в свою очередь, вызовет API, установив заголовки авторизации, чтобы он не отображался в браузере.

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