Google Cloud Storage의 Signed URL로 업그레이드할 때 CORS 설정

주로 자신 용이지만, 아마 1 년 후 잊어 버릴 것 같아서 메모하기로했습니다

GCS에서 SignedUrl을 게시하여 클라이언트 측에서 업그레이드하고 싶습니다.



자주 있는 케이스군요. 우선 SignedUrl을 발행하는 곳은, 이하의 문서를 보고 간단하게 할 수 있었습니다.

그렇게 해서 완성된 URL을 Dropzone.js에 먹여 업로드하려고 했는데 CORS 오류에 걸렸습니다.
이쪽의 기사등도 참고로 했습니다만, 그대로는 업로드할 수 없었습니다.

궁극적으로 성공한 CORS 설정


[
    {
      "origin": ["https://example.com"],
      "responseHeader": ["content-type", "cache-control","x-requested-with"],
      "method": ["PUT"],
      "maxAgeSeconds": 3600
    }
]

이번 클라이언트 측에서는 PUT 밖에 없기 때문에, GET 등은 넣고 있지 않습니다만 기호로 추가해 주세요. 당초 Content-type만을 responseHeader에 세트 하고 있었습니다만, 그것이라고 안 되었습니다.

Preflight 요청의 요청 헤더를 살펴보면 다음 헤더를 요청했으므로 추가했습니다.



그게 좋지 않아.



그것만이라면 왠지 CORS 에러가 나와 머리를 안고 있었습니다만, github의 issue등을 참고로, 명시적으로 Content-type을 세트 한다고 했다고 했습니다.
# Dropzoneのoptionに追加
そのほかのオプション,
sending: function(file, xhr) {
  var _send = xhr.send;
  xhr.setRequestHeader("Content-type","application/octet-stream");
  xhr.send = function() { // そもそもGCSにアップするときのハック
    send.call(xhr, file);
  }
}, 

아무래도, CORS 에러가 아닌 에러에서도 CORS의 에러로서 브라우저에 나와 버리는 것 같습니다.

좋은 웹페이지 즐겨찾기