<p>Hi,</p>
<p>at work we tried to configure the Apache HTTP server to act as a reverse proxy with caching. We couldn't get it to work in more than three hours.
At home I wrote exactly this in two hours: A reverse proxy that caches the requests: <a href="https://github.com/hauke96/tiny-http-proxy" rel="nofollow">https://github.com/hauke96/tiny-http-proxy</a></p>
<p>It would be great if I get some feedback to the code: What could go wrong using it? What could be done more efficient/readable/elegant/shorter/...?</p>
<p>Regards
Hauke</p>
<hr/>**评论:**<br/><br/>tsdtsdtsd: <pre><p>I believe you should use a custom <a href="https://golang.org/pkg/net/http/#Client" rel="nofollow">http.Client</a> instead of a direct http.Get, so you can set a meaningful timeout. And maybe you want to handle redirects in a custom way too. <a href="https://medium.com/@nate510/don-t-use-go-s-default-http-client-4804cb19f779" rel="nofollow">This</a> is a nice article about that stuff. EDIT: also check the comments in that article, some good stuff there too.</p></pre>tv64738: <pre><p>He should definitely plumb up the incoming context to the outgoing one, to get request cancellation.</p></pre>theo_retiker: <pre><p>Thanks for this article, I thought all the time that there's a default timeout like 30 seconds. But now I'm using the http.Client and http.Server (as mentioned in the comments, the default server has timeout issues too).</p></pre>-amir: <pre><p>Seems like the cache is not thread safe...</p></pre>theo_retiker: <pre><p>Oh, yes, that's right and something I'll work on later. Thank for the hint :)</p></pre>dahlma: <pre><p>This is cool! I've written a proxy as well, unfortunately not something I can share but so far it's worked out pretty well. I'm storing the data in a DB instead of file system since I'm running the app on heroku, I need it to not rely on the filesystem (s3 may be an option but would need to look into latency)</p>
<p>I'm wondering though, when you save the information to the filesystem, does that retain headers?</p></pre>
![](https://static.golangjob.cn/static/img/banner.png)