programing

Server.Transfer vs.대답.리다이렉트

cafebook 2023. 4. 23. 11:27
반응형

Server.Transfer vs.대답.리다이렉트

「 」의 입니까?Server.Transfer ★★★★★★★★★★★★★★★★★」Response.Redirect

  • 각각의 장점과 단점은 무엇입니까?
  • 어느 쪽이 다른 쪽보다 적절한가요?
  • 적절하지 않은 때는?

Response.Redirect는 단순히 메시지(HTTP 302)를 브라우저에 송신합니다.

Server.Transfer브라우저가 아무것도 모르는 사이에 브라우저가 페이지를 요구하지만 서버는 다른 내용을 반환합니다.

Response.Redirect()새 페이지로 이동하여 주소 표시줄을 업데이트하고 브라우저 기록에 추가합니다.브라우저에서 뒤로를 클릭할 수 있습니다.

Server.Transfer()는 주소 표시줄을 변경하지 않습니다.반격할 수 없습니다.

용 i i i i를 쓴다.Server.Transfer()에 표시되는 경우."로드" 페이지에 입력되는 경우가 있습니다.

않으면 이 말을 사용합니다.Response.Redirect().

★★★★★★★★★★★★★★★★★★★★★:Response.Redirect는 브라우저에 다른 페이지를 방문하도록 지시합니다. Server.Transfer는 서버 요구를 줄이고 URL을 동일하게 유지하며 약간의 버그 배싱을 통해 쿼리 문자열과 폼 변수를 전송할 수 있습니다.

가 발견하여 동의한 사항(출처:

Server.Transfer는, 다음과 같은 문장으로 사용자를 다른 페이지로 송신하는 것과 비슷합니다.Server.Transfer("WebForm2.aspx")그러나 이 성명에는 많은 뚜렷한 장점과 단점이 있습니다.

이 페이지를 다른 하기 위해서, 이 페이지를 사용하세요.Server.Transfer는 서버 자원을 절약합니다.브라우저에 리디렉션하도록 지시하는 대신 웹 서버의 "포커스"를 변경하고 요청을 전송합니다.되지 않기 웹에 대한 되고 응용 속도가.

「되고 있는 할 수 에, 「다」, 「다」, 「다」, 「다」, 「다」, 「는 사용할 수 없습니다.Server.Transfer사용자를 외부 사이트로 보냅니다.만.Response.Redirect아, 아, 아, 아, 아, 아, 아, 아, 아.

번째, ㅇㅇㅇㅇㅇ,Server.TransferURL을 사용합니다.이를 통해 데이터 입력 기술을 합리화할 수 있지만 디버깅 시 혼란을 초래할 수 있습니다.

그뿐만이 아닙니다.Server.Transfer method에는 번째 "method "preserveForm" 가 .을 「」로 .True 하다, 하다, 하다, 하다와 Server.Transfer("WebForm2.aspx", True)전송처의 페이지에서는, 기존의 쿼리 문자열과 임의의 폼 변수를 사용할 수 있습니다.

들어 True로 "TextBox1"을 참조하여 수 다음을 참조하여 원본 페이지 TextBox 컨트롤의 값을 검색할 수 있습니다.Request.Form("TextBox1").

Response.Redirect()다음 경우에 사용합니다.

  • 서버상의 몇 개의 플레인 HTML 페이지 또는 다른 웹 서버로 요청을 리다이렉트하고 싶습니다.
  • 각 요청에 따라 서버에 추가 라운드 트립을 발생시키는 것은 신경쓰지 않습니다.
  • 원래 요청에서 쿼리 문자열과 폼 변수를 보존할 필요가 없습니다.
  • 사용자가 브라우저로 리다이렉트되는 새로운 리다이렉트 URL을 볼 수 있도록 하고(필요한 경우 북마크할 수 있도록 합니다)

Server.Transfer()다음 경우에 사용합니다.

  • 현재 페이지 요청을 같은 서버의 다른 .aspx 페이지로 전송하고 싶습니다.
  • 서버 자원을 보존해, 서버에의 불필요한 라운드 트립을 회피하고 싶다.
  • 쿼리 문자열과 폼 변수를 보존하고 싶다(옵션).
  • 사용자 웹 브라우저에서 요청을 리디렉션한 실제 URL을 표시할 필요가 없습니다.

대답.첫 페이지가 클라이언트에 도착한 후 페이지를 다른 페이지로 리디렉션합니다.클라이언트는 리다이렉션을 알고 있습니다.

Server.Transfer는 페이지의 현재 실행을 종료합니다.클라이언트가 리다이렉션을 인식할 수 없습니다.쿼리 문자열과 폼 변수를 전송할 수 있습니다.

따라서 어떤 것이 더 나은지를 선택하는 것은 당신의 필요에 달려 있습니다.

여기에 이미지 설명 입력

"response.transfer" 및 "server.transfer"를 사용하면 페이지 실행 중에 사용자를 한 페이지에서 다른 페이지로 전송할 수 있습니다.그러나 이 전송/리다이렉트 방법은 매우 다릅니다.

만약 당신이 시각적인 남자이고 이론이 아닌 데모를 보고 싶다면 아래의 페이스북 비디오를 보는 것이 좋습니다.

https://www.facebook.com/photo.php?v=762186150488997

이들의 주된 차이점은 누가 전근을 하느냐이다.response.redirect에서는 브라우저에 의해 전송이 이루어지며, server.transfer에서는 서버에 의해 전송이 이루어집니다.우리는 이 진술을 좀 더 자세히 이해하도록 노력하자.

「서버」에서.전송"은 전송의 순서를 나타냅니다.

1. 사용자가 ASP에 요청을 보냅니다.NET 페이지아래 그림에서 요청은 "WebForm1"로 전송되며 "WebForm2"로 이동합니다.

2. 서버가 "Webform1" 실행을 시작하고 페이지의 라이프 사이클이 시작됩니다.그러나 페이지의 전체 수명 주기가 완료되기 전에 "WebForm2"에 "Server.transfer"가 발생합니다.

3"Webform2" 페이지 오브젝트가 작성되고 전체 페이지 라이프 사이클이 실행되며 출력 HTML 응답이 브라우저로 전송됩니다.

여기에 이미지 설명 입력

'Response'에 있는 동안.리다이렉트"는 네비게이션 이벤트 시퀀스입니다.-

1. 클라이언트(브라우저)가 페이지에 요청을 보냅니다.아래 그림에서 요청은 "WebForm1"로 전송되며 "WebForm2"로 이동합니다.

2. "Webform1"의 라이프 사이클이 실행됩니다.그러나 라이프 사이클의 중간에는 "응답"이 있습니다.리다이렉트'가 발생합니다.

3. 서버가 리다이렉트를 실행하는 대신 브라우저에 HTTP 302 명령을 보냅니다.이 명령어는 브라우저에 "Webform2.aspx" 페이지에 대한 GET 요청을 시작해야 함을 알려줍니다.

4. 브라우저는 302 명령을 해석하여 "Webform2.aspx"에 대한 GET 요청을 전송합니다.

여기에 이미지 설명 입력

즉, 「서버」입니다.전송은 "응답" 중에 서버에 의해 실행됩니다.Redirect"는 브라우저에 의해 실행됩니다."응답하라.페이지의 리다이렉트를 실시하려면 , 2개의 요구에 리다이렉트 할 필요가 있습니다.

"Server"를 사용할 때.전송" 및 "응답"을 사용할 시기를 지정합니다.리다이렉트"?

「서버」를 사용합니다.전송"은 동일한 서버에 있는 페이지를 탐색하려면 "응답"을 사용하십시오.다른 서버 및 도메인에 있는 페이지 사이를 이동하려는 경우 리디렉션"을 클릭합니다.

여기에 이미지 설명 입력

다음 표는 차이점과 사용 시나리오에 대해 요약한 것입니다.

여기에 이미지 설명 입력

서버의 장점전송은 다음과 같이 수행할 수 있습니다.

TextBox myTxt = (TextBox)this.Page.PreviousPage.FindControl("TextBoxID");

서버를 사용하는 한 위의 방법을 사용하여 이전 페이지에서 원하는 정보를 얻을 수 있습니다.전송하지만 응답이 없습니다.리다이렉트

ScarletGarden의 코멘트 외에 검색 엔진과 리다이렉트의 영향도 고려해야 합니다.이 페이지는 영구적으로 이동했습니까?일시적으로요?그게 차이를 만들어.

'응답'을 참조하십시오.리다이렉트 대 "301 영구 이동":

우리 모두 Response를 사용했어요.리다이렉트 합니다.방문객이 잘못된 장소에 도착했을 때 올바른 방향을 가리키도록 하는 빠르고 쉬운 방법입니다.하지만 당신은 그 응답을 알고 있었나요?"301 영구 이동"을 전송하려는 경우 "302 발견됨" HTTP 응답 상태 코드를 전송합니다.

그 차이는 작아 보이지만, 경우에 따라서는 실제로 큰 차이를 만들 수 있습니다.예를 들어 "301 영구적으로 이동" 응답 코드를 사용하는 경우 대부분의 검색 엔진은 색인에서 오래된 링크를 제거하고 새 링크로 교체합니다."302 Found"를 사용하면 이전 페이지로 계속 돌아갑니다.

을 사용법하다Response.Redirect()는, 가 아닌 하기 할 수 .Server.Transfer()는, 애플리케이션내의 유저를 리다이렉트 하기 위해서만 사용할 수 있습니다.

//This will work.
Response.Redirect("http://www.google.com");

//This will not work.
Server.Transfer("http://www.google.com");

전송은 완전히 서버측입니다.클라이언트 주소 표시줄은 일정하게 유지됩니다.요청 간의 컨텍스트 전송에 대한 약간의 복잡성.페이지 핸들러의 플래시와 재기동에는 비용이 많이 들기 때문에, BeginRequest의 HttpModule 등 파이프라인에서의 전송을 조기에 실시합니다.MSDN 문서를 주의 깊게 읽고 HttpContext의 새로운 값을 테스트하여 이해하십시오.요청 - 특히 포스트백 시나리오에서 그렇습니다.우리는 보통 서버를 사용합니다.에러 시나리오의 전송.

리다이렉트는 302 상태 및 클라이언트 측 라운드 트립 응답으로 요구를 종료하고 (서버 퍼포먼스히트 수가 작음)내부적으로 예외를 수신한 후 클라이언트는 새로운 주소로 이동합니다.브라우저 주소 표시줄 및 이력 업데이트 등추가 왕복 비용은 클라이언트가 부담합니다.비용은 지연 시간에 따라 다릅니다.비즈니스에서는 예외 비용을 피하기 위해 자체 모듈을 작성하는 경우가 많습니다.

대답.리다이렉트는 서버로의 이동처 파악을 위한 추가 트립이 추가되기 때문에 비용이 많이 듭니다.

Server.Transfer는 더 효율적이지만 Url이 물리적으로 변경되지 않기 때문에 사용자에게 오해를 일으킬 수 있습니다.

내 경험상 성능 차이는 후자의 접근방식을 사용할 만큼 크지 않았다.

Server.Transfer는 클라이언트 브라우저의 URL을 변경하지 않으므로 브라우저는 사용자가 다른 서버측 핸들러로 변경되었음을 인식하지 못합니다.대답.리디렉션은 브라우저에 다른 페이지로 이동하도록 지시하므로 제목 표시줄의 URL이 변경됩니다.

Server.Transfer는 서버로의 1회 왕복이 필요 없기 때문에 조금 더 빠르지만, URL을 변경하지 않는 것이 어떤 작업을 수행하느냐에 따라 좋을 수도 있고 나쁠 수도 있습니다.

반응.리다이렉트: 요청된 페이지를 새 위치에서 찾을 수 있음을 브라우저에 알립니다.그런 다음 브라우저는 브라우저에 내용을 로드하는 새 페이지에 대한 다른 요청을 시작합니다.이로 인해 브라우저에 의해2개의 요구가 발생합니다.

Server.Transfer:서버의 첫 번째 페이지에서 두 번째 페이지로 실행을 전송합니다.브라우저 클라이언트에 관한 한 요청은 1개이며 첫 페이지는 콘텐츠로 응답하는 페이지입니다.이 접근방식의 장점은 클라이언트브라우저에서 서버로의 왕복이1회 줄어든다는 것입니다.또한 게시된 폼 변수 및 쿼리 문자열 매개 변수는 두 번째 페이지에서도 사용할 수 있습니다.

전송()에 대한 자세한 내용은 서버입니다.Execute() + 응답.End()의 소스 코드는 다음과 같습니다(Mono/.net 4.0).

public void Transfer (string path, bool preserveForm)
{
    this.Execute (path, null, preserveForm, true);
    this.context.Response.End ();
}

Execute()에서는 지정된 경로의 핸들러가 실행됩니다.를 참조해 주십시오.

ASP.NET은 현재 사용자가 Execute 메서드에 의해 제공된 리소스를 볼 수 있는 권한이 있는지 확인하지 않습니다.ASP이지만.NET 인가 및 인증 로직은 원래 리소스 핸들러가 ASP로 호출되기 전에 실행됩니다.NET은 Execute 메서드로 지정된 핸들러를 직접 호출하여 새로운 리소스에 대한 인증 및 인가 로직을 재실행하지 않습니다.응용 프로그램의 보안 정책에 따라 클라이언트가 리소스에 액세스할 수 있는 적절한 권한이 필요한 경우 응용 프로그램은 강제로 재인가를 수행하거나 사용자 지정 액세스 제어 메커니즘을 제공해야 합니다.

Execute 메서드 대신 Redirect 메서드를 사용하여 강제로 재인가를 수행할 수 있습니다.리디렉션은 브라우저가 새 리소스를 요청하는 클라이언트 측 리디렉션을 수행합니다.이 리다이렉트는 시스템에 들어가는 새로운 요구이기 때문에 Internet Information Services(IIS; 인터넷 정보 서비스)와 ASP의 모든 인증 및 인가 로직의 대상이 됩니다.NET 보안 정책

- MSDN에서

대답.리다이렉트에는 추가 라운드 트립이 포함되어 주소 표시줄이 업데이트됩니다.

Server.Transfer는 주소 표시줄을 변경하지 않습니다.서버는 다른 페이지의 콘텐츠로 요청에 응답합니다.

예.

대답.리다이렉트:-

  1. 클라이언트에서 브라우저는 http://InitiallyRequestedPage.aspx 페이지를 요구합니다.
  2. 서버에서는 리다이렉트주소 http://AnotherPage.aspx 를 건네주는 302 로 요구에 응답합니다.
  3. 클라이언트에서 브라우저는 http://AnotherPage.aspx 주소로 두 번째 요청을 합니다.
  4. 서버에서 http://AnotherPage.aspx 콘텐츠로 응답합니다.

Server.Transfer:-

  1. 클라이언트 브라우저에서 http://InitiallyRequestedPage.aspx 페이지가 요구됩니다.
  2. 서버 서버.http://AnotherPage.aspx로 전송
  3. 서버에서 http://AnotherPage.aspx에서 콘텐츠를 반환하는 http://InitiallyRequestedPage.aspx 요구에 대한 응답이 이루어집니다.

대답.리다이렉트

장점:- RESTful - 주소 표시줄을 변경합니다. 주소를 사용하여 요청 간의 상태 변화를 기록할 수 있습니다.

단점: - 저속 - 클라이언트와 서버 사이에 추가 라운드 트립이 있습니다.클라이언트와 서버 사이에 상당한 지연 시간이 있는 경우, 이 작업은 비용이 많이 들 수 있습니다.

Server.전송

장점: - 빠른.

단점: - 상태 손실 - 서버를 사용하는 경우.전송: 포스트백에 대한 응답으로 응용 프로그램 상태를 변경합니다. 페이지가 새로고침되면 주소 표시줄이 첫 번째 요청과 같기 때문에 해당 상태는 손실됩니다.

반응.리다이렉트 응답Redirect()는 새 페이지로 전송하여 주소 표시줄을 업데이트하고 브라우저 히스토리에 추가합니다.브라우저에서 뒤로를 클릭할 수 있습니다.서버상의 플레인 HTML 페이지 또는 다른 웹 서버로 요청을 리디렉션합니다.그러면 요청마다 서버에 대한 추가 라운드 트립이 발생합니다.원래 요청의 쿼리 문자열 및 양식 변수는 보존되지 않습니다.브라우저로 리디렉션된 새 URL을 볼 수 있습니다(필요한 경우 즐겨찾기에 추가할 수 있음).대답.리다이렉트는 메시지를 (HTTP 302) 브라우저로 전송하기만 하면 됩니다.

Server.Transfer Server.Transfer()는 주소 표시줄을 변경하지 않으므로 회신할 수 없습니다.서버를 사용해야 합니다.Transfer()는 사용자가 자신의 행선지를 보고 싶지 않은 경우에 사용합니다."로드" 유형 페이지에 표시됩니다.현재 페이지 요청을 동일한 서버상의 다른 .aspx 페이지로 전송합니다.서버 자원을 보존해, 서버에의 불필요한 라운드 트립을 회피합니다.쿼리 문자열 및 폼 변수(옵션)를 유지합니다.사용자 웹 브라우저에서 요청을 리디렉션하는 실제 URL은 표시되지 않습니다.서버.전송은 브라우저가 아무것도 인식하지 못하고 브라우저가 페이지를 요청하지만 서버는 다른 내용을 반환합니다.

언급URL : https://stackoverflow.com/questions/224569/server-transfer-vs-response-redirect

반응형