【问题标题】:CORS Error, no Access-Control-Origin header, but the header is setCORS 错误,没有 Access-Control-Origin 标头,但标头已设置
【发布时间】:2019-10-22 10:06:05
【问题描述】:

我正在尝试向 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 Access-Control-Allow-Headers →Origin, X-Requested-With, Content-Type, Accept 内容长度 →30 Keep-Alive →timeout=5, max=100 连接→保持活动状态 内容类型→文本/html;字符集=UTF-8

【问题讨论】:

  • “no Access-Origin-Control”错误 — 引用完整的错误信息,不要含糊其辞。

标签: php angular cors


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    RewriteCond %{REQUEST_METHOD} OPTIONS RewriteRule ^(.*)$ $1 [R=200,L]

    在 .htacess 文件中添加这一行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-30
      • 2021-02-20
      • 2021-12-02
      • 2016-05-13
      • 2019-02-07
      • 2014-08-20
      • 2018-09-19
      • 2018-09-19
      相关资源
      最近更新 更多