@zkrvndm
Софт для автоматизации

Почему не совпадает значение заголовка Content-Length с реальным количеством символов?

Отправляю JSON на сервер:
var json = JSON.stringify(obj);

response = await $.ajax({
    url: 'https://server.com',
    method: 'POST',
    contentType: 'application/json; charset=utf-8',
    data: json,
    dataType: 'html'
});

В переменной json текст, количество символов которого равно 10188, но заголовок Content-Length у меня показывает больше символов, а именно 10255! Я не понимаю, почему в консоли длинна запроса у меня получается больше???

6042100a34721791706305.png
60421016a897d359888998.png

Зачем мне это надо знать
Многие из вас кажут, а тебе не похрен? Просто пользуйся и не забивай голову, но это не так. Дело в том, что сервер на который я отсылаю данные блокирует запрос, если Content-Length неверный. При отправке запроса из браузера это не критично, так как браузер сам верно рассчитывает кол-во символов, но это критично, когда мне надо отправить этот же самый запрос из php! В этом случае мне самому надо посчитать длину запроса и вписать его в заголовках запроса - да только сервер не принимает посчитанные мной вручную значения. Соответственно, мне нужно понять каким образом считает длинную запроса сам браузер и реализовать подсчет по аналогии уже на php. Мне нужно лишь понять, почему в консоли Conten-Length больше получается, чем реально отправляемые данные.
  • Вопрос задан
  • 634 просмотра
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
json.length - длина строки в символах.
content-length - длина тела запроса в байтах.
В общем случае символ != байт.
Ответ написан
lazalu68
@lazalu68
Salmon
Если данные в JSON, то какие-то символы могут быть экранированы. Например строка "{"key":"string \"with \\special chars"}" в сыром виде состоит из 39 символов, после обработки js будет состоять из 37
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы