1 開端
HTTP Client是IDEA中自帶的一個插件,用於代替原來的REST Client,打開Tools->HTTP Client->Test RESTful Web Service
,會提示REST Client不推薦使用,推薦使用HTTP Client:
然后當然就點擊使用啊,但是,問題來了,一個普通的GET請求都發送不出去????
IDEA的東西估計沒這么菜吧???
肯定不會這么菜的。。。
但是為什么就是發不出去???
2 嘗試
GET請求對吧,瀏覽器也可以做,於是,使用了瀏覽器進行測試,一點問題都沒有:
沒理由啊,筆者在想,那為什么IDEA不行呢??
接着使用了大名鼎鼎的Postman,也是一點問題也沒有:
Postman也沒問題啊,接着試試“情敵”Postwoman,問題來了!
發送不出去,查看了一下F12控制台,報錯如下:
搜索了一下解決辦法,是跨域資源請求的問題,在Controller類上加上
@CrossOrigin(value = "http://localhost:3000")
即可,因為Postwoman默認運行的端口為3000。
這個注解還可以作用在方法上,起作用的就是對應的方法,這里是對整個Controller起作用。
另外這里只使用了最簡單的參數,其他的參數還有origins
(同value
),allowHeaders
,exposedHeaders
,methods
,allowCredentials
,maxAge
,具體使用不介紹,加上了以后Postwoman就能正常發送請求了:
3 再次嘗試
但是IDEA中的HTTP Client還是不行啊,就最最最普通的GET請求,還是返回500:
於是換了一種思路,想再用其他類似插件的方式測試。
所以就想到了VScode,里面有一個類似的擴展叫REST Client,安裝以后寫了一個普通的GET請求,完全沒問題:
但還是想不到為什么IDEA還是不行啊???
還是500 。。。
。。。
但是,反過來想,可能是請求發送不出去,因為如果是接受到了請求的話,肯定會有日志記錄的,但是沒有,所以原因可能是請求發送不出去。。。
4 最終答案
一個普通的GET請求為什么發送不出去?
到底是為什么會返回500?
最后,經過一番痛苦的思考,找到了問題所在:代理!
發送不出去就是因為設置了本地代理,返回的500,是代理服務器返回的,不是Tomcat返回的。
終於,把代理去掉之后,HTTP Client就可以正常使用了:
沒錯,“真凶”就是代理。
最后終於打消了筆者的誤解,為什么IDEA中的HTTP Client會這么“菜”,連一個普通的GET請求也發送不出去??