일반적인 문제 및 버그 신고

웹 푸시에 문제가 발생하면 문제를 디버그하기 어렵거나 도움말 찾기 이 문서에서는 몇 가지 일반적인 문제와 Chrome이나 Firefox에서 버그를 발견한 경우 시도해 보세요.

푸시 디버깅에 대해 알아보기 전에 디버깅에 문제가 있을 수 있습니다. 파일이 업데이트되지 않거나, 등록 실패 또는 일반적으로 특이한 행동입니다. 이 서비스 워커 디버깅에 관한 유용한 문서 YouTube Music을 처음 사용하시는 경우 사용할 수 있습니다

웹 푸시 개발 및 테스트 시 확인해야 할 두 가지 별도의 단계가 있습니다. 각각 고유한 일반적인 문제 / 문제:

  • 메시지 전송: 메시지 전송이 성공했는지 확인합니다. 201 HTTP 코드가 표시됩니다. 그렇지 않은 경우 다음 단계를 따르세요. <ph type="x-smartling-placeholder">
      </ph>
    • 승인 오류 확인: 승인을 받은 경우 오류 메시지( 승인 문제 섹션.
    • 기타 API 오류: 201이 아닌 상태 코드 응답을 받으면 자세한 내용은 HTTP 상태 코드 섹션을 문제의 원인에 대한 안내를 제공합니다.
  • 메시지 수신: 메시지를 보낼 수 있으면 메시지가 브라우저에서 수신되지 않습니다. <ph type="x-smartling-placeholder">

푸시 메시지와 관련 섹션을 주고받을 수 없는 경우 문제를 디버그하는 데 도움이 되지 않는 경우 푸시 메커니즘 자체에 버그가 있을 수 있습니다. 이 경우 버그 신고 올리기 섹션을 만들어서 필요한 모든 정보가 포함된 좋은 버그 신고를 제출함으로써 버그 수정 프로세스를 수행할 수 있습니다

시작하기 전에 한 가지 말씀드리고 싶은 것은 Firefox와 Mozilla AutoPush Service에는 유용한 오류 메시지가 있습니다. 문제가 발생하여 문제가 무엇인지 확실하지 않은 경우 Firefox에서 테스트하여 더 유용한 오류 메시지가 표시됩니다.

승인 문제

승인 문제는 개발자가 코드를 작성할 때 발생하는 가장 일반적인 문제 중 하나입니다. 웹 푸시부터 살펴보겠습니다 이것은 일반적으로 사이트의 애플리케이션 서버 키 (VAPID 키) 를 참고하세요.

Firefox와 Chrome 모두에서 푸시를 지원하는 가장 쉬운 방법은 subscribe() 호출의 applicationServerKey 단점은 프런트 엔드와 서버 키가 일치하지 않으면 인증 오류가 발생했습니다.

Chrome 및 FCM

FCM을 푸시 서비스로 사용하는 Chrome의 경우 다양한 범위의 FCM에서 보낸 UnauthorizedRegistration 응답 모두 애플리케이션 서버 키와 관련이 있습니다.

다음 중 하나에서 UnauthorizedRegistration 오류가 발생합니다. 상황:

  • FCM에 보내는 요청에서 Authorization 헤더를 정의하지 못한 경우
  • 사용자 구독에 사용된 애플리케이션 키가 사용된 키와 일치하지 않습니다. 승인 헤더에 서명합니다.
  • JWT에서 만료 시간이 잘못되었습니다.즉, 만료 시간이 24시간을 초과합니다. JWT가 만료되었습니다.
  • JWT의 형식이 잘못되었거나 잘못된 값이 있습니다.

전체 오류 응답은 다음과 같습니다.

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

Chrome에서 이 오류 메시지가 나타나면 Firefox에서 테스트하여 문제를 더 잘 파악할 수 있습니다

Firefox 및 Mozilla 자동 푸시

Firefox와 Mozilla AutoPush 는 문제 Authorization개.

또한 다음 주소에서 Unauthorized 오류 응답을 받게 됩니다. 푸시에 Authorization 헤더가 포함되지 않은 경우 Mozilla 자동 푸시 합니다.

{
  "errno": 109,
  "message": "Request did not validate missing authorization header",
  "code": 401,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Unauthorized"
}

JWT의 만료일이 만료된 경우 Unauthorized 오류(토큰이 다음과 같다는 설명 메시지 포함) 만료되었습니다.

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid bearer token: Auth expired"
}

사용자가 사이트에 있었던 시점과 애플리케이션 서버 키가 다른 경우 승인 헤더가 서명되면 Not Found 오류가 반환됩니다.

{
  "errno": 102,
  "message": "Request did not validate invalid token",
  "code": 404,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Not Found"
}

마지막으로 JWT에 잘못된 값이 있는 경우 (예: 'alg' 값이 가 예상치 못한 값인 경우) Mozilla에서 다음과 같은 오류가 표시됩니다. 자동 푸시:

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid Authorization Header"
}

HTTP 상태 코드

Push Service를 사용하면 됩니다 다음은 HTTP 상태 코드 목록과 각 코드의 의미입니다. 웹 푸시입니다

상태 코드 설명
429 요청이 너무 많습니다. 애플리케이션 서버가 비율 제한에 도달했습니다. Push Service를 사용하면 됩니다 서비스의 응답에는 'Retry-After'가 포함되어야 합니다. 헤더를 다른 요청을 할 수 있기까지 걸리는 시간을 나타냅니다.
400 요청이 잘못되었습니다. 헤더 중 하나가 잘못되었거나 형식이 잘못되었습니다.
404 찾을 수 없음 이 경우 구독정보에서 PushSubscription를 사용자를 다시 구독할 수 있는 기회를 기다립니다.
410 사라졌다. 구독이 더 이상 유효하지 않으므로 다음에서 삭제해야 합니다. 있습니다 이는 구독에서 `unsubscribe()` 를 호출하여 재현할 수 있습니다. `PushSubscription`.
413 페이로드 크기가 너무 큽니다. 푸시 서비스가 필요로 하는 최소 크기 페이로드 4,096바이트 (또는 4KB)입니다. 이보다 크면 이 오류가 발생할 수 있습니다.

HTTP 상태 코드가 이 목록에 없고 오류 메시지가 웹 푸시 프로토콜 사양을 검토하여 상태 코드는 해당 상태 코드가 사용됩니다.

페이로드 암호화 문제

푸시 메시지 (즉, 웹으로 메시지 전송)를 트리거할 수 있는 경우 201 응답 코드를 수신)하지만 푸시 이벤트가 실행되지 않습니다. 이는 일반적으로 브라우저가 암호화합니다.

이 경우 Firefox의 DevTools에 오류 메시지가 표시됩니다. 다음과 같습니다.

복호화 메시지가 있는 Firefox DevTools

Chrome에서 이 문제인지 확인하려면 다음 단계를 따르세요.

  1. about://gcm-internals로 이동하여 '녹화 시작'을 클릭합니다. 버튼을 클릭합니다.

Chrome GCM 내부 레코드입니다.

  1. 푸시 메시지를 트리거하고 '메시지 복호화 실패 로그'를 확인합니다.

GCM 내부 복호화 로그.

페이로드의 복호화에 문제가 있으면 유사한 방식으로 작동합니다. AES-GCM decryption failed 메시지가 표시됩니다.)

이러한 문제가 발생한 경우 암호화를 디버그하는 데 도움이 되는 몇 가지 도구가 있습니다.

연결 문제

서비스 워커에서 푸시 이벤트를 수신하지 않고 문제가 있는 경우 브라우저가 서버에 연결되지 않았을 수 있습니다. 액세스할 수 있습니다

Chrome에서는 '메시지 수신 로그' about://gcm-internals로 된 (sic)입니다.

GCM 내부 요소가 메시지 로그를 수신합니다.

메시지가 제때 도착하지 않는 경우 브라우저의 연결 상태가 CONNECTED입니다.

GCM 내부 시스템 연결 상태입니다.

'연결됨'이 아닌 경우 현재 프로필을 삭제하고 새 계정을 만듭니다. 만약 그래도 문제가 해결되지 않으면 아래에 제안된 대로 버그 신고를 제출해 주세요.

버그 신고 제출

위의 방법으로 문제가 해결되지 않고 사용 중인 브라우저에 문제를 제기해 주세요. 관련 문제:

Chrome의 경우 여기에서 문제를 제기할 수 있습니다. https://bugs.chromium.org/p/chromium/issues/list Firefox의 경우 다음에서 문제를 제기해야 합니다. https://bugzilla.mozilla.org/

좋은 버그 신고를 제공하려면 다음 세부정보를 제공해야 합니다.

  • 테스트한 브라우저 (예: Chrome 버전 50, Chrome 버전 51, Firefox) 버전 50, Firefox 버전 51).
  • 문제를 보여주는 PushSubscription의 예입니다.
  • 예시 요청 포함 (푸시에 대한 네트워크 요청의 내용 서비스(헤더 포함)를 사용합니다.
  • 네트워크 요청의 응답 예시도 포함합니다.

재현 가능한 예시(소스 코드 또는 호스팅된 웹)를 제공할 수 있는 경우 문제를 진단하고 해결하는 데 도움이 되는 경우가 많습니다.

다음에 수행할 작업

Codelab