'Access-Control-Allow-Origin'헤더에 여러 값이 포함되어 있습니다.
클라이언트 측에서 AngularJS $ http를 사용하여 서버 측에서 ASP.NET 웹 API 애플리케이션의 끝점에 액세스하고 있습니다. 클라이언트가 서버와 다른 도메인에서 호스팅 CORS가 필요합니다. $ http.post (URL, 데이터)에서 작동합니다. 하지만 사용자를 인증하고 $ http.get (url)을 통해 구매 요청하자마자 메시지가 나타납니다.
'Access-Control-Allow-Origin'헤더에는 'http://127.0.0.1:9000, http://127.0.0.1:9000'값이 여러 개 포함되어 하나만 허용됩니다. 따라서 원본 'http://127.0.0.1:9000'은 액세스가 허용되지 않습니다.
Fiddler는 성공적인 옵션 요청 후 요청에 실제로 두 개의 헤더 항목이 있음을 보여줍니다. 내가 무엇을 어디에서 잘못하고 있습니까?
최신 정보
$ http.get 대신 jQuery $ .get을 사용하면 동일한 오류 메시지가 나타납니다. 따라서 이것은 AngularJS에 문제가없는 것입니다. 그러나 그것이 잘못된 곳은 어디입니까?
나는 추가했다
config.EnableCors(new EnableCorsAttribute(Properties.Settings.Default.Cors, "", ""))
만큼 잘
app.UseCors(CorsOptions.AllowAll);
서버에서. 결과적으로 두 개의 헤더 항목이 생성됩니다. 후튼 사용하면 작동합니다.
모범 사례 (예 : http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api ) 에 따라 CORS를 설정했기 때문에 문제가 발생했습니다. 또한 <add name="Access-Control-Allow-Origin" value="*"/>
web.config에 사용자 지정 헤더 가 있습니다.
web.config 항목을 제거하면 모두 정상입니다.
@mww의 답변과는 달리 EnableCors()
WebApiConfig.cs 및 컨트롤러 EnableCorsAttribute
에 여전히 있습니다 . 둘 중 하나를 꺼냈을 때 다른 문제가 발생했습니다.
나는 Cors 5.1.0.0을 사용하고 있고, 많은 두통 끝에 서버의 Access-Control-Allow-Origin & Access-Control-Allow-Header 헤더가 이어지는 문제를 발견했습니다.
config.EnableCors()
WebApiConfig.cs 파일에서 제거 옵션 [EnableCors("*","*","*")]
컨트롤러 클래스에 속성 만 설정했습니다.
나도 OWIN과 WebAPI를 모두 가지고 있었는데 둘 다 CORS를 포함 시켰는데 'Access-Control-Allow-Origin' header contains multiple values
오류가 발생했습니다.
CORS를 활성화 한 모든 코드를 다음 system.webServer
Web.Config 의 노드에 다음을 추가했습니다 .
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="https://stethio.azurewebsites.net" />
<add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept, Authorization" />
</customHeaders>
</httpProtocol>
이렇게하면 OWIN (로그인 허용) 및 WebAPI (API 호출 허용)에 대한 CORS 요구 사항이 있고 새로운 문제가 발생했습니다. OPTIONS
API 호출을 위해 프리 플라이트 중에 메서드를 사용할 수 없습니다. 이에 대한 수정은 간단했습니다 handlers
. Web.Config 노드 에서 다음을 제거하면 됩니다.
<remove name="OPTIONSVerbHandler" />
이것이 누군가를 돕기를 바랍니다.
멀리 떨어진 곳에서 접근 할 수 있습니다 Access-Control-Allow-Origin
. 대신 환경 변수를 조건부로 설정 한 다음 Header
지시문 에서 사용할 수 있습니다 .
SetEnvIf Origin "^(https?://localhost|https://[a-z]+\.my\.base\.domain)$" ORIGIN_SUB_DOMAIN=$1
Header set Access-Control-Allow-Origin: "%{ORIGIN_SUB_DOMAIN}e" env=ORIGIN_SUB_DOMAIN
따라서이 예제에서 응답 헤더는 요청 헤더 Origin
가 RegExp :와 일치 하는 경우에만 추가 ^(https?://localhost|https://[a-z]+\.my\.base\.domain)$
(기본적으로 HTTP 또는 HTTPS를 가볍게 localhost 및 HTTPS를 가볍게 * .my.base.domain을 의미 함)합니다.
setenvif
모듈 을 활성화하는 것을 잊지 않고 .
문서 :
- http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif
- http://httpd.apache.org/docs/2.2/mod/mod_headers.html#header
BTW. }e
에서는 %{ORIGIN_SUB_DOMAIN}e
오타가 아닙니다. Header
디렉티브 에서 환경 변수를 사용하는 방법 입니다.
Apache 서버 :
나는 똑같이 지출하지만, 서버에 대한 액세스를 한 파일에 별표 ( ")가 없었습니다. (예 : '.htaccess').
Header add Access-Control-Allow-Origin: *
Header add Access-Control-Allow-Origin "*"
다른 '.htaccess'가있는 폴더에 '.htaccess'파일이있을 수 있습니다.
/
- .htaccess
- public_html / .htaccess (problem here)
귀하의 경우 '*'대신 별표는 http://127.0.0.1:9000
데이터 제공 권한을 부여 하는 ip ( ) 서버입니다.
ASP.NET :
코드에 'Access-Control-Allow-Origin'중복이 없는지 확인하십시오.
개발자 도구 :
Chrome을 사용하면 요청 헤더를 확인할 수 있습니다. F12 키를 누르고 '네트워크'탭으로 이동하여 이제 AJAX 요청을 실행하고 목록에 표시되고 클릭하여 모든 정보를 제공합니다.
Cors 옵션이 여러 위치에 구성되어있을 때 발생합니다. 제 경우에는 Startup.Auth.cs / ConfigureAuth뿐만 아니라 컨트롤러 수준에서도 사용했습니다.
내 이해는 응용 프로그램 전체를 원하면 Startup.Auth.cs / ConfigureAuth에서 다음과 같이 구성하십시오 .Microsoft.Owin.Cors에 대한 참조가 필요합니다.
public void ConfigureAuth(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
컨트롤러 수준에서 유지하는 경우 컨트롤러 수준에서 삽입 할 수 있습니다.
[EnableCors("http://localhost:24589", "*", "*")]
public class ProductsController : ApiController
{
ProductRepository _prodRepo;
WebApiConfig 등록에 추가
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
또는 web.config
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
하지만 둘 다 아닙니다
IIS에있는 경우 web.config에서 CORS를 활성화해야하며 App_Start / WebApiConfig.cs Register 메서드에서 활성화 할 필요가 없습니다.
내 해결책은 다음과 같습니다.
// Enable CORS
//EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
//config.EnableCors(cors);
web.config에 작성하십시오.
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
nodejs 서버 에서이 문제가 발생했습니다.
여기에 내가 그것을 고친 방법이 있습니다.
나는 a를 통해 내 노드 서버를 실행하고 nginx proxy
nginx와 node
둘 다로 설정 allow cross domain requests
했지만 그게 마음에 들지 않았으므로 nginx에서 제거하고 노드에 남겨 두었고 모두 잘되었습니다.
물론 실제로 Access-Control-Allow-Origin
헤더를 여러 값으로 설정 한 경우에도 발생할 수 있습니다. 예를 들어 쉼표로 구분 된 값 목록은 RFC에서 지원 되지만 실제로 대부분의 주요 브라우저에서는 지원되지 않습니다. 참고 그 이상의 도메인을 허용하는 방법에 대한 RFC 회담 뿐만 아니라 '*'를 사용하지 않고.
예를 들어 다음과 같은 헤더를 사용하여 Chrome에서 해당 오류를 얻을 수 있습니다.
Access-Control-Allow-Origin: http://test.mysite.com, http://test2.mysite.com
이것은 Chrome Version 64.0.3282.186 (Official Build) (64-bit)
CDN으로 인해이를 고려하고 Akamai를 사용하는 경우 Vary:Origin
, 많은 사람들이이 문제를 해결하기 위해 제안하는 방식 인를 사용하면 Akamai가 서버에서 캐시하지 않는다는 점에 유의할 수 있습니다 .
"캐시 ID 수정"응답 동작을 사용하여 캐시 키 작성 방법을 변경해야 할 것입니다. 이 관련 StackOverflow 질문에서이 문제에 대한 자세한 내용
너무 멍청하고 간단합니다.
이 문제는 Header always set Access-Control-Allow-Origin *
Apache 구성 파일 내에서 두 시간을 보낼 때 발생했습니다 . withing에 한 번 VirtualHost
, 안쪽 태그하면 Limit
태그 :
<VirtualHost localhost:80>
...
Header set Access-Control-Allow-Origin: *
...
<Limit OPTIONS>
...
Header set Access-Control-Allow-Origin: *
...
</Limit>
</VirtualHost>
항목 하나를 제거하면 문제가 해결되었습니다.
원래 게시물에서는 두 번이었을 것 같습니다.
Header set Access-Control-Allow-Origin: "http://127.0.0.1:9000"
나는 같은 문제에 직면했으며 이것이 내가 그것을 해결하기 위해 한 일입니다.
WebApi 서비스에서 Global.asax 내부에 다음 코드를 작성했습니다.
Sub Application_BeginRequest()
Dim currentRequest = HttpContext.Current.Request
Dim currentResponse = HttpContext.Current.Response
Dim currentOriginValue As String = String.Empty
Dim currentHostValue As String = String.Empty
Dim currentRequestOrigin = currentRequest.Headers("Origin")
Dim currentRequestHost = currentRequest.Headers("Host")
Dim currentRequestHeaders = currentRequest.Headers("Access-Control-Request-Headers")
Dim currentRequestMethod = currentRequest.Headers("Access-Control-Request-Method")
If currentRequestOrigin IsNot Nothing Then
currentOriginValue = currentRequestOrigin
End If
If currentRequest.Path.ToLower().IndexOf("token") > -1 Or Request.HttpMethod = "OPTIONS" Then
currentResponse.Headers.Remove("Access-Control-Allow-Origin")
currentResponse.AppendHeader("Access-Control-Allow-Origin", "*")
End If
For Each key In Request.Headers.AllKeys
If key = "Origin" AndAlso Request.HttpMethod = "OPTIONS" Then
currentResponse.AppendHeader("Access-Control-Allow-Credentials", "true")
currentResponse.AppendHeader("Access-Control-Allow-Methods", currentRequestMethod)
currentResponse.AppendHeader("Access-Control-Allow-Headers", If(currentRequestHeaders, "GET,POST,PUT,DELETE,OPTIONS"))
currentResponse.StatusCode = 200
currentResponse.End()
End If
Next
End Sub
여기서이 코드는 프리 플라이트 및 토큰 요청이 응답에 "Access-Control-Allow-Origin"을 추가하도록 허용합니다. 그렇지 않으면 추가하지 않습니다.
다음은 구현에 대한 내 블로그입니다. https://ibhowmick.wordpress.com/2018/09/21/cross-domain-token-based-authentication-with-web-api2-and-jquery-angular-5-angular- 6 /
php와 함께 IIS를 사용하는 사람들을 위해 IIS에서 서버 측에서 web.config 파일을 루트 디렉토리 (wwwroot)로 업데이트하고 이것을 추가하십시오.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<directoryBrowse enabled="true" />
<httpProtocol>
<customHeaders>
<add name="Control-Allow-Origin" value="*"/>
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
IIS 서버를 다시 시작한 후 RUN에 IISReset을 입력하고
여기에 CORS가있는 위치를 정의하는 구성 파일이 하나만있을 수있는 위의 예와 유사한 또 다른 인스턴스가 있습니다. IIS 서버에 서로 다른 디렉터리의 경로에있는 두 개의 web.config 파일이 있었고 그중 하나는 가상 디렉터리에 숨겨져 있습니다. 이 문제를 해결하기 위해 경로가 가상 디렉터리의 구성 파일을 사용하고 있었기 때문에 루트 수준 구성 파일을 삭제했습니다. 둘 중 하나를 선택해야합니다.
URL called: 'https://example.com/foo/bar'
^ ^
CORS config file in root virtual directory with another CORS config file
deleted this config other sites using this
'IT' 카테고리의 다른 글
numpy 배열을 튜플로 변환 (0) | 2020.08.30 |
---|---|
Json 객체의 총 항목 수를 얻었습니까? (0) | 2020.08.30 |
iPhone / iPad 사용자를 : hover 가상 클래스를 강제로 무시할 수 있습니까? (0) | 2020.08.30 |
Django 설정 기본 로깅 (0) | 2020.08.30 |
.h 또는 .c 파일에 포함되어 있습니까? (0) | 2020.08.30 |