how to remove a double-slash in url
phatpaul opened this issue · 4 comments
Some modern webservers will automatically ignore a double-slash
in the URL. (i.e. http://192.168.1.79//min.json is equivalent to http://192.168.1.79/min.json)
(see https://webmasters.stackexchange.com/questions/8354/what-does-the-double-slash-mean-in-urls )
How can I have the esphttpd server ignore the double-slash?
(without sending a redirect to the browser)
It should be possible to update the libesphttpd code to ignore the repeated slashes but I can't say I know where to look at updating that. Maybe someone else using the library can help out? Or you can submit a PR if you figure it out.
Dammit, I'm supposed to be working... Well, let's call it an early morning warm-up exercise.
diff --git a/core/httpd.c b/core/httpd.c
index b46eb00..ebfa38d 100644
--- a/core/httpd.c
+++ b/core/httpd.c
@@ -684,6 +684,15 @@ static CallbackStatus ICACHE_FLASH_ATTR httpdParseHeader(char *h, HttpdConnData
} else {
conn->getArgs=NULL;
}
+
+ // Remove multiple slashes in URL path.
+ while((e = strstr(conn->url, "//")) != NULL){
+ // Move string starting at second slash one place to the left.
+ // Use strlen() on the first slash so the '\0' will be copied too.
+ ESP_LOGD(TAG, "Cleaning up URL path: %s", conn->url);
+ memmove(e, e + 1, strlen(e));
+ ESP_LOGD(TAG, "Cleaned URL path: %s", conn->url);
+ }
} else if (strncasecmp(h, "Connection:", 11)==0) {
i=11;
//Skip trailing spaces
I do not know if altering the URL will break other things or confuse some clients, so maybe this should be a configurable compile time option. I will prepare a proper pull request tonight.
Tido
Thanks Tido!
That did the trick. Now I'm able to interface with an industrial device that (incorrectly?) requests files with multiple slashes.
I guess you should get to work now ;-)