2011-09-19 8 views
1

이 제대로 모든 연결이 HTTP가 아닌 HTTPS 프로토콜을 사용하여 강제로

ASP.Net

에 전달 POST 변수에 대한되는으로 Request.Form 데이터를 보관하는 방법, 나는
If Not Request.IsSecureConnection Then 
      Response.Redirect("https://" & Request.ServerVariables("HTTP_HOST") + Request.RawUrl) 
End If 
을 Global.asax에

에 다음 코드를 삽입

POST를 사용하여 제출 된 양식이 나올 때까지 위의 방법을 사용하면 양식 검색 프로세스가 중단됩니다.

예 : 웹 페이지가 http://abc.com/page1.aspx입니다.이 페이지는 POST 양식 데이터 만 허용합니다. 이제 응용 프로그램이 https로 리디렉션되도록 지정하면 페이지가 올바르게 https://abc.com/page1.aspx으로 리디렉션됩니다. 그러나 모든 양식 데이터가 손실됩니다.

저장할 수 있고 Request.Form 데이터를 전달할 수있는 방법이 있습니까 ??

답변

1

HTTP 307 상태 코드와 거의 같습니다. 대신 302

(307 개) 수단 리디렉션하는 HTTP의 HTTP 307 상태로 리디렉션 고려하고, 게시 된 데이터 다시 제출 할 수 있습니다 :이 경우에

을, 요청이 서로 반복해야합니다 URI이지만 이후 요청에서도 원래 URI를 사용할 수 있습니다. [2] 303과 달리 원래 요청을 다시 발행 할 때 요청 메소드를 변경해서는 안됩니다. 예를 들어 는 POST 요청은 다른 POST 요청 Reference

ASP.NET에서 할 수있는 쉬운 방법이 더 슈퍼 없습니다를 사용하여 반복해야하지만 중 하나 어렵지 않다. 예를 들어 :

Response.StatusCode = 307; 
Response.Status = "307 Temporary Redirect"; 
Response.AddHeader("Location","http://www.new-url.com"); 

는 다른 방법으로, 당신은뿐만 아니라 Server.Transfer(string)를 사용할 수 있습니다. Phil Haack은 그 설명을 here이라고합니다. 그것은 당신을위한 더 간단한 선택 일 수 있습니다.

0
Sub Session_OnStart 
    If UCase(Request.ServerVariables("HTTPS")) = "OFF" Then 
     sRedirect = "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("PATH_INFO") & "?" & Request.Querystring 
     Response.Redirect sRedirect 
    End if 
END Sub 

위의 내용을 global.asa 또는 global.asax에 추가하십시오.