V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
perapera
V2EX  ›  程序员

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

  •  1
     
  •   perapera · 2021-01-08 13:51:18 +08:00 · 3612 次点击
    这是一个创建于 1412 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    10 条回复    2021-01-08 23:31:22 +08:00
    fuyufjh
        1
    fuyufjh  
       2021-01-08 14:46:03 +08:00
    记忆中 Lab1 一直是 MapReduce 。然后发现 lz 看的是 2004 年的课程网站
    perapera
        2
    perapera  
    OP
       2021-01-08 14:53:29 +08:00
    @fuyufjh 是啊,现在写 HTTP 代理意义好像不是很大,不过好像一直到一几年都是这个 Lab
    twoconk
        3
    twoconk  
       2021-01-08 16:57:49 +08:00
    lz 大几,动手能力不错!
    perapera
        4
    perapera  
    OP
       2021-01-08 18:10:29 +08:00
    @twoconk 哈哈,其实还是挺简单的
    nightwitch
        5
    nightwitch  
       2021-01-08 21:53:12 +08:00
    csapp 也有一个 proxylab,里面要实现个 LRU 做缓:)
    heijiaotuan123
        6
    heijiaotuan123  
       2021-01-08 21:59:30 +08:00
    https 可以使用隧道模式, 先发送一个 CONNECT,之后就是 TCP 直接转发
    perapera
        7
    perapera  
    OP
       2021-01-08 23:05:20 +08:00
    @nightwitch 我也记得有!!第一次知道 proxy 这个概念就是 CSAPP,不过今天懒得翻书了,改天一定看一下
    perapera
        8
    perapera  
    OP
       2021-01-08 23:06:18 +08:00
    @heijiaotuan123 我看的书没几本提到 HTTPS 的,好惨,改天了解一下
    vance123
        9
    vance123  
       2021-01-08 23:18:30 +08:00 via Android
    当初拿建行的首页测试 csapp 的 proxylab,结果老是崩溃,最后发现是因为一个长度超过 8000 字符的 url
    perapera
        10
    perapera  
    OP
       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 (截断?)了 😬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2839 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:22 · PVG 23:22 · LAX 07:22 · JFK 10:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.