Изображения не загружаются в браузер при отправке HTTP-ответа через HTTP-сервер C - PullRequest
0 голосов
/ 05 июня 2019

В течение нескольких дней я пытался решить мою проблему с изображениями, не отображаемыми в браузере, index.html загружается нормально, css и js также, и единственный загружаемый формат изображения - .svg. Все заголовки хорошо инициализированы и правильны.

Я попробовал большинство предложений на форумах, таких как us memcpy вместо strcat, fread для загрузки файла в буфер с использованием двоичного чтения (опция "rb") и тому подобное.

Вот код, который копирует содержимое файла в тело сообщения: (извините за вещи по-французски)

void server_fileToSend(char* file, int len, char* rep, char* header,
                       char* message_body) {
    char* body_size_char = (char*)malloc(100 * sizeof(char));
    char* filename = (char*)calloc(100, sizeof(char));
    char* sendbody;

    if (file[0] == '/') {
        strncpy(filename, file + 1, len - 1);
    } else {
        strncpy(filename, file, len);
    }
    // printf(" filetruc %s\n",filename);
    FILE* f = fopen(filename, "rb+");
    if (f == NULL) {
        // Modification du type de réponse
        strcpy(rep, "HTTP/1.0 404 NOT FOUND\r\n");
        f = fopen("sites/notfound.html", "r");
    }
    fseek(f, 0, SEEK_END);
    body_size = ftell(f);
    rewind(f);
    strcat(header, "Content-Length: ");
    sprintf(body_size_char, "%ld", body_size);
    strcat(header, body_size_char);
    strcat(header, "\r\n");

    if (f != NULL && findContentType(filename) != NULL) {
        strcat(header, findContentType(filename));
    }
    strcat(header, "Connection: keep-alive\r\n");

    if ((sendbody = (char*)malloc(body_size)) == NULL) {
        memcpy(message_body, "this is a directory", 20);
        body_size = 20;
    } else {
        result = fread(sendbody, 1, body_size, f);
        if (result > 0) {
            memcpy(message_body, sendbody, body_size);
        }
    }
    fclose(f);
}

И после этого я добавляю message_body в ответ, после заголовков с:

memcpy(rep+strlen(rep),message_body, body_size);

Фактических ошибок нет, страница загружается нормально, просто все изображения, кроме .svg, не загружаются. Кроме того, когда я проверяю их с помощью режима Firefox для веб-разработки, изображения имеют размер всего несколько байтов, а размеры составляют 0x0.

Заранее благодарим за любую помощь, которую вы можете оказать.

Редактировать 1: Вот несколько запросов от Firefox и Response соответственно:

Для index.html

#########################################
Demande recue depuis le client 9
Client [9] [127.0.0.1:46918]
Contenu de la demande GET /www.toto.com/index.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0


-----------Réponse-------------------
HTTP/1.0 200 OK
Date: Wed, 05 Jun 2019 07:32:39 GMT
Server: groupe15 (Debian9)
Content-Length: 621
Content-Type: text/html
Connection: keep-alive

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="index.css">
<script src="index.js"></script> 
<title>Index page</title>
</head>
<body>

<h1>This is a all images i have got so far !!! </h1>
<img onmouseover="big(this)" src="index.gif" alt="gif"> 
<img onmouseover="big(this)" src="index.png" alt="png"> 
<img onmouseover="big(this)" src="index.svg" alt="svg"> 
<img onmouseover="big(this)" src="index.jpg" alt="jpg"> 
<img onmouseover="big(this)" src="index.jpeg" alt="jpeg"> 
<img onmouseover="big(this)" src="index.tif" alt="tif"> 
<img onmouseover="big(this)" src="index.tiff" alt="tiff"> 

</body>
</html> 

Для изображения:

#########################################
Demande recue depuis le client 8
Client [8] [127.0.0.1:46926]
Contenu de la demande GET /www.toto.com/index.png HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: image/webp,*/*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:8080/www.toto.com/index.html
Connection: keep-alive
Cache-Control: max-age=0

-----------Réponse-------------------
HTTP/1.0 200 OK
Date: Wed, 05 Jun 2019 07:32:39 GMT
Server: groupe15 (Debian9)
Content-Length: 2574
Content-Type: image/png
Connection: keep-alive

�PNG

Как видите, проблема заключается в теле сообщения

...