Kaynağa Gözat

Enable CORS, step 1

bel 11 yıl önce
ebeveyn
işleme
b5d6587e17
1 değiştirilmiş dosya ile 16 ekleme ve 3 silme
  1. 16 3
      src/civetweb.c

+ 16 - 3
src/civetweb.c

@@ -3477,7 +3477,8 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
     struct vec mime_vec;
     int n;
     char gz_path[PATH_MAX];
-    char const* encoding = "";
+    const char *encoding = "";
+    const char *cors1, *cors2, *cors3;
 
     get_mime_type(conn->ctx, path, &mime_vec);
     cl = filep->size;
@@ -3514,7 +3515,7 @@ static void handle_file_request(struct mg_connection *conn, const char *path,
             return;
         }
         conn->status_code = 206;
-cl = n == 2 ? (r2 > cl ? cl : r2) - r1 + 1: cl - r1;
+        cl = n == 2 ? (r2 > cl ? cl : r2) - r1 + 1: cl - r1;
         mg_snprintf(conn, range, sizeof(range),
                     "Content-Range: bytes "
                     "%" INT64_FMT "-%"
@@ -3523,6 +3524,15 @@ cl = n == 2 ? (r2 > cl ? cl : r2) - r1 + 1: cl - r1;
         msg = "Partial Content";
     }
 
+    hdr = mg_get_header(conn, "Origin");
+    if (hdr) {
+        cors1 = "Access-Control-Allow-Origin: ";
+        cors2 = "*";
+        cors3 = "\r\n";
+    } else {
+        cors1 = cors2 = cors3 = "";
+    }
+
     /* Prepare Etag, Date, Last-Modified headers. Must be in UTC, according to
        http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3 */
     gmt_time_string(date, sizeof(date), &curtime);
@@ -3531,6 +3541,7 @@ cl = n == 2 ? (r2 > cl ? cl : r2) - r1 + 1: cl - r1;
 
     (void) mg_printf(conn,
                      "HTTP/1.1 %d %s\r\n"
+                     "%s%s%s"
                      "Date: %s\r\n"
                      "Last-Modified: %s\r\n"
                      "Etag: %s\r\n"
@@ -3539,7 +3550,9 @@ cl = n == 2 ? (r2 > cl ? cl : r2) - r1 + 1: cl - r1;
                      "Connection: %s\r\n"
                      "Accept-Ranges: bytes\r\n"
                      "%s%s\r\n",
-                     conn->status_code, msg, date, lm, etag, (int) mime_vec.len,
+                     conn->status_code, msg,
+                     cors1, cors2, cors3,
+                     date, lm, etag, (int) mime_vec.len,
                      mime_vec.ptr, cl, suggest_connection_header(conn), range, encoding);
 
     if (strcmp(conn->request_info.request_method, "HEAD") != 0) {