→ ssccg: 你根本沒搞清楚http response是什麼吧,哪有什麼本身 12/22 22:52
→ ssccg: http訊息分成三個部分,status line、headers、body 12/22 22:55
→ ssccg: status line在response就是版本、status code 12/22 22:56
→ ssccg: headers就是一堆header,基本上數量不會太多,內容也不長 12/22 22:57
→ ssccg: 所以API設計成set String 12/22 22:57
HTTP訊息分成三部分這我知道,我之所以會強調本身,只是想將
Java的HttpServletResponse物件,跟http協定的回應,兩者分開而已。
→ ssccg: 而body部分可以說沒有限制,甚至可能需要分段或壓縮 12/22 22:58
→ ssccg: 這種不定長度的當然就要用IO Stream的方式開API 12/22 22:59
喔喔,這樣說明又更能補充我上面的說法了,感謝大大。
→ ssccg: 否則要下載數百G的檔案可沒辦法讓你先讀成byte[] 再set 12/22 23:01
→ ssccg: 至於不是setOutputStream而是getOutputStream,也是因為 12/22 23:02
→ ssccg: Stream的特性沒有一次就要寫入完成,當然Response物件內部 12/22 23:02
→ ssccg: 要有自己控制的OutputStream,getOutputStream拿到的只是個 12/22 23:03
→ ssccg: 接續寫入的wrapper,並不能把response內的OutputStream換掉 12/22 23:04
→ ssccg: 至於setXXX那些沒這問題,依http response的順序,一定是先 12/22 23:05
→ ssccg: 把status、headers寫入底層socket才開始寫body,開始寫body 12/22 23:07
→ ssccg: setXXX就通通無效了 12/22 23:07
哇~~~講的真詳細,真的很謝謝大大撥冗指導。
※ 編輯: TKB5566 (36.229.144.168 臺灣), 12/22/2023 23:08:43
→ sw12: 那你有直接set過嗎?直接試比較快吧.... 12/25 14:29
→ glo6e: 推 12/25 22:51
推 ywk: 推 07/13 06:08
→ y3k: 有些是getWriter(),有些是getOutputStream;這些東西其實 09/16 10:02
→ y3k: 都不是給你用的XD 09/16 10:02