web-dev-qa-db-ja.com

リクエストヘッダーフィールドAccess-Control-Allow-Headersは、プリフライトレスポンスのAccess-Control-Allow-Headersでは許可されていません

クロスドメインからログインページを作成しようとしていますが、問題を解決できませんでした。エラーは次のとおりです。

XMLHttpRequestはロードできません http://localhost/testing/resp.php 。リクエストヘッダーフィールドAccess-Control-Allow-Headersは、プリフライトレスポンスのAccess-Control-Allow-Headersでは許可されていません。

私のJavascriptコードは次のとおりです。

$('#login').click(function(){
                var username = $('#uname').val();
                var password = $('#pass').val();
                var result = $('.result');
                result.text('loading....');

                if (username != '' && password !=''){
                        var urltopass = 'action=login&username='+username+'&password='+password;
                        $.ajax({
                                type: 'POST',
                                data: urltopass,
                                headers: {"Access-Control-Allow-Headers": "Content-Type"},
                                url: 'http://localhost/testing/resp.php',
                                crossDomain: true,
                                cache: false,
                                success: function(responseText){
                                        console.log(responseText);
                                        if(responseText== "0"){
                                                result.text('incorrect login information');
                                        } else if (responseText == "1"){
                                                window.location="http://localhost/testing/home.php";
                                        } else{
                                                alert('error in sql query \n' + responseText);
                                        }
                                }
                        });
                } else return false;
        });

PHP http://localhost/testing/resp.php のコード:

<?php
        include "db.php"; //Connecting to database

        if (!isset($_SERVER['HTTP_Origin'])) {
                echo "This is not cross-domain request";
    exit;
}
        header("Access-Control-Allow-Origin: *");
        header("Access-Control-Allow-Credentials: true");
        header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
        header("Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With");
        header('P3P: CP="CAO PSA OUR"'); // Makes IE to support cookies
        header("Content-Type: application/json; charset=utf-8");

        if (isset($_POST['action']) && $_POST['action'] == 'login'){
                $uname = $_POST['username'];
                $pass = $_POST['password'];

                $sql = "SELECT * FROM loginajax WHERE username='$uname' AND password='$pass'";
        
                $rs=$conn->query($sql);

                if (mysqli_num_rows($rs) <= 0){
                        echo "0";
                } else {
                        echo "1";
                }
                
        } else echo "this is not Login";

?>
9
Anahoua16

これを削除します:

headers: {"Access-Control-Allow-Headers": "Content-Type"},

jQuery.ajax呼び出しから。

サーバーはAccess-Control-Allow-Headersヘッダーで応答しますが、クライアントはそれをサーバーに送信しません。

クライアントはAccess-Control-Request-Headersを送信して特定のヘッダーの許可を要求し、サーバーはAccess-Control-Allow-Headersで応答して、許可する実際のヘッダーをリストします。クライアントは、許可されるヘッダーを要求しません。

12
Patrick Evans