Форум программистов, компьютерный форум, киберфорум
Go (Golang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
6 / 4 / 12
Регистрация: 22.10.2016
Сообщений: 131

HTTP заголовки и проблемы с Json

25.03.2020, 18:33. Показов 1995. Ответов 9

Студворк — интернет-сервис помощи студентам
Здравствуйте подскажите пожалуйста почему не выдается никаких ошибок при несоответствии заголовков клиента и сервера.
Например если не указать заголовок Access-Control-Allow-Origin, то браузер сразу ругается что было нарушено Cross-Origin Resource Sharing, а когда я задал ограничение на методы запроса, то никаких ошибок не происходит.


Проблема с заголовками:
Go
1
2
3
4
5
6
7
8
9
10
func some(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Methods", "GET")
 
    w.Header().Set("Accept", "application/json")
    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Request-Method", "GET")
 
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    w.Header().Set("X-Content-Type-Options", "nosnif")
Вторая проблема заключается в том, что при отправке POST запроса с заголовком Content-Type: application/json
метод json.Unmarshal выдает ошибку (unexpected end of JSON input) при этом он еще и считывает json ({sdvdf 23}),
а когда в запросе я убираю Content-type, то ошибка не появляется.

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
type Person struct{
    Name string `json:"name"`
    Age int `json:"age"`
}
type Err struct{
    Error string `json:"error"`
}
func post_form(w http.ResponseWriter, r *http.Request){
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Accept", "application/json")
    w.Header().Set("Content-Type", "application/json")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
    w.Header().Set("X-Content-Type-Options", "nosnif")
 
    x := Person{}
    b, err := ioutil.ReadAll(r.Body)
    if err != nil{
        fmt.Println(err)
    }
    err = json.Unmarshal(b, &x)
    if err != nil{
        fmt.Println(err)
    }
    fmt.Println(x)
    e := Err{"some error test"}
    b, err = json.Marshal(e)
    if err != nil{
        fmt.Println(err)
    }
    w.Write(b)
}
Обработчик формы
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
let form = document.querySelector('form')
    form.addEventListener('submit', some)
    function some(event){
        event.preventDefault()
        let json = {
            "name": form[0].value,
            "age": Number(form[1].value)
        }
 
        async function send(){
            let response = await fetch("http://127.0.0.1:8080/", {
                method: "POST",
                // headers:{
                //     "Content-Type": "application/json;charset=utf8"
                // },
                body: JSON.stringify(json)
                }
            )
            let result = await response.json();
            console.log(result)
        }
        send()
    }
Добавлено через 3 часа 37 минут
Разобрался с ошибкой с методами:
Access-Control-Request-Method этот заголовок должен отправлять клиент а сервер проверяет в Access-Control-Allow-Methods если происходит несоответствие то выдается ошибка.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2020, 18:33
Ответы с готовыми решениями:

HTTP заголовки. Как увидеть реальные принятые заголовки ?
файл php содержит readfile(блабла) больше ни чего! Если смотреть заголовки через Файрфорк или сервисы-сайты, то показывает...

Заголовки HTTP
Вот один из стандартных HTTP-заuоловков, отправляемых сервером клиенту. Content-Type: text/html;charset=windows-1251 Allow:...

HTTP Заголовки
Добрый день! Работаю с сайтом на Word Press. Для правильной индексации мне необходимо добавить http-заголовок X-Robots-Tag через php код....

9
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.03.2020, 01:45
Цитата Сообщение от Vlados19 Посмотреть сообщение
выдает ошибку (unexpected end of JSON input)
Потому что данные там будут только при методе POST, а ошибка случается у Вас в OPTIONS. Смотрите мой предыдущий пример.
1
6 / 4 / 12
Регистрация: 22.10.2016
Сообщений: 131
26.03.2020, 10:43  [ТС]
я и отправляю для post, у меня эта ошибка появляется только когда я при отправке указываю заголовок Content-Type: application/json;, а когда я удаляю этот заголовок и автоматически ставится text/plain, то ошибка исчезает
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.03.2020, 14:54
Отправляете post, а уходит сначала options. Проверьте.
Вот тут полезно.
2
6 / 4 / 12
Регистрация: 22.10.2016
Сообщений: 131
26.03.2020, 15:31  [ТС]
я прочитал статью о предварительных запросах, которую вы показали, но она мне не помогла
я оставил только 2 заголовка чтобы не ругался браузер:

Code
1
2
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
когда при отправке в content-type устанавливается значение text/plain
показывает результат, который на втором изображении, а когда при отправке с формы указываю content-type: application/json, то происходит то что на третьем изображении.
Миниатюры
HTTP заголовки и проблемы с Json   HTTP заголовки и проблемы с Json   HTTP заголовки и проблемы с Json  

0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.03.2020, 15:43
Лучший ответ Сообщение было отмечено Vlados19 как решение

Решение

Я уже не знаю, как Вам ещё помочь - я и сказал почему (OPTIONS), и где код, который уже решает эту проблему (предыдущий вопрос) и где читать детали (developer.mozilla).

Попробуйте вот тут еще что ли...
1
6 / 4 / 12
Регистрация: 22.10.2016
Сообщений: 131
26.03.2020, 16:13  [ТС]
Спасибо за труды
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.03.2020, 16:14
Всегда пожалуйста.
1
6 / 4 / 12
Регистрация: 22.10.2016
Сообщений: 131
26.03.2020, 20:00  [ТС]
Еще раз спасибо вам что подсказывали мне как избавиться от моей проблемы. Вы мне все верно говорили про Options, но я не правильно понял. Нужно было указать заголовок Access-Control-Max-Age что бы запросы options не повторялись определенной время и ошибка исчезла
0
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
26.03.2020, 21:26
Ну, это как симптомы лечить
Хотя, хозяин-барин, как говорится.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2020, 21:26
Помогаю со студенческими работами здесь

заголовки http
а вот еще маленький вопрос я через снифер получил эти заголовки отправка post POST /action.php HTTP/1.1 Host: tut-music.ru ...

HTTP заголовки
пишу не в тему тк тем таких нет. захотел посмотреть что браузер передает, когда заполняю форму авторизации ожидал увидеть пару...

Http заголовки
Прошу помощи у тех, кто разбирается в этом дерьме, простите за выражение, просто эти запросы меня, мягко говоря, достали уже. Пытають...

Http заголовки
всем привет, у меня имеется роутер tp link *740. мне необходимо сделать на базе типовой веб морды этого роутера, отображаемой в браузере ...

HTTP заголовки PHP
Добрый день товарищи! Не получилось найти полную инфу по заголовкам PHP применяемую в с функцией header(). Может кто нибудь знает хороший...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru