7

Tôi đang cố gắng bảo vệ trang web trong giai đoạn phát triển sớm từ đôi mắt tò mò thông thường. Cơ bản auth qua HTTPS có vẻ như một giải pháp hợp lý nhưng sự hiện diện của một serviceworker dường như ngăn nó hoạt động trong Chrome. Điều này xảy ra cụ thể nếu một serviceworker đã được cài đặt, nhưng trình duyệt không có một ủy quyền hoạt động cho lĩnh vực mong muốn.Xung đột dịch vụ xung đột với auth cơ bản HTTP?

Chrome cho thấy câu trả lời là một 401 trong timeline mạng

401 in Network timeline

Và cũng cho thấy rằng các tab trình duyệt đang nhận các tiêu đề phản ứng ngay:

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Basic realm="My realm" 
Date: Tue, 21 Jun 2016 03:09:35 GMT 
Connection: close 
Cache-Control: no-cache 

Nhưng nó không nhắc đăng nhập, nó chỉ hiển thị nội dung của phản hồi 401.

Đây có phải là lỗi của Chrome hoặc có khả năng là sự cố với ServiceWorker của tôi không?

+0

như thế nào Chrome biết để gửi header auth với yêu cầu nhân viên dịch vụ? –

+0

@RickViscomi serviceworker không, nhưng tab nên, phải không? SW phải là một hộp giữa không quan trọng trong quá trình này, đó là những gì tôi giả định. – Andrew

Trả lời

0

Điều này là do một fetch() tùy chọn may mặc định là 'omit' credentials. Bạn cần phải fetch() với {'credentials': 'same-origin'}. Xem cho số GitHub pull request.

Hiện tại nếu bạn đang sử dụng add() hoặc addAll(), bạn sẽ cần chuyển đối tượng yêu cầu.

Ví dụ:

cache.addAll(
    cacheUrls.map(url => new Request(url, {credentials: 'same-origin'})) 
);