我正在尝试向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
答案 0 :(得分:0)
导航器检查允许的来源以进行请求,因此这就是Postman正常获得请求的原因,它不需要它们。因此,您需要检查PHP是否正确设置了标头,因为问题就在那里。我不确定您是否使用某种CORS中间件拦截了请求,也许会有所帮助。
答案 1 :(得分:0)
RewriteCond%{REQUEST_METHOD}选项RewriteRule ^(。*)$ $ 1 [R = 200,L]
将此行添加到.htacess文件中