갑자기 CORS로 화가났을 때의 대처법(.NET Core)

3016 단어 .NETCoreHTTPC#.NET
평소와 같이 API를 만들고 Chrome에서 요청했는데 지금까지 보통 요청이 있었는데 갑자기 CORS로 화내게 되었기 때문에 조사해 보았다.

발생 이벤트



Chrome에서는 CORS, Edge에서는 404가 돌아왔다.

Chrome
Access to XMLHttpRequest at 'https://localhost:44342/api/{長いため以下略}' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Edge


그 외의 검색 메소드등은 보통으로 움직이고 있는&쿼리를 줄이면 리퀘스트가 다니기 때문에, 쿠에리에 어떠한 문제가 있는 것은 아닐까라고 들었다.

원인



결론을 보면 Get의 쿼리 문자열이 너무 길면 .NET에서는 404.15라는 것을 반환하고 있다는 것을 알았다.

404의 선입견에서 이것은 예상치 못했다.



공식 문서 에도 그렇게 기재가 있었다.

404.15 - 쿼리 문자열이 너무 깁니다.

아무래도 쿼리는 2048바이트까지다.
htps : // / cs. mic로소 ft. 코 m/엔-u s/아 sp 네 t/우우 테파 rs/아 sp 네 t4/오 ぇr ゔ ぃ w #0.2__와 c253429244
htps : // / cs. 미 c 로소 ft. 이 m / 그럼 jp / t 네 t / 아피 / sys m. 음 b. 안녕하세요. h tp 룬치 메세 c 치온. 마 x 쿠에 ryst 린 g ぇ gth?ぃぃ w = 네 tf 라메를 rk-4.8

대처법



구그라고 보면 web.config에 설정을 기재하면 된다는 것.

IIS7 이상에서 URL 쿼리 문자열이 길면 404 오류

그러나 .NET Core의 경우는 web.config가 없지만, 만들어 주면 읽어주는 것 같습니다.

ASP.NET Core 응용 프로그램에서도 web.config를 사용자 지정하고 싶습니다.

프로젝트 바로 아래에 web.config 파일을 만들고 다음 설정을 구성합니다.
maxQueryString 파라미터를 늘려 주면 OK입니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <security>
        <requestFiltering>
          <requestLimits maxQueryString="10000" />
        </requestFiltering>
      </security>
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: {略}-->

이제 다시 실행하면 긴 쿼리 문자열에서도 받아 들여 Chrome에서 CORS가 나오지 않습니다.

좋은 웹페이지 즐겨찾기