В течение нескольких дней я пытался решить мою проблему с изображениями, не отображаемыми в браузере, 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
Как видите, проблема заключается в теле сообщения