क्योंकि AngularJS के साथ CORS और http प्रमाणीकरण का उपयोग करना मुश्किल हो सकता है, मैंने एक सीखा सबक साझा करने के लिए प्रश्न को संपादित किया। पहले मैं igorzg को धन्यवाद देना चाहता हूं। उनके जवाब से मुझे बहुत मदद मिली। परिदृश्य निम्न है: आप AngularJS $ http सेवा के साथ एक अलग डोमेन में POST अनुरोध भेजना चाहते हैं। AngularJS और सर्वर सेटअप प्राप्त करते समय बहुत सी मुश्किल बातों का ध्यान रखना चाहिए।
पहला: आपके एप्लिकेशन कॉन्फ़िगरेशन में आपको क्रॉस डोमेन कॉल की अनुमति देनी चाहिए
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
app.config(function($httpProvider) {
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;
});
दूसरा: आपको आवश्यक शर्तें निर्दिष्ट करनी चाहिए: अनुरोध में सही और उपयोगकर्ता नाम और पासवर्ड।
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
$http({
url: 'url of remote service',
method: "POST",
data: JSON.stringify(requestData),
withCredentials: true,
headers: {
'Authorization': 'Basic bashe64usename:password'
}
});
Тhird: सर्वर सेटअप। आपको प्रदान करना होगा:
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url.com:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
हर अनुरोध के लिए। जब आप विकल्प प्राप्त करते हैं तो आपको पास होना चाहिए:
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header( "HTTP/1.1 200 OK" );
exit();
}
HTTP प्रमाणीकरण और बाकी सब उसके बाद आता है।
यहाँ php के साथ सर्वर साइड के उपयोग का पूरा उदाहरण है।
<?php
/**
* Cors usage example.
* @author Georgi Naumov
* gonaumov@gmail.com for contacts and
* suggestions.
**/
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Origin: http://url:8080");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
if($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header( "HTTP/1.1 200 OK" );
exit();
}
$realm = 'Restricted area';
$password = 'somepassword';
$users = array('someusername' => $password);
if (isset($_SERVER['PHP_AUTH_USER']) == false || isset($_SERVER['PHP_AUTH_PW']) == false) {
header('WWW-Authenticate: Basic realm="My Realm"');
die('Not authorised');
}
if (isset($users[$_SERVER['PHP_AUTH_USER']]) && $users[$_SERVER['PHP_AUTH_USER']] == $password)
{
header( "HTTP/1.1 200 OK" );
echo 'You are logged in!' ;
exit();
}
?>
इस मुद्दे के बारे में मेरे ब्लॉग पर एक लेख है जिसे यहाँ देखा जा सकता है ।