Задать вопрос
@MishaXXL

По какому принципу разбивается http запрос/ответ?

Я так понял любой https запрос/ответ это одна длинная строка, которая разбита на переносы строк путем "\r\n", а при двойном "\r\n\r\n" мне казалось, что это переход на следующую часть данных о запросе

Но получилось так, что "\r\n" расположился сразу после одного из заголовков
clientOutput.write(("ContentType: text/html" + "\r\n").getBytes());
clientOutput.write("\r\n".getBytes());
clientOutput.write(("Hello Java!").getBytes());
clientOutput.write("\r\n\r\n".getBytes());


Из чего состоят http запросы и как правильно читать запросы и писать ответы, по какому принципу или структура их надо разбирать и собирать?
Мне нужно написать ответ от сервера, который содержал обычную информацию + заголовки + данные
Ответ GET/POST запросов

Заголовки
"Access-Control-Allow-Origin", "*"
"Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization"
"Access-Control-Allow-Credentials", "true"
"Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS,HEAD"


И сами данные в виде текста или JSON строки

Как формируется такой ответ от сервера и как браузер и сервер должны понять, где информация о запросе, где заголовки, а где данные?

Чтение запроса
StringBuilder requestBuilder = new StringBuilder();
String line;
while (!(line = buffer.readLine()).isBlank()) {
    requestBuilder.append(line + "\r\n");
}

System.out.println("Request data");
System.out.println(requestBuilder.toString());


Ответ без заголовков
OutputStream clientOutput = client.getOutputStream();
clientOutput.write(("HTTP/1.1 200 OK").getBytes());
clientOutput.write(("ContentType: text/html" + "\r\n").getBytes());
clientOutput.write("\r\n".getBytes());
clientOutput.write(("Hello Java!").getBytes());
clientOutput.write("\r\n\r\n".getBytes());
clientOutput.flush();
client.close();


В примерах с заголовками находил подобные конструкции, но они не сработали
PrintWriter output = new PrintWriter(client.getOutputStream());

output.println("Access-Control-Allow-Origin: *");
output.println();
output.println("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept, Authorization");
output.println();
output.println("Access-Control-Allow-Credentials: true");
output.println();
output.println("Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS,HEAD");
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    1C-программист: расширенный курс
    18 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия 1С-программист
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
@Dementor
программист, архитектор, аналитик
Детальный ответ на твой вопрос с примерами:
https://datatracker.ietf.org/doc/html/rfc9110
Ответ написан
Комментировать
@My1Name
По какому принципу разбивается http запрос/ответ?

По принципу стандартизации HTTP протокола.
https://ru.wikipedia.org/wiki/HTTP
Ответ написан
Комментировать
То, какими символами разделяются заголовки и тело запроса и как надо экранировать эти символы, если их нужно впихнуть в тело, подробно описано в спецификации:

https://www.w3.org/Protocols/HTTP/1.1/draft-ietf-h...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы