提问者:小点点

PHP,Angular,HTACCESS-仅允许来自源域的请求


我完成了我的角度项目。
在我的项目中,我向PHP文件发送带有数据的POST请求,然后将结果返回给Angular。
现在我只允许来自源域的请求,并拒绝来自任何域的请求。
我尝试使用:

header("Access-Control-Allow-Origin: example.com");

但不管用。 我不想使用$_server['HTTP_REFFER'],因为它可以被操纵。 我也尝试过使用。htaccess,但我不知道如何实现。 我试过这样的方法:

order deny, allow
deny from all
allow from mydomain.com

但不管用。

我的项目已经具有以下。htaccess文件:

RewriteEngine On
# If an existing asset or directory is requested go to it as it is
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d
RewriteRule ^ - [L]

# If the requested resource doesn't exist, use index.html
RewriteRule ^ /index.html

取自:https://angular.io/guide/deployment#routed-apps-must-fallback-to-indexhtml
我能做什么?
谢谢。


共1个答案

匿名用户

简短的回答:

header("Access-Control-Allow-Origin: *");

是应该工作的最小值(在您的服务器端),但是您可能需要添加两个额外的头,例如:

header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type");

与任何header()调用一样,确保在任何输出之前执行这些调用。

长答:

CORS允许在相对安全的情况下执行跨始发地查询,这取决于飞行前请求选项,以检查哪些是允许的,哪些是不允许的。

access-control-allow-origin设置允许的源(域)。 您可能只想使用受信任的域。

access-control-allow-methods设置允许的方法。 通常,很多这样的。

access-control-allow-headers设置允许哪些可选(和自定义)标头。 通常,您希望在content-type之上包含任何非标准头。

CORS的文档非常丰富,这里有https://developer.mozilla.org/en-us/docs/web/http/CORS