CORS: PHP: 실행 전 요청에 대한 응답이 실패했습니다. 원산지를 허용합니다
<p>따라서 CORS 게시물이 많이 있다는 것을 알고 있으며 이를 추가하고 있지만 도움이 될 만한 답변을 찾을 수 없습니다. 그래서 저는 PHP API를 사용하는 Angular 4 애플리케이션을 구축하고 있습니다. <code>app.example.com</code>의 앱과 <code>api.example.com</code>의 API를 사용하여 도메인에 문제 없이 작동합니다. 다음 오류가 발생하므로 로그인 정보를 전달하세요. </p>
<인용문>
<p>XMLHttpRequest는 http://api.example.com/Account/Login을 로드할 수 없습니다.
실행 전 요청에 대한 응답이 액세스 제어 확인에 실패했습니다: 아니요
요청에 'Access-Control-Allow-Origin' 헤더가 있습니다.
자원. 따라서 소스 "http://app.example.com"은 허용되지 않습니다.
입장.</p>
</인용문>
<p>내 PHP 代码如下所示:</p>
<pre class="brush:php;toolbar:false;">$http_origin = $_SERVER['HTTP_ORIGIN'];
$allowed_domains = 배열(
'http://example.com',
'https://example.com',
'http://app.example.com',
'https://app.example.com',
'http://www.example.com',
'https://www.example.com'
);
if (in_array(strtolower($http_origin), $allowed_domains))
{
// header("액세스 제어-허용-원본: *");
header("액세스 제어-허용-원본: $http_origin");
header('액세스 제어-허용 자격 증명: true');
header('액세스 제어-최대 연령: 86400');
}
// OPTIONS 요청 중에 액세스 제어 헤더가 수신됩니다.
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header("액세스 제어 허용 방법: GET, POST, OPTIONS");
header("액세스 제어-허용 헤더: 승인, 콘텐츠 유형, 승인, 원본");
종료(0);
}</pre>
<p>내가 좋아하는 Angular 帖子如下所示:</p>
<pre class="brush:php;toolbar:false;">공개 로그인(login: Login): Observable<LoginResponse> {
let headers = 새 헤더();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
headers.append('인증', '기본' + btoa(login.Username + ':' + login.Password));
return this.http.post(this.apiBaseUrl + '/Account/Login', "grant_type=client_credentials", { 헤더: 헤더 })
.map(응답 => {
// 코드
});
}</pre>
<p>如果我会得到:</p>
<pre class="brush:php;toolbar:false;">{ "error": "invalid_client", "error_description": "클라이언트 자격 증명을 헤더나 본문에서 찾을 수 없습니다." }</pre>
<p>我尝试将 출처 设置为 '<code>*</code>' 只是为了测试并查看这是否是问题的核心,但它仍然以同样的方式失败。</p>
<p><strong><em>编辑</em></strong>
只是根据以下信息进行更new。更改标头中的大小写没有任何效果,并且从 if 语句中提取代码也没有任何效果。</p> ;
<p>我俇告诉我的实时应用程序转到本地 api 来调试 php,并且 php 正재按预期工作。它设置标头并将其放入每个 if语句中。</p>
<p><strong><em>编辑镜头 2</em></strong>
我确实需要一些帮助,如果有人有任何想法,我将不常感激。</p>
<p><strong><em>편집 샷 3</em></strong>
PHP 대신 .htaccess에 모든 헤더 항목을 설정하면 통과할 수 있습니다. 하지만 이제 위에 나열된 오류가 발생합니다. 이는 Postman을 사용할 때 항상 발생하지만 실제 웹사이트를 사용할 때 발생하는 오류입니다. </p>
<p><code>{"error":"invalid_client","error_description":"헤더 또는 본문에서 클라이언트 자격 증명을 찾을 수 없습니다."}</code></p>
<p>내 응답 헤더는 다음과 같습니다</p>
<pre class="brush:php;toolbar:false;">Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:인증, 콘텐츠 유형, 승인, 출처
액세스 제어 허용 방법:GET, POST, OPTIONS
Access-Control-Allow-Origin:*</pre>
<p>작동하게 되면 *에서 내 도메인으로 변경하겠습니다. 하지만 지금은 *로 남겨둡니다. </p>
<p><strong>요청 시 내 헤더입니다. </strong></p>