웹 브라우저의 뒤로 버튼은 어떻게 작동합니까?
-
19-09-2019 - |
문제
이 질문에 대해 웹을 검색했지만 아무것도 찾지 못했습니다.
뒤로 버튼의 논리는 무엇입니까? 웹 브라우저에서 뒤로 버튼을 누르면 어떻게됩니까?
나는 그것에 대해 더 많이 이해하고 싶습니다.
고맙습니다.
해결책
웹 브라우저는 해당 창에서 방문한 웹 페이지의 스택 (또는 원인 경우 목록)을 유지합니다. 홈페이지가 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 규칙을 따르는 이유는 그 이유입니다. 우리가 마지막으로 열린 뒤로 버튼을 누르면 먼저 그 페이지를 줘
브라우저는 현재보기 전에 마지막으로 본 페이지를로드 한 다음 발생할 수있는 리디렉션을 따릅니다.
나는 질문의 요점을 놓치고있는 것 같습니다.