【问题标题】:Kotlin ktor jetty modify response headersKotlin ktor jetty 修改响应头
【发布时间】:2020-10-14 13:13:55
【问题描述】:

这是我迄今为止尝试过的。

embeddedServer(Jetty, 9000) {
    install(ContentNegotiation) {
        gson {}
    }
    routing {
        post("/account/login") {
            // 1. Create URL
            val url = URL("http://some.server.com/account/login")
            // 2. Create HTTP URL Connection
            var connection: HttpURLConnection = url.openConnection() as HttpURLConnection
            // 3. Add Request Headers
            connection.addRequestProperty("Host", "some.server.com")
            connection.addRequestProperty("Content-Type", "application/json;charset=utf-8")
            // 4. Set Request method
            connection.requestMethod = "POST"
            // 5. Set Request Body
            val requestBodyText = call.receiveText()
            val outputInBytes: ByteArray = requestBodyText.toByteArray(Charsets.UTF_8)
            val os: OutputStream = connection.getOutputStream()
            os.write(outputInBytes)
            os.close()
            // 6. Get Response as string from HTTP URL Connection
            val string = connection.getInputStream().reader().readText()
            // 7. Get headers from HTTP URL Connection
            val headerFields =  connection.headerFields
            // 8. Get Cookies Out of response
            val cookiesHeader = headerFields["Set-Cookie"]?.joinToString { "${it};" } ?: ""
            // 9. Respond to Client with JSON Data
            call.respondText(string, ContentType.Text.JavaScript, HttpStatusCode.OK)
            // 10. Add Response headers
            call.response.header("Set-Cookie", cookiesHeader)
        }
    }
}.start(wait = false)

如果首先执行第 9 步,则第 10 步不会将标头设置为响应。 如果先执行第 10 步,则不会设置第 9 步响应正文。

如何将两者一起发送 - 响应正文和响应标头?

【问题讨论】:

    标签: android kotlin jetty ktor


    【解决方案1】:

    我只有一半的答案,对不起。

    似乎call.respondText(...., HttpStatusCode.OK) 将提交响应(因为它具有声明为参数的状态代码“OK”)。

    提交的响应会阻止您修改响应标头。

    call.response.header("Set-Cookie", ...) 应该只设置一个标头而不做其他任何事情。

    从一般 HTTP 服务器的角度来看,您希望先设置响应状态码,然后设置响应标头,然后生成响应正文内容,然后(可选)生成响应尾。

    【讨论】:

      猜你喜欢
      • 2012-11-16
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 2020-01-18
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多