मैं किसी अन्य सर्वर में एक संपर्क फ़ॉर्म को संभालने के लिए एक सरल php बैकएंड बनाने के लिए कोशिश कर रहा हूँ, लेकिन उचित हेडर जोड़ने के बावजूद, यह मेरे दे रही है वही त्रुटि संदेश रखता है:XMLHttpRequest संसाधन लोड नहीं कर सकता
XMLHttpRequest cannot load https://php-contact-form-lual.herokuapp.com/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4000' is therefore not allowed access. The response had HTTP status code 404.
यह ajax अनुरोध है:
$.ajax({
type: 'POST',
url: 'https://php-contact-form-lual.herokuapp.com/',
data: {
subject: 'subject',
to: 'receiver',
name: $('#name').val(),
email: $('#email').val(),
msg: $('#msg').val()
}
}) // then the callbacks
और इस php है:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
// return only the headers and not the content
// only allow CORS if we're doing a POST - i.e. no saving for now.
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] == 'POST') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With');
}
exit;
}
// handling the data
$subject = $_POST['subject'];
$to = $_POST['to'];
$name = $_POST['name'];
$email = $_POST['email'];
$msg = $_POST['msg'];
$msg = "DE: " . $name . " (" . $email .")" . "\n\n" . $msg;
mail($to, $subject, $msg);
?>
ध्यान दें कि "डेटा को संभालने" से पहले कोड की रेखाएं this answer से ली गई हैं, मैंने उसी उत्तर के पहले भाग में प्रस्तुत सरल समाधान के साथ भी प्रयास किया- कहीं और भी-- और यहां तक कि तारांकन को बदलना सटीक URL, लेकिन परिणाम एक ही :(
किसी भी मदद की सराहना की जाएगी किया गया है :)
अद्यतन: बातें मैं (सबसे पुरानी से करने के लिए सर्वर साइड पर की कोशिश की है की लॉग वर्तमान):
// Allow from any origin
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
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
------------------------------------------
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, OPTIONS");
-----------------------------------------
header("Access-Control-Allow-Origin: http://localhost:4000");
header("Access-Control-Allow-Methods: POST, OPTIONS");
-----------------------------------------
header("Access-Control-Allow-Origin: http://localhost:4000");
header("Access-Control-Allow-Methods: POST, OPTIONS, GET");
-----------------------------------------
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] == 'POST') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
}
exit;
}
------------------------------------------
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] == 'POST') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
}
exit;
}
// + sending headers though ajax
------------------------------------------
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
-------------------------------------------
# created .htaccess file with this line:
Header set Access-Control-Allow-Origin "*"
------------------------------------------
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, OPTIONS, GET');
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
---------------------------------------------
header('Access-Control-Allow-Origin: http://localhost:4000');
header('Access-Control-Allow-Methods: POST, OPTIONS, GET');
header('Access-Control-Allow-Headers: X-Requested-With, content-type, access-control-allow-origin, access-control-allow-methods, access-control-allow-headers');
-----------------------------------------------
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
// return only the headers and not the content
// only allow CORS if we're doing a POST - i.e. no saving for now.
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']) && $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] == 'POST') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: X-Requested-With');
}
exit;
}
--------------------------------------------------
header('Origin: http://localhost:4000');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
Aditional जानकारी
अनुरोध हेडर
POST/HTTP/1.1
Host: php-contact-form-lual.herokuapp.com
Connection: keep-alive
Content-Length: 88
Accept: */*
Origin: http://localhost:4000
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://localhost:4000/contacto/
Accept-Encoding: gzip, deflate, br
Accept-Language: es,en-GB;q=0.8,en;q=0.6,de;q=0.4
प्रतिक्रिया हेडर
HTTP/1.1 404 Not Found
Connection: keep-alive
Date: Sat, 17 Dec 2016 16:10:02 GMT
Server: Apache
Content-Length: 198
Content-Type: text/html; charset=iso-8859-1
Via: 1.1 vegur
यह एक डुप्लिकेट क्वेरी है। यहां से सहायता लेने का प्रयास करें http://stackoverflow.com/questions/20035101/no-access-control-allow-origin-header-is-present-on-the-requested-resource – Nadeem
धन्यवाद @Nadeem, लेकिन मैं पहले से ही पार हो गया वह प्रश्न और PHP उत्तर काम नहीं करता है और अधिकांश अन्य उत्तर सीधे समस्या का समाधान नहीं करते हैं, लेकिन तीसरे पक्ष के समाधान या बैकएंड के साथ समाधान php पर आधारित नहीं हैं। मैं वास्तव में बौद्धिक हित के लिए इसे PHP के लिए हल करना चाहता हूं, हालांकि मैं दृढ़ता से अन्य भाषा में बैकएंड को फिर से लिखने पर विचार कर रहा हूं। – Lual
अजीब बात यह है कि प्रतिक्रिया शीर्षलेख आपके एक्सेस हेडर का बिल्कुल उल्लेख नहीं करते हैं। क्या हेरोकू हेडर फ़िल्टर करता है जिसे आप वापस कर सकते हैं? – Chris