When a file upload ends in \r\n (i.e. a Windows formatted text file) the sequence of bytes on the wire is `\r\n\r\n----...boundary-marker...`. When the FSM in Webserver was evaluating the stream, that 2nd `\r` would be written as valid data and the FSM parser would be reset and see `\n` as the 1st character, which wouldn't match. This would a) add an extra `\r` to uploaded files, and b) cause uploads to hang. Fix by checking on a header FSM mismatch if the next character input could possibly match our marker, and if so handle it properly. Fixes #7803
ESP8266 Web Server
The WebServer class found in ESP8266WebServer.h
header,
is a simple web server that knows how to handle HTTP requests such as
GET and POST and can only support one simultaneous client.
Usage
Class Constructor
(80); ESP8266WebServer server
Creates the ESP8266WebServer class object.
Parameters:
host IP address: IPaddress addr
(optional)
host port number: int port
(default is the standard HTTP
port 80)
Basic Operations
Starting the server
void begin();
Handling incoming client requests
void handleClient();
Disabling the server
void close();
void stop();
Both methods function the same
Client request handlers
void on();
void addHandler();
void onNotFound();
void onFileUpload();
Example:
.on("/", handlerFunction);
server.onNotFound(handlerFunction); // called when handler is not assigned
server.onFileUpload(handlerFunction); // handle file uploads server
Sending responses to the client
void send();
void send_P();
Parameters:
code
- HTTP response code, can be 200
or
404
, etc.
content_type
- HTTP content type, like
"text/plain"
or "image/png"
, etc.
content
- actual content body
Advanced Options
Getting information about request arguments
const String & arg();
const String & argName();
int args();
bool hasArg();
arg
- get request argument value, use
arg("plain")
to get POST body
argName
- get request argument name
args
- get arguments count
hasArg
- check if argument exist
Getting information about request headers
const String & header();
const String & headerName();
const String & hostHeader();
int headers();
bool hasHeader();
header
- get request header value
headerName
- get request header name
hostHeader
- get request host header if available, else
empty string
headers
- get header count
hasHeader
- check if header exist
Authentication
bool authenticate();
void requestAuthentication();
authenticate
- server authentication, returns true if
client is authenticated else false
requestAuthentication
- sends authentication failure
response to the client
Example Usage:
if(!server.authenticate(username, password)){
.requestAuthentication();
server}
Other Function Calls
const String & uri(); // get the current uri
(); // get the current method
HTTPMethod method& client(); // get the current client
WiFiClient & upload(); // get the current upload
HTTPUpload void setContentLength(); // set content length
void sendHeader(); // send HTTP header
void sendContent(); // send content
void sendContent_P();
void collectHeaders(); // set the request headers to collect
void serveStatic();
size_t streamFile();
For code samples enter here .