簡體   English   中英

這是使用 Spring 返回 204“No Content”的正確方法嗎?

[英]Is this the correct way to return 204 "No Content" using Spring?

我正在嘗試使用 Weblogic 刪除資源設置 http 狀態NO_CONTENT ,響應需要 30 秒才能完成。 我是在濫用 Spring 還是 Weblogic 中存在錯誤?

我已經使用 Spring 5.0.12 在 Weblogic 12.2.1.0.0 上嘗試過這個。 請求完成,資源被移除,但客戶端在此之后等待 30 秒(瀏覽器 TTFB)。 這似乎是一種超時。

作為一種解決方法,我們可以返回 http status OK

@DeleteMapping(value = "/{id}")
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {
    useCase.remove(id);
    return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}

我希望客戶端立即收到響應,但它等待了 30 秒。

與 200 響應相比,您的 204 響應沒有Content-Length標頭。 嘗試手動添加它以查看它是否有助於您的應用程序服務器處理空響應正文:

return ResponseEntity.noContent().header("Content-Length", "0").build();

您還可以使用@ResponseStatus注釋。

@DeleteMapping(value = "/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
public ResponseEntity<Void> delete(@PathVariable("id") Long id) {}

這是 OHS 的一個已知錯誤。 https://support.oracle.com/knowledge/Middleware/2162306_1.html

錯誤行為是:插件一直在等待內容正文,而 204 最終沒有正文,它觸發了讀取超時(這是 30+ 秒)。

您需要下載補丁並應用到 OHS,或者更改 HTTP 代碼作為解決方法,可能是 202(已接受)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM