Size: a a a

2019 November 18

AM

Andrew Mikhaylov in Kotlin JVM
Ну оценочное суждение по определению субьективное, и несколько человек вам ответило, что всё с CORS хорошо.
А контраргументы типа почитай лицензию прозвучали исключительно потому, что ваша спесь тут никому не интересна. Люди обычно в чат приходят помощи просить или помогать, а не брюзжать слюной, какое всё вокруг говно.
источник

A

Andrey in Kotlin JVM
все его добавляют
источник

AO

Alexey Otts in Kotlin JVM
Andrey
в джаваскрипт?
Нет, в ктор сверху, над cors
источник

A

Andrey in Kotlin JVM
ага, но и без него тоже не работало
источник

AO

Alexey Otts in Kotlin JVM
Andrey
ага, но и без него тоже не работало
Работало, работало
источник

AO

Alexey Otts in Kotlin JVM
Я вижу по конфигу что все ок
источник

A

Andrey in Kotlin JVM
там не работало потому-что в дефолтном шаблоне плагина нет header(HttpHeaders.ContentType)
источник

A

Andrey in Kotlin JVM
я это тоже руками добавил
источник

AO

Alexey Otts in Kotlin JVM
Andrey
там не работало потому-что в дефолтном шаблоне плагина нет header(HttpHeaders.ContentType)
Он там есть в дефолтных хедерах
источник

AO

Alexey Otts in Kotlin JVM
В код то провались, ну камон
источник

K

Konstantin in Kotlin JVM
всем привет!
Прошу небольшую помощь с springboot:
подключил HttpSession к контроллеру:
fun request(session: HttpSession?, @RequestBody request: ProtoMessage?) {

записываю состояние на входе
session?.setAttribute("logged-in", true)

считываю, был ли логин:
session?.getAttribute("logged-in").toString().toBoolean()


всегда возвращается false.
Просто не представляю, куда копать :(((
источник

AM

Andrew Mikhaylov in Kotlin JVM
Напоминаю, что если не работает то, что по логике должно работать, это оформляется в Minimal, Reproducible Example и отправляется в issues в репозитории. Нередко при оформлении этого самого MRE причина находится в собственном решении.
источник

A

Andrey in Kotlin JVM
источник

A

Andrey in Kotlin JVM
вот дефолтные заголовки
источник

AL

Alexander Levin in Kotlin JVM
1. Давайте все спокойнее пожалуйста :)
2. Если я правильно вижу, то исходная проблема решается намного проще, нужно добавить`allowNonSimpleContentTypes = true`
Причина - по умолчанию для безопасности поддерживаются только простые типы контента, куда json не входит. Но вообще Content-Type конечно же входит. Подробнее тут: https://ktor.io/servers/features/cors.html

Upd: решение с явным прописыванием header(HttpHeaders.ContentType) тоже работает из-за очень милого кода внутри:

fun header(header: String) {
           if (header.equals(HttpHeaders.ContentType, ignoreCase = true)) {
               allowNonSimpleContentTypes = true
               return
           }

           if (header !in CorsSimpleRequestHeaders) {
               headers.add(header)
           }
       }
источник

A

Andrey in Kotlin JVM
ну да странно что в доке там заголовки есть в идеевском плагине нет
источник

AO

Alexey Otts in Kotlin JVM
Andrey
ну да странно что в доке там заголовки есть в идеевском плагине нет
/**
            * Default HTTP headers that are always allowed by CORS
            */
           val CorsDefaultHeaders: Set<String> = TreeSet(String.CASE_INSENSITIVE_ORDER).apply {
               addAll(listOf(
                       HttpHeaders.CacheControl,
                       HttpHeaders.ContentLanguage,
                       HttpHeaders.ContentType,
                       HttpHeaders.Expires,
                       HttpHeaders.LastModified,
                       HttpHeaders.Pragma
               ))
           }

Вот если что дефолтные
источник

AO

Alexey Otts in Kotlin JVM
Alexander Levin
1. Давайте все спокойнее пожалуйста :)
2. Если я правильно вижу, то исходная проблема решается намного проще, нужно добавить`allowNonSimpleContentTypes = true`
Причина - по умолчанию для безопасности поддерживаются только простые типы контента, куда json не входит. Но вообще Content-Type конечно же входит. Подробнее тут: https://ktor.io/servers/features/cors.html

Upd: решение с явным прописыванием header(HttpHeaders.ContentType) тоже работает из-за очень милого кода внутри:

fun header(header: String) {
           if (header.equals(HttpHeaders.ContentType, ignoreCase = true)) {
               allowNonSimpleContentTypes = true
               return
           }

           if (header !in CorsSimpleRequestHeaders) {
               headers.add(header)
           }
       }
А зачем вообще были добавлены эти новые сложности с allowNonSimpleContentTypes?
источник

A

Andrey in Kotlin JVM
Alexey Otts
/**
            * Default HTTP headers that are always allowed by CORS
            */
           val CorsDefaultHeaders: Set<String> = TreeSet(String.CASE_INSENSITIVE_ORDER).apply {
               addAll(listOf(
                       HttpHeaders.CacheControl,
                       HttpHeaders.ContentLanguage,
                       HttpHeaders.ContentType,
                       HttpHeaders.Expires,
                       HttpHeaders.LastModified,
                       HttpHeaders.Pragma
               ))
           }

Вот если что дефолтные
но вот везде заявлено что ContentType дефолтный но по факту его не влючили в шаблон и по-этому "ничего не работает" из коробки
источник

AL

Alexander Levin in Kotlin JVM
Alexey Otts
А зачем вообще были добавлены эти новые сложности с allowNonSimpleContentTypes?
Я не разработчик ktor :)

Но предположение - по умолчанию надо разрешать по минимуму, поэтому открывается спека и смотрится, что является simple method'ом, simple header'ом, simple response header'ом и simple content type'ом :) (https://www.w3.org/TR/cors/#simple-header)
источник