Перейти к содержимому


Ads
Фотография
- - - - -

вопрос по http

http cors

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Почетный житель
  • 3 385 сообщений

Отправлено 12.07.2018, 23:03

ребята, помогите пожалуйста понять как обрабатывать составной http-запрос. на всяких stackoverflow я уже всех достал, поэтому спрашиваю здесь. ниже пример с использованием на бекенде django, но сам фреймворк может быть любым другим, проблема не в нём
 
есть фронт, с которого отправляются данные формы и csrf-токен в виде ajax-запроса. на бекенде есть контроллер, который обрабатывает этот запрос. нужно просто вывести в консоль некоторый результат
 
так как с фронта отправляются данные в виде json, то http-запрос будет состоять из двух частей:
 
1. preflight запрос
на картинке видно, что в секции response серверная сторона разрешает использовать все необходимые методы и заголовки. кроме того разрешается междоменный запрос

Скрытый текст

это результат такого кода(а точнее блока OPTIONS):

Скрытый текст

 

2. основной запрос

на картинке видно, в блоке request указан формат данных, сами данные прикреплены в виде json, но сервер выполнять запрос отказывается

Скрытый текст

 

вообще проблема в том, что в указанном выше фрагменте кода срабатывает только секция OPTIONS, но не срабатывает секция POST. если бы мне удалось сделать так чтобы хотя бы вывелся print('==POST') в консоль, то проблема была бы решена


Сообщение отредактировал Sergey Kalinin: 12.07.2018, 23:39

"Людей я люблю, но их надо п****ть"©Александр Баширов


#2 potapko

potapko

    Старожил

  • Житель
  • 344 сообщений

Отправлено 12.07.2018, 23:13

сам фреймворк может быть любым другим, проблема не в нём

Мне кажется, что в нем. Обычно cors в конфигах сервера настраивается, а не в коде пишется

#3 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Почетный житель
  • 3 385 сообщений

Отправлено 12.07.2018, 23:35

Мне кажется, что в нем. Обычно cors в конфигах сервера настраивается, а не в коде пишется

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

 

мне обработка запроса видится так:

  • эти два запроса идут на один и тот же урл,
  • то есть обрабатываются одним и тем же контроллером.
  • я в контроллере добавил условный оператор, первая часть которого обрабатывает preflight запрос, а вторая основной запрос.
  • в каждом из этих блоков происходит какое-то действие(пока просто вывод при помощи print).
  • каждый из этих блоков может даже иметь свой return(чтобы на клиенте можно было вывести статус операции с пояснительным текстом)

мне кажется, всё логично. но блин не работает


Сообщение отредактировал Sergey Kalinin: 12.07.2018, 23:38

"Людей я люблю, но их надо п****ть"©Александр Баширов


#4 potapko

potapko

    Старожил

  • Житель
  • 344 сообщений

Отправлено 12.07.2018, 23:44

https://stackoverflo...-is-the-origin 



#5 potapko

potapko

    Старожил

  • Житель
  • 344 сообщений

Отправлено 13.07.2018, 00:29

В значение для Access-Control-Allow-Headers попробуй прописать заголовки запроса, которые в пост запросе идут

#6 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Почетный житель
  • 3 385 сообщений

Отправлено 13.07.2018, 00:43

В значение для Access-Control-Allow-Headers попробуй прописать заголовки запроса, которые в пост запросе идут

чёт нифига:

Скрытый текст

для Access-Control-Allow-Headers пробовал даже звёздочку указывать

 

 

и пробовал вместо хрома использовать FF. и пробовал хром запускать с ключом --disable-web-security . и пробовал в хром устанавливать плагин, который cors включает. ничего не поменялось(

 

скорее всего и правда дело в фреймворке


Сообщение отредактировал Sergey Kalinin: 13.07.2018, 00:44

"Людей я люблю, но их надо п****ть"©Александр Баширов


#7 potapko

potapko

    Старожил

  • Житель
  • 344 сообщений

Отправлено 13.07.2018, 00:59

Попробуй не localhost использовать



#8 a66at

a66at

    Житель

  • Житель
  • 137 сообщений

Отправлено 13.07.2018, 01:24

Вот нашлось какое-то решение (@csrf_exempt) для похожей проблемы: https://djbook.ru/forum/topic/3464/ . Нашёл просто поиском по "wsgi server 0.2 post forbidden", в питоне не понимаю, так что сорри если не в тему.



#9 DivineShadow

DivineShadow

    I worship his divine shadow

  • Почетный житель
  • 1 149 сообщений

Отправлено 13.07.2018, 22:08

Эта джанга настолько обмазана всякими средневарами, что иногда очевидное становится не совсем очевидным.

 

А по существу тебе поможет пакет django-cors-headers

 

https://github.com/o...go-cors-headers

 

Не забудь с CSRF подружить.


Сообщение отредактировал DivineShadow: 13.07.2018, 23:24

За СпН...

#10 Sergey Kalinin

Sergey Kalinin

    Ампиратор

  • Почетный житель
  • 3 385 сообщений

Отправлено 14.07.2018, 00:17

решение a66at помогло, дело было в django.

 

декоратор, который он посоветовал заставляет middleware отключить все предварительные проверки токена(может быть нужно было его поместить в заголовок с со строго определённым и приятным джанге именем, например).  видимо, middleware вмешивался в процесс, причём сразу после preflight запроса и останавливал движуху по каким-то своим соображениям

 

но за советы спасибо всем


"Людей я люблю, но их надо п****ть"©Александр Баширов





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей