CORS错误,没有Access-Control-Origin标头,但是标头已设置

时间:2019-06-06 21:12:13

标签: php angular cors

我正在尝试向PHP API发出发布请求,但收到“在资源上未设置Access-Origin-Control标头”错误,但标头已设置。当我向Postman发出请求时,一切都很好,您可以在“答案”中看到已设置标题。

我已经尝试将标题设置为*,但没有帮助。

角度

  createUser(formData: FormData) {
      const httpOptions = {
        headers: new HttpHeaders({
          'Content-Type': 'multipart/form-data',
        })
      };

      return this.http.post(this.apiURL + 'create_user', formData, httpOptions);
  }

PHP

<?php
header("Access-Control-Allow-Origin: http://localhost:4200");
header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
/**
 * Creates a User.
 */


require 'database.php';

$cost = 10;
$user = array();
$username=$_POST["username"];
$email=$_POST["email"];
$password=$_POST["password"];

$password_hash = password_hash($password, PASSWORD_BCRYPT, ["cost" => $cost]);

$resultCreate = pg_query_params($con, "INSERT INTO wriggling_snakes.users (email, username, password) VALUES ($1, $2, $3)", array($email, $username, $password_hash));
$resultFind = pg_query($con, "SELECT id, username FROM wriggling_snakes.users WHERE wriggling_snakes.users.email='$email'");
if(!$resultFind){
    echo "Error";
}else {
    $i = 0;
    while ($row = pg_fetch_assoc($resultFind)) {
        $user['id'] = $row['id'];
        $user['username'] = $row['username'];
        $i++;
    }

    echo json_encode($user);
}

邮递员答案标题

日期→2019年6月6日星期四20:58:13 GMT 服务器→Apache / 2.4.39(Unix)OpenSSL / 1.0.2r PHP / 7.1.29 mod_perl / 2.0.8-dev Perl / v5.16.3 X-Powered-By→PHP / 7.1.29 访问控制允许来源→{http://localhost:4200 访问控制允许方法→PUT,GET,POST,DELETE 访问控制允许标题→原始,X请求方式,内容类型,接受 内容长度→30 保持活动→超时= 5,最大= 100 连接→保持活动 内容类型→text / html; charset = UTF-8

2 个答案:

答案 0 :(得分:0)

导航器检查允许的来源以进行请求,因此这就是Postman正常获得请求的原因,它不需要它们。因此,您需要检查PHP是否正确设置了标头,因为问题就在那里。我不确定您是否使用某种CORS中间件拦截了请求,也许会有所帮助。

答案 1 :(得分:0)

RewriteCond%{REQUEST_METHOD}选项RewriteRule ^(。*)$ $ 1 [R = 200,L]

将此行添加到.htacess文件中