2017-03-13 6 views
3

AWIG API 게이트웨이 (APIG) 및 람다 (Lambda) 기능을 갖춘 서버리스 웹 사이트를 구축하고 있습니다. 난 뒤에 람다 함수가 HTTP 요청 헤더를 받아야하기 때문에 프록시 통합을 사용해야합니다. 동시에 일부 바이너리 데이터가 제공되어야합니다. 내 경우, favicon.ico 파일. 다른 사람들은 동적으로 생성 된 PDF 또는 Excel 파일을 제공하려고 할 수 있습니다. APIG는이 목적을 위해 이진 지원을합니다. base64로 데이터를 인코딩하고 MIME 콘텐츠 형식을 구성하여 클라이언트에 제공하기 전에 해독 할 수 있도록하십시오. 그러나 프록시 통합에서는 작동하지 않습니다. 프록시 통합은 통합 응답 부분을 건너 뜁니다.프록시 통합을 통해 AWS API 게이트웨이에서 바이너리 데이터를 제공하는 방법은 무엇입니까?

favicon.ico의 요청을 S3 끝점으로 리디렉션하려고했지만 브라우저가 이상한 동작을 보입니다. ico 파일은 동일한 도메인이 아니라 다른 리디렉션 도메인에 속해 있기 때문입니다.

base64로 인코딩하고 클라이언트 브라우저에서 디코딩하도록 허용하는 것은 표준이 아니므로 모든 브라우저에서 작동하지 않을 수 있으므로 옵션이 아닙니다.

AWS에서 새 기능을 추가하기 전까지는 아무 것도 할 수 없다고 생각합니다. 누구든지이 문제를 들여다 보았습니까? 어떤 생각이나 제안?

답변

0

여기에 내 질문에 답하십시오. AWS 관련 질문은 AWS 포럼을 방문하십시오. mamy AWS 사용자가 아닙니다.

답변 : 프록시 통합 이진 지원은 작동하며 수신 및 발신 응답에 모두 적용됩니다. 이 관련 3 개 요소가 있습니다

: APIG에 대한 바이너리 지원 설정에서

  1. MIME 형식이 모두 들어오고 나가는 JSON 가치
  2. 는 "isBase64Encoded"(I 콘솔에서이 설정)
  3. 나가는 JSON의 "Content-type"값

위의 대답은 예, 파일을 수락 할 수 있음을 의미합니다. 프록시 통합으로 파일을 추출 할 수 있습니다.

본문이있는 사용자 '소식'과 설정 한 MIME 유형이 일치하면 APIG는 body64 부분을 base64로 인코딩하고 'isBase64Encoded'값으로 표시합니다. 나가는 응답에도 똑같은 일이 발생합니다. 바이너리 데이터로 응답하려면 base64로 인코딩하고 나가는 JSON에서이 값을 true로 설정하십시오.

수신 요청의 경우 사용자가 설정 한 MIME 유형 인 하나의 요인에 따라 달라집니다. 발신의 경우 JSON 및 MIME 유형의 두 조건 인 표시기가 일치해야합니다.

간단히하기 위해 MIME 형식을 */*으로 설정했습니다. 사용자가 본문에 어떤 것을 제출할 때마다 APIG가 인코딩 한 다음 해독합니다. 바이너리로 응답 할 때마다 표시기를 설정하고 base64로 인코딩합니다. test/html (압축되지 않은)과 같은 다른 유형에서는이 작업을 수행하지 않습니다.

+0

내 끝점 중 하나에서 PDF를 반환하려고하는데이를 base64로 인코딩하고 "isBase64Encoded"를 true로 설정합니다. 그러나 PDF가 정상적으로 디코딩되지 않는 것처럼 보입니다. 텍스트 편집기에서 파일을 열고 수동으로 디코딩 한 다음 저장하면 PDF가 표시됩니다. 왜 그런 일이 일어나는 지 아십니까? – JPL

+0

JPL에서 이진 지원에 대한 MIME 설정을 확인하십시오. – gini09

+0

나의 마지막 코멘트 이후 모든 타입에 대해 바이너리 지원을 추가했다. */*는 작동하지만 JSON과 같은 비 - 바이너리 타입은 엉망으로 만든다. 응용 프로그램/pdf 또는 응용 프로그램/*을 입력하면 API 게이트웨이가이를 인식하지 못하여 해당 유형을 올바르게 처리하지 못합니다.형식이 잘못되었거나 다른 설정이 있는지 확실하지 않습니다. – JPL