-
-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Avoid redirect loop in HTTPSRedirect middleware #1058
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
In HTTPSRedirect and similar middlewares, determining if redirection is needed using `c.IsTLS()` causes redirect loop when an application is running behind a TLS termination proxy, e.g. AWS ELB. Instead, I believe, redirection should be determined by `c.Scheme() != "https"`. This works well even behind a TLS termination proxy.
Codecov Report
@@ Coverage Diff @@
## master #1058 +/- ##
==========================================
+ Coverage 78.87% 78.92% +0.05%
==========================================
Files 27 27
Lines 1879 1879
==========================================
+ Hits 1482 1483 +1
+ Misses 283 282 -1
Partials 114 114
Continue to review full report at Codecov.
|
@orangain If we move https://github.com/labstack/echo/blob/master/context.go#L233 to the bottom it should work? |
@vishr I don't think a position of the if statement affects behavior of redirection. Could you please explain what you concern? |
@orangain You are right! |
@orangain thanks for your contribution. |
When will this be released? It's been almost 30 days since this was merged. Great project! Thanks for all the hard work! |
Enhancements: Implemented Response#After() Dynamically add/remove proxy targets Rewrite rules for proxy middleware Add ability to extract key from a form field Implemented rewrite middleware Adds a separate flag for the 'http/https server started on' message (#1043) Applied a little DRY to the redirect middleware (#1053) and tests (#1055) Simplify dep fetching (#1062) Add custom time stamp format #1046 (#1066) Update property name & default value & comment about custom logger Add X-Requested-With header constant Return error of context.File in c.contentDisposition Updated deps Updated README.md Fixes: Fixed Response#Before() Fixed #990 Fix href url from armor to echo (#1051) Fixed #1054 Fixed #1052, dropped param alias feature Avoid redirect loop in HTTPSRedirect middleware (#1058) Fix deferring body close in middleware/compress test (#1063) Cleanup code (#1061) FIX - We must close gzip.Reader, only if no error (#1069) Fix formatting (#1071) Can be a fix for auto TLS
In HTTPSRedirect and similar middlewares, determining if redirection is needed using
c.IsTLS()
causes redirect loop when an application is running behind a TLS termination proxy, e.g. AWS ELB.This is because
c.IsTLS()
always returnsfalse
behind a TLS termination proxy even when a client connects with TLS.Instead, I believe, redirection should be determined by
c.Scheme() != "https"
. This works well even behind a TLS termination proxy thanks to aX-Forwarded-Proto
header the proxy sets.