Skip to content

Commit 672e4fa

Browse files
vicatcume-no-dev
authored andcommitted
Add optional support for CORS headers (espressif#2688)
* add support for CORS headers * remove accidental function impl * rename setCORS to enableCORS, and add aliased function enableCrossOrigin
1 parent f8eebb5 commit 672e4fa

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

Diff for: libraries/WebServer/src/WebServer.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ WebServer::WebServer(IPAddress addr, int port)
5555
, _currentHeaders(nullptr)
5656
, _contentLength(0)
5757
, _chunked(false)
58+
, _corsEnabled(false)
5859
{
5960
}
6061

@@ -75,6 +76,7 @@ WebServer::WebServer(int port)
7576
, _currentHeaders(nullptr)
7677
, _contentLength(0)
7778
, _chunked(false)
79+
, _corsEnabled(false)
7880
{
7981
}
8082

@@ -104,7 +106,7 @@ void WebServer::begin(uint16_t port) {
104106

105107
String WebServer::_extractParam(String& authReq,const String& param,const char delimit){
106108
int _begin = authReq.indexOf(param);
107-
if (_begin == -1)
109+
if (_begin == -1)
108110
return "";
109111
return authReq.substring(_begin+param.length(),authReq.indexOf(delimit,_begin+param.length()));
110112
}
@@ -366,6 +368,14 @@ void WebServer::setContentLength(const size_t contentLength) {
366368
_contentLength = contentLength;
367369
}
368370

371+
void WebServer::enableCORS(boolean value) {
372+
_corsEnabled = value;
373+
}
374+
375+
void WebServer::enableCrossOrigin(boolean value) {
376+
enableCORS(value);
377+
}
378+
369379
void WebServer::_prepareHeader(String& response, int code, const char* content_type, size_t contentLength) {
370380
response = String(F("HTTP/1.")) + String(_currentVersion) + ' ';
371381
response += String(code);
@@ -388,6 +398,9 @@ void WebServer::_prepareHeader(String& response, int code, const char* content_t
388398
sendHeader(String(F("Accept-Ranges")),String(F("none")));
389399
sendHeader(String(F("Transfer-Encoding")),String(F("chunked")));
390400
}
401+
if (_corsEnabled) {
402+
sendHeader(String(FPSTR("Access-Control-Allow-Origin")), String("*"));
403+
}
391404
sendHeader(String(F("Connection")), String(F("close")));
392405

393406
response += _responseHeaders;
@@ -494,7 +507,7 @@ void WebServer::_streamFileCore(const size_t fileSize, const String & fileName,
494507
send(200, contentType, "");
495508
}
496509

497-
String WebServer::pathArg(unsigned int i) {
510+
String WebServer::pathArg(unsigned int i) {
498511
if (_currentHandler != nullptr)
499512
return _currentHandler->pathArg(i);
500513
return "";

Diff for: libraries/WebServer/src/WebServer.h

+7-3
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ class WebServer
122122
void send_P(int code, PGM_P content_type, PGM_P content);
123123
void send_P(int code, PGM_P content_type, PGM_P content, size_t contentLength);
124124

125+
void enableCORS(boolean value = true);
126+
void enableCrossOrigin(boolean value = true);
127+
125128
void setContentLength(const size_t contentLength);
126129
void sendHeader(const String& name, const String& value, bool first = false);
127130
void sendContent(const String& content);
@@ -130,12 +133,12 @@ class WebServer
130133

131134
static String urlDecode(const String& text);
132135

133-
template<typename T>
136+
template<typename T>
134137
size_t streamFile(T &file, const String& contentType) {
135138
_streamFileCore(file.size(), file.name(), contentType);
136139
return _currentClient.write(file);
137140
}
138-
141+
139142
protected:
140143
virtual size_t _currentClientWrite(const char* b, size_t l) { return _currentClient.write( b, l ); }
141144
virtual size_t _currentClientWrite_P(PGM_P b, size_t l) { return _currentClient.write_P( b, l ); }
@@ -151,7 +154,7 @@ class WebServer
151154
int _uploadReadByte(WiFiClient& client);
152155
void _prepareHeader(String& response, int code, const char* content_type, size_t contentLength);
153156
bool _collectHeader(const char* headerName, const char* headerValue);
154-
157+
155158
void _streamFileCore(const size_t fileSize, const String & fileName, const String & contentType);
156159

157160
String _getRandomHexString();
@@ -163,6 +166,7 @@ class WebServer
163166
String value;
164167
};
165168

169+
boolean _corsEnabled;
166170
WiFiServer _server;
167171

168172
WiFiClient _currentClient;

0 commit comments

Comments
 (0)