分享一个简单的 Proxy 服务器(MIT 6.824 Lab)

2021-01-08 13:51:18 +08:00
 perapera

大家好,小弟最近在学 socket,前几天写了一个单线程 HTTP 服务器后,觉得单线程上有很多东西都不能用上,比如线程,感觉有点亏,所以就又简单地实现了一个线程池,写完这个线程池后,又想写个复杂一丢丢的 example.c,刚好遇到了 MIT 的这个Lab(不知道中文怎么说……),觉得可以把自己最近学的东西一次都用上了,于是就又实现了这个简单的代理服务器……

GitHub 链接: https://github.com/ahhzee/parrots

目前这个代理服务器只做到了可以满足课程要求的程度,比较简单(但可以学到多),用 Firefox 可以完美打开 NeverSSL 之类的网站,我学校官网也可以打开,但似乎个别图片使用 HTTPS,不能完全显示页面,个别 gov 网站会返回 200 OK 但不返回内容,目前原因未知,后期有机会会再改善一下,不过今天 HTTP 站点真是用少见少,国内的就更难找,所以测试的机会也不是很多,有兴趣可以自己玩一下~

(图为通过代理服务器访问 eu.httpbin.org 页面)

3416 次点击
所在节点    程序员
10 条回复
fuyufjh
2021-01-08 14:46:03 +08:00
记忆中 Lab1 一直是 MapReduce 。然后发现 lz 看的是 2004 年的课程网站
perapera
2021-01-08 14:53:29 +08:00
@fuyufjh 是啊,现在写 HTTP 代理意义好像不是很大,不过好像一直到一几年都是这个 Lab
twoconk
2021-01-08 16:57:49 +08:00
lz 大几,动手能力不错!
perapera
2021-01-08 18:10:29 +08:00
@twoconk 哈哈,其实还是挺简单的
nightwitch
2021-01-08 21:53:12 +08:00
csapp 也有一个 proxylab,里面要实现个 LRU 做缓:)
heijiaotuan123
2021-01-08 21:59:30 +08:00
https 可以使用隧道模式, 先发送一个 CONNECT,之后就是 TCP 直接转发
perapera
2021-01-08 23:05:20 +08:00
@nightwitch 我也记得有!!第一次知道 proxy 这个概念就是 CSAPP,不过今天懒得翻书了,改天一定看一下
perapera
2021-01-08 23:06:18 +08:00
@heijiaotuan123 我看的书没几本提到 HTTPS 的,好惨,改天了解一下
vance123
2021-01-08 23:18:30 +08:00
当初拿建行的首页测试 csapp 的 proxylab,结果老是崩溃,最后发现是因为一个长度超过 8000 字符的 url
perapera
2021-01-08 23:31:22 +08:00
@vance123 哈哈,神了,我也想过这个问题,我还查了 url 有没有[长度限制]( https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers),只是我没想过真的会有这么长的 url,真是太年轻,我直接把超过 512 字节的 URL 给 truncate (截断?)了 😬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/742969

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX