Tag: http

Web服务器可以在客户端发送完整请求之前开始响应吗?

我正在为一个学术研究小组编写一个Web应用程序。 研究人员需要能够以CSV格式上传大型数据集(100MB – 1GB)。 我已经编写了服务器来处理数据。这意味着如果在CSV的第一行出现错误,我们可以立即返回一个错误。 但是,如果发生这种情况,浏览器会报告“连接已重置”或类似情况。 很明显,我的网络服务器的响应方式是没有意义的。 如果在将错误返回给浏览器之前,我明确地关闭了HTTP请求流(这是JVM上的Kotlin),那么问题就会消失。 然而,事实certificate,请求流的紧密实现首先进行,并将整个流读取到最后。 那么在这一点上,用户仍然需要等30分钟才能发现他们的CSV的第一行有错误。 我正在尝试做什么? 在任何情况下,HTTP协议是否允许Web服务器在完整的请求主体发送之前开始响应? 如果没有,你能否提出一个解决方法,让我提供一个用户体验,在用户不需要等待整个文件上传之前,发现是否有任何问题?

使用Android SDK发布多部分请求

我试图做一些我认为会相对简单的事情:使用Android SDK将图像上传到服务器。 我发现了很多示例代码: http://groups.google.com/group/android-developers/browse_thread/thread/f9e17bbaf50c5fc/46145fcacd450e48 http://linklens.blogspot.com/2009/06/android-multipart-upload.html 但是,这两个都不适合我。 我不断遇到的困惑是多部分请求真正需要的。 Android的多部分上传(带图片) 最简单的方法是什么? 任何帮助或建议将不胜感激!

移动网络上的HTTP请求408错误(客户端请求超时)。 Django + Gunicorn + Nginx

我遇到了一个奇怪的问题。 我的API有我使用PATCH的端点(也试过PUT和POST – 相同的结果)从手机发送json与jsonarray(请求体大小通常是40KB)。 当我这样做使用Wi-Fi – 一切正常。 但是,如果我使用移动网络,我面临的SocketConnection超时(在Retrofit / Kotlin)与一些手机(iOS工作完美)。 来自nginx access.log: domain – – [21/Nov/2017:16:33:01 +0000] “PATCH /endpoint/ HTTP/1.1” 408 0 “-” “Dalvik/2.1.0 (Linux; U; Android 6.0.1; Nexus 5 Build/M4B30Z)” Nginx配置: server { listen port; server_name domain; client_max_body_size 32m; proxy_connect_timeout 75s; proxy_read_timeout 300s; location = /favicon.ico { access_log off; log_not_found off; } location /static/ […]

在Ktor中测试发布请求

Ktor(kotlin web框架)有一个很棒的可测试模式,可以在unit testing中包装http请求。 他们举了一个很好的例子来说明如何在这里测试一个GET端点,但是我在使用http POST时遇到了麻烦。 我试过,但后参数似乎并没有被添加到请求: @Test fun testSomePostThing() = withTestApplication(Application::myModule) { with(handleRequest(HttpMethod.Post, “/api/v2/processing”) { addHeader(“content-type”, “application/x-www-form-urlencoded”) addHeader(“Accept”, “application/json”) body = “param1=cool7&param2=awesome4” }) { assertEquals(HttpStatusCode.OK, response.status()) val resp = mapper.readValue(response.content ?: “”) assertEquals(TriggerResponse(“cool7”, “awesome4”, true), resp) } } 有人有主意吗?

如何将K12中的win1251编码转换为UTF8?

我正在进行HTTP请求页面。 这个页面有西里尔文字符。 如何将CP1251中的答案转换为UTF8? 这是我的代码。 package bash import com.github.kittinunf.fuel.httpGet import com.github.kittinunf.result.Result fun main(args: Array) { val bashImHost = “http://bash.im/” bashImHost.httpGet().responseString { request, response, result -> when (result) { is Result.Failure -> { println(“Some kind of error!”) } is Result.Success -> { val htmlBody = result.value val parsePattern = “(.+)” val parseRegex = Regex(parsePattern) val results = […]

春季启动ThymeLeaf和Kotlin – checkbox值没有被传递给控制器​​?

我正在尝试使用Spring Thymeleaf和Kotlin来提供HTML页面。 我希望它能够传递我按下“提交”时选择的HTML页面上的所有值,然后将所有提交内容存储到订单列表中。 class Order(val nameForTheOrder: String, val items: Map, val totalCost: BigDecimal) 控制器: @Controller class OrderController { @Autowired lateinit var orderService: OrderService @RequestMapping(“/orderHistory”) fun listOfOrders(model: Model) : String { model.addAttribute(“orderHistory”, orderService.getOrders()) return “orderHistory” } @RequestMapping(“/order/{nameForTheOrder}”) fun findOrder(@PathVariable(“nameForTheOrder”) orderId: String, model: Model) : String { model.addAttribute(“order”, orderService.findOrderbyId(orderId)) return “order” } @RequestMapping(value=”/order”, method = arrayOf(RequestMethod.POST)) fun […]

用消息“此处不允许的方法”来改写响应代码405

我正在使用改造,我有一个职位请求 interface NetworkApi { @Headers("Content-Type: application/json") @POST("/") fun startLoginRequest(@Body loginModel : LoginModel) : Call<BaseResponseModel> class Factory { var retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .build() companion object{ fun getApi (): NetworkApi { val serverApi = NetworkApi.Factory() val api = serverApi.retrofit.create(NetworkApi::class.java) return api } } } } 当我使用这个方法和响应方法时,调用响应体总是空的。 fun startLoginRequest(){ val api = NetworkApi.Factory.getApi() val request = […]

来自Retrofit的POST请求以意想不到的方式工作

有一个使用HTTPS的第三方网站,登录时起始页执行POST。 我已经在浏览器中检查了POST请求,然后我可以用Fiddler的作曲器手动创建请求。 因此,根据凭证,我可以成功或不成功地使用Fiddler登录。 返回代码始终为302,它们分别与用户管理页面的重定向(标题“位置”)或登录失败页面一起出现。 但是,当我使用Retrofit库创建请求时,它不起作用。 我得到的响应代码是200,在这个具体的情况下,不会被认为是成功的。 为了检查来自Retrospect的POST请求,我将它指向了Fiddler( http:// localhost:8888 )而不是第三方URL。 如果我将该请求复制到作曲家,并将URL调整为第三方,请求确实起作用。 也就是说,我无法找到由Retrofit构建的请求有任何问题。 有没有人有一个想法可能是错的? 我的代码是用Kotlin编写的,但是如果你知道Java应该很容易理解: import okhttp3.ResponseBody import retrofit2.Call import retrofit2.Retrofit import retrofit2.http.* interface MyApi { @POST("<relative login url>") @FormUrlEncoded @Headers( //… ) fun login( @Field("username") username: String, @Field("password") password: String ) : Call<ResponseBody>; } fun main(args: Array<String>) { val baseUrl = "https://<url>" val retrofit = […]

为什么OkHttp不重用它的连接?

我使用OkHttp 3.5.0执行http-benchmark。 我发送了数千个请求到相同的URL。 我期望OkHttp客户端使用ConnectionPool并重复使用它的连接。 但是如果我们看一下netstat我们会看到TIME_WAIT状态下有很多连接: TCP 127.0.0.1:80 127.0.0.1:51752 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51753 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51754 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51755 TIME_WAIT TCP 127.0.0.1:80 127.0.0.1:51756 TIME_WAIT … 成千上万的请求后,我得到一个SocketException: No buffer space available (maximum connections reached?) 代码执行请求(Kotlin): val client = OkHttpClient.Builder() .connectionPool(ConnectionPool(5, 1, TimeUnit.MINUTES)) .build() val request = Request.Builder().url("http://192.168.0.50").build() while (true) { val response = client.newCall(request).execute() response.close() […]

HTTP标头不在EC2上返回

我在2个EC2实例(分段和生产环境)上部署了一个Spring Boot应用程序。 我有一个用于下载文件的端点。 它看起来像这样(应用程序是用Kotlin编写的): @PostMapping("/download") open fun download(@RequestBody request: DownloadRequest, servletResponse: HttpServletResponse) { val file = getByteArray(request.fileId) servletResponse.outputStream.write(file) servletResponse.contentType = MediaType.APPLICATION_OCTET_STREAM_VALUE servletResponse.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"${request.fileId}.zip\"") } 当我在登台机器上执行下载请求时,一切都很好。 我找回文件,响应中设置了标题。 这些是我可以在邮差看到的标题: Cache-Control →no-cache, no-store, max-age=0, must-revalidate Connection →keep-alive Content-Disposition →attachment; filename="345412.zip" Content-Length →11756 Content-Type →application/octet-stream Date →Tue, 04 Apr 2017 09:04:19 GMT Expires →0 Pragma →no-cache X-Application-Context →application:8081 […]