Czym jest CORS?
CORS (Cross-Origin Resource Sharing) to mechanizm, który umożliwia bezpieczne udostępnianie zasobów między stronami internetowymi pochodzącymi z różnych domen.
Należy pamiętać że 192.168.0.1/ oraz 192.168.0.1/endpoint to dwie różne domeny i po próbie wysłania czegoś z klienta(przeglądarki) na endpoint serwera(esp-ka) napotkacie się na błąd CORS.
W nomenklaturze frameworku Arduino problem ten można rozwiązać po prostu wywołując na instancji serwera metodę server.enableCORS(true), przed jego uruchomieniem(co wygooglujecie w minutę). Zauważycie wtedy że lecą jakieś dziwne requesty HTTP_OPTIONS, serwer odpowie jakimiś dziwnymi nagłówkami ale to zignorujecie bo wszystko będzie działać. I dobrze.
W esp-idf musicie te wszystkie rzeczy obsłużyć sami. Przed próbą wysłania HTTP_POST na serwer, przeglądarka wyśle na Wasz endpoint 192.168.0.1/endpoint zapytanie HTTP_OPTIONS na które musicie odpowiedzieć. Wystarczy umieścić w odpowiedzi 3 headery. Przykładowy handler obsługujący corsa.
static esp_err_t cors_handler(httpd_req_t *req)
{
ESP_LOGI(TAG,"OPTIONS cors handler");
httpd_resp_set_hdr(req,"Access-Control-Allow-Headers","*");
httpd_resp_set_hdr(req,"Access-Control-Allow-Origin","*");
httpd_resp_set_hdr(req,"Access-Control-Allow-Methods","*");
httpd_resp_send(req,"",HTTPD_RESP_USE_STRLEN);
return ESP_OK;
}
<br />Dopiero po tej odpowiedzi przyjdzie właściwe zapytanie typu POST z danymi, które chcecie obsłużyć. Jak pod wpisem będzie 5 piorunów do napisze minimalistyczną apke(przykład) która będzie hostowała jakąś stronkę zbierającą dane i wysyłającą je do esp-ka
#programowanie #elektronika #raspberrypi
![23991c85-70cd-4ada-8c47-7064673c0e33](https://cdn.hejto.pl/uploads/posts/images/1200x900/4d0f197fbbecb5239f1c9297f9dc96b8.png)