Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 672e4fa

Browse filesBrowse 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
Copy full SHA for 672e4fa

File tree

2 files changed

+22
-5
lines changed
Filter options

2 files changed

+22
-5
lines changed

‎libraries/WebServer/src/WebServer.cpp

Copy file name to clipboardExpand all lines: libraries/WebServer/src/WebServer.cpp
+15-2Lines changed: 15 additions & 2 deletions
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 "";

‎libraries/WebServer/src/WebServer.h

Copy file name to clipboardExpand all lines: libraries/WebServer/src/WebServer.h
+7-3Lines changed: 7 additions & 3 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.