[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lwip-devel] [bug #58223] Web server returns HTTP status code 200 instea
From: |
Marco Lazzaroni |
Subject: |
[lwip-devel] [bug #58223] Web server returns HTTP status code 200 instead of 404 when LWIP_HTTPD_DYNAMIC_HEADER is enabled |
Date: |
Tue, 21 Apr 2020 16:31:34 -0400 (EDT) |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 |
URL:
<https://savannah.nongnu.org/bugs/?58223>
Summary: Web server returns HTTP status code 200 instead of
404 when LWIP_HTTPD_DYNAMIC_HEADER is enabled
Project: lwIP - A Lightweight TCP/IP stack
Submitted by: marcolazzaroni
Submitted on: Tue 21 Apr 2020 08:31:33 PM UTC
Category: apps
Severity: 3 - Normal
Item Group: Faulty Behaviour
Status: None
Privacy: Public
Assigned to: None
Open/Closed: Open
Discussion Lock: Any
Planned Release: None
lwIP version: git head
_______________________________________________________
Details:
As per object, I get a HTTP 200 status code when doing a GET of a missing
page.
LWIP version is last release got with git clone.
I have prepared a 404.html page with this source code:
<!DOCTYPE html>
<html>
<head>
<title>404 Not Found</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf8">
</head>
<body>
<h1>404 Not Found</h1>
</body>
</html>
In my lwipopts.h I have
#define LWIP_HTTPD_DYNAMIC_HEADERS 1
I generate the fsdata_custom.c file with
makefsdata html -e -f:fsdata_custom.c
(so the headers are not included twice)
What I get when doing a GET of a missing page is wrong (it returns HTTP 200
status code):
lavoro@saiga:~$ curl -i http://192.168.1.9/any_missing_page.html
HTTP/1.0 200 OK
Server: lwIP/2.2.0d (http://savannah.nongnu.org/projects/lwip)
Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<title>404 Not Found</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf8">
</head>
<body>
<h1>404 Not Found</h1>
</body>
</html>
If I set LWIP_HTTPD_DYNAMIC_HEADERS to 0 and generate fsdata_custom.c removing
the -e switch (makefsdata html -e -f:fsdata_custom.c), the response is
correct:
lavoro@saiga:~$ curl -i http://192.168.1.9/any_missing_page.html
HTTP/1.0 404 File not found
Server: lwIP/1.3.1 (http://savannah.nongnu.org/projects/lwip)
Content-type: text/html
<!DOCTYPE html>
<html>
<head>
<title>404 Not Found</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf8">
</head>
<body>
<h1>404 Not Found</h1>
</body>
</html>
I suppose that the problem is that, with LWIP_HTTPD_DYNAMIC_HEADERS at 1, this
piece of code in get_http_headers()
if (strstr(uri, "404.") == uri) {
hs->hdrs[HDR_STRINGS_IDX_HTTP_STATUS] =
g_psHTTPHeaderStrings[HTTP_HDR_NOT_FOUND];
}
...does not behave as expected because while debugging I saw that uri equals
"/404.html" and not "404.html", so the if condition is not true. I think that
changing that line to
if (strstr(uri, "/404.") == uri) {
(and the same for 400 an 501) would be enough; I've tested and it works:
lavoro@saiga:~$ curl -i http://192.168.1.9/any_missing_page.html
HTTP/1.0 404 File not found
Server: lwIP/2.2.0d (http://savannah.nongnu.org/projects/lwip)
Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<title>404 Not Found</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf8">
</head>
<body>
<h1>404 Not Found</h1>
</body>
</html>
but I'm not sure whether is correct in all possible cases (I mean, all the
possible #define combinations supported by LWIP).
_______________________________________________________
Reply to this item at:
<https://savannah.nongnu.org/bugs/?58223>
_______________________________________________
Message sent via Savannah
https://savannah.nongnu.org/
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lwip-devel] [bug #58223] Web server returns HTTP status code 200 instead of 404 when LWIP_HTTPD_DYNAMIC_HEADER is enabled,
Marco Lazzaroni <=