문제

이 질문에 대해 웹을 검색했지만 아무것도 찾지 못했습니다.

뒤로 버튼의 논리는 무엇입니까? 웹 브라우저에서 뒤로 버튼을 누르면 어떻게됩니까?

나는 그것에 대해 더 많이 이해하고 싶습니다.

고맙습니다.

도움이 되었습니까?

해결책

웹 브라우저는 해당 창에서 방문한 웹 페이지의 스택 (또는 원인 경우 목록)을 유지합니다. 홈페이지가 Google.com이라고 가정 해 봅시다. 여기에서 YouTube.com, Yahoo.com 및 CNN.com을 방문하십시오. 마지막을 방문하면 목록이 다음과 같습니다.

google.com -> youtube.com -> yahoo.com -> cnn.com
                                            ^
                                            |
                                       current page

뒤로 버튼을 누르면 브라우저는 다음과 같이 목록의 이전 페이지로 돌아갑니다.

google.com -> youtube.com -> yahoo.com -> cnn.com
                                ^
                                |
                           current page

이 시점에서 다시 눌러 YouTube.com으로 데려가거나 앞으로 CNN.com에 다시 넣을 수 있습니다. 두 번째로 다시 누르라고 가정 해 봅시다.

google.com -> youtube.com -> yahoo.com -> cnn.com
                   ^
                   |
              current page

이제 ABC.com으로 가면 목록이 다음과 같이 변경됩니다.

google.com -> youtube.com -> abc.com
                               ^
                               |
                          current page

yahoo.com과 cnn.com은 모두 목록에서 사라졌습니다. 새로운 길을 택했기 때문입니다. 브라우저는 당신이 방문한 모든 페이지의 역사가 아니라 현재 위치에 도달하기 위해 방문한 페이지를 목록 만 유지합니다. 브라우저는 또한 방문하는 사이트의 구조에 대해 아무것도 알지 못하므로 놀라운 행동으로 이어질 수 있습니다.

당신은 쇼핑 사이트 (NE.com, 짧은 예)에 있습니다. 사이트 디자이너가 신중하게 제공했습니다 빵 부스러기 범주를 탐색 할 수 있도록 창 상단 근처에서. 사이트 상단 페이지에서 시작하여 하드웨어를 클릭 한 다음 메모리를 클릭하십시오. 목록은 이제 다음과 같습니다.

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem
                                           ^
                                           |
                                      current page

하드웨어 카테고리로 돌아가려면 빵 부스러기를 사용하여 뒤로 버튼을 사용하는 대신 부모 범주로 올라갑니다. 이제 브라우저 목록은 다음과 같습니다.

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
                                                          ^
                                                          |
                                                     current page

사이트 구조에 따르면, 당신은 뒤로 갔다 (레벨 위로) 그러나 브라우저로 링크를 클릭했기 때문에 앞으로 나아 갔다. 주소 표시 줄에서 링크를 클릭하거나 URL을 입력 할 때마다 링크가 이미 가본 페이지로 이동하는지 여부에 관계없이 브라우저에 관한 한 앞으로 나아갈 것입니다.

마지막으로 기본 사이트 페이지 (NE.com)로 돌아가고 싶습니다. 빵 부스러기를 사용할 수 있지만 이번에는 뒤로 버튼을 클릭합니다. 한 레벨을 올라가야하는 것이 분명해 보입니다. 하지만 어디에 데려가나요?

처음에는 많은 사용자들 (정확히 이것을 포함 할 때 포함)에게 혼란스러워서 메모리 카테고리로 다시 "레벨을 낮추는"데 따릅니다. 페이지 목록을 살펴보면 이유를 쉽게 알 수 있습니다.

google.com -> ne.com -> ne.com/hw -> ne.com/hw/mem -> ne.com/hw
                                            ^
                                            |
                                       current page

뒤로 버튼 만 사용하여 메인 페이지로 돌아가려면 두 번의 프레스가 더 필요하며 하드웨어 카테고리로 "다시", 마지막으로 메인 페이지로 가져갑니다. 미국 프로그래머에게는 무슨 일이 일어나고 있는지 분명히 보이지만, 브라우저가 자신이있는 웹 사이트의 계층 구조에 대해 아무것도 알지 못한다는 것을 깨닫지 못하기 때문에 항상 일반 사용자의 도대체를 놀라게합니다.

브라우저가 사이트 디자이너가 백 버튼을 프로그래밍하여 지금하는 것이 아니라 명백한 일 (레벨을 올리면)을 할 수있게되면 좋을까요?

편집 : 댓글 작성자는 브라우저가 페이지를 다시로드하는지 또는 단순히 로컬 캐시에 표시하는지 여부를 물었습니다.

대답은 그것이 달라집니다. 사이트 디자이너는 브라우저가 페이지를 캐시 해야하는지 여부를 지정할 수 있습니다. 비 캐싱으로 설정된 페이지의 경우 브라우저는 처음 방문한 것처럼 다시 누르면 서버에서 페이지를 다시로드합니다. 캐시 된 페이지의 경우 브라우저가 캐시에 표시되어 훨씬 빠릅니다.

다른 팁

마지막 요청을 다시 발행하는 것으로 생각하고 싶습니다. 간단한 Get을 수행하면 지난번에 동일한 일을 반환 할 것입니다 (동적 컨텐츠를 제외). 게시물을 수행 한 경우, 확인 후 (확인 후) 양식을 서버로 다시 제출할 것입니다.

기본 아이디어는 마지막 페이지 또는 논리 사이트 부서로 돌아가는 것입니다.

Gmail을 보면 검색을 수행하고 메시지를 클릭 한 다음 뒤로 버튼을 누르면 검색 한 검색으로 돌아갑니다.

대부분의 브라우저에서 클릭하면 마지막 HTTP 요청을 재판매하거나 브라우저가 사이트를 캐시하는 경우 캐시를로드합니다.

이것을 설명하는 가장 쉬운 방법은 의사 코드에 있습니다.

class Page:
    String url, ...
    Page previous, next # implements a doubly-linked list

class History:
    Page current # current page

    void back():
        if current.previous == null:
            return
        current = current.previous
        refresh()

    void forward():
        if current.next == null:
            return
        current = current.next
        refresh()

    void loadPage(Page newPage):
        newPage.previous = current
        current.next = newPage # remove all the future pages
        current = current.next
        display(current)

본 페이지의 기록은 스택과 같은 형태로 유지됩니다. 상단 3 페이지 (A, B, C 등)를 "POP"한 다음 다른 페이지 D로 이동하면 앞으로 닿아 B에 다시 얻을 수 없습니다.

DevOloper로서 브라우저가 뒤로 버튼을 처리하는 방법에 관계없이 WebApp이 작동하는지 확인해야합니다. :-) 요청을 재현합니까? 새 요청이 이전 요청과 동일합니까, 아니면 어떤 식 으로든 다른 요청입니까? 브라우저는 사용자에게 재 포스트를 확인하도록 요청합니까? 페이지의 어떤 요소가 다시 반복 될 것이며 캐시에서로드 된 것은 무엇입니까? 브라우저가 내 캐시 제어 헤더를 존중합니까?

이 질문에 대한 답변은 Browser 버전 및 사용자 설정에 따라 다릅니다. 이 모든 것이 중요하지 않도록 소프트웨어를 디자인하십시오.

매우 직접적인 답변에 대해 죄송하지만 이미 여기에는 몇 가지 똑바로 답이 있습니다.

브라우저는 항상 기억을 위해 페이지를 저장했으며 뒤로 버튼을 누르면 이전 페이지에 대한 요청을 서버로 보내지 않으면 페이지가 저장된 위치에 캐시가 표시되고 Lifo 규칙을 따르는 이유는 그 이유입니다. 우리가 마지막으로 열린 뒤로 버튼을 누르면 먼저 그 페이지를 줘

브라우저는 현재보기 전에 마지막으로 본 페이지를로드 한 다음 발생할 수있는 리디렉션을 따릅니다.

나는 질문의 요점을 놓치고있는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top