[{"data":1,"prerenderedAt":648},["ShallowReactive",2],{"nav_featured_podcast":3,"nav_featured_press_release":21,"navigation_content":30,"engineering_blog_post:nat-and-proxies-part2":378},{"uid":4,"title":5,"episodeLabel":6,"dateLabel":7,"episodeArt":8,"href":20},"from-payment-rails-to-connectivity","From Payment Rails to Connectivity, with The Clearing House's David Watson","EPISODE 5","August 18, 2026",{"dimensions":9,"alt":12,"copyright":13,"url":14,"id":15,"edit":16},{"width":10,"height":11},1064,652,"Payments Cannot Fail — Episode 05 with David Watson",null,"\u002F_prismic-media\u002Fd80df2e47c3ecb6f-cFcyPAgzKCMQEaND_Episode-05-David.jpg","cFcyPAgzKCMQEaND",{"x":17,"y":17,"zoom":18,"background":19},0,1,"transparent","\u002Fresources\u002Fpodcasts\u002Ffrom-payment-rails-to-connectivity",{"uid":22,"title":23,"tag":24,"dateLabel":25,"imageUrl":26,"imageAlt":27,"href":28,"imageFit":29},"form3-expands-strategic-partnership-with-sumup","Form3 expands strategic partnership with SumUp to bring real-time SEPA payments to millions of European small businesses","EU","February 25, 2026","\u002F_prismic-media\u002F3e91177f91478610-QA44Gzev0_tdg3ZI_SumUp.jpg","sumup","\u002Fresources\u002Fpress-releases\u002Fform3-expands-strategic-partnership-with-sumup","cover",{"header":31,"platform":59,"solutions":91,"developers":133,"company":155,"resources":184,"partnerships":208,"footer":220,"mobile":325},{"ctaLabel":32,"ctaHref":33,"topNav":34},"TALK TO OUR TEAM","\u002Fcontact",[35,39,43,47,51,55],{"label":36,"href":37,"key":38},"Platform","\u002Fplatform","platform",{"label":40,"href":41,"key":42},"Solutions","\u002Fsolutions","solutions",{"label":44,"href":45,"key":46},"Developers","\u002Fdevelopers","developers",{"label":48,"href":49,"key":50},"Company","\u002Fcompany","company",{"label":52,"href":53,"key":54},"Resources","\u002Fresources","resources",{"label":56,"href":57,"key":58},"Partnerships","\u002Fpartnerships","partnerships",{"sectionEyebrow":60,"primary":61,"productLinks":65,"enterprise":81,"trustFabric":86},"Explore the Platform",{"heading":62,"body":63,"ctaLabel":64,"ctaHref":37},"Our Payments Platform","A resilient, cloud-native platform powering real-time account-to-account payments at global scale.","See How It Works",[66,69,72,75,78],{"label":67,"href":68},"Payments Processing & Gateway","\u002Fpayments-processing-gateway",{"label":70,"href":71},"Orchestration & Intelligent Routing","\u002Forchestration-intelligent-routing",{"label":73,"href":74},"Payments Simulator","\u002Fpayments-simulator",{"label":76,"href":77},"Sponsor Bank Enablement","\u002Fsponsor-bank-enablement",{"label":79,"href":80},"Informed UI","\u002Finformed-ui",{"heading":82,"body":83,"ctaLabel":84,"ctaHref":85},"Form3 Enterprise","Deploy and manage proven cloud-native payments technology in the environment that works for your institution.","Deploy Enterprise","\u002Fplatform\u002Fenterprise",{"heading":87,"body":88,"ctaLabel":89,"ctaHref":90},"Form3 Trust Fabric","Manage TLS certificates, cryptographic vulnerabilities and quantum readiness at scale, with continuous visibility.","Deploy Trust Fabric","\u002Fplatform\u002Ftrust-fabric",{"regionsIntro":92,"regions":98,"industries":118},{"eyebrow":93,"heading":94,"headingLine2":95,"body":96,"ctaLabel":64,"ctaHref":97},"Regions","Global Reach.","Regional Expertise.","A proven payments platform serving organizations worldwide, with specialized experience across North America, United Kingdom, and Europe.","\u002Fglobal",[99,108,113],{"label":100,"description":101,"ctaLabel":102,"href":103,"extraLinks":104},"North America","Real-time infrastructure, through a resilient, multi-cloud platform built for scale and regulatory confidence.","US HOME","\u002Fsolutions\u002Funited-states",[105],{"label":106,"href":107},"CANADA HOME","\u002Fsolutions\u002Fcanada",{"label":109,"description":110,"ctaLabel":111,"href":112},"United Kingdom","Powering account-to-account payments at the heart of the UK financial ecosystem, with proven resilience.","UK HOME","\u002Fsolutions\u002Funited-kingdom",{"label":114,"description":115,"ctaLabel":116,"href":117},"Europe","Enabling secure, real-time and SEPA payments across European markets through a unified, cloud-native platform.","EUROPE HOME","\u002Fsolutions\u002Feurope",{"eyebrow":119,"links":120},"Industries",[121,125,129],{"label":122,"href":123,"iconSrc":124},"Financial Services","\u002Fsolutions\u002Findustries\u002Ffinancial-services","\u002F_prismic-media\u002F29c09c45caa89db9-kbUHZmgTmuIMbo1t_FinancialServices_menu.svg",{"label":126,"href":127,"iconSrc":128},"Fintech","\u002Fsolutions\u002Findustries\u002Ffintech","\u002F_prismic-media\u002F6de3e7cb4dd8d874-SjwNe6Nh-bbuTi0P_Fintech_menu.svg",{"label":130,"href":131,"iconSrc":132},"Government","\u002Fsolutions\u002Findustries\u002Fgovernment","\u002F_prismic-media\u002Fe71bc3a74a1d2142-kaGgdituzKDnVTbm_Government_menu.svg",{"engineering":134,"api":142,"pressEyebrow":154},{"eyebrow":135,"links":136},"Engineering",[137,139],{"label":135,"href":138},"\u002Fengineering",{"label":140,"href":141},"Accreditations","\u002Faccreditations",{"eyebrow":143,"links":144},"API",[145,148,151],{"label":146,"href":147},"API Docs","https:\u002F\u002Fwww.api-docs.form3.tech\u002F",{"label":149,"href":150},"API Tutorials","https:\u002F\u002Fwww.api-docs.form3.tech\u002Fapi\u002Ftutorials\u002Fgetting-started\u002Fintroduction",{"label":152,"href":153},"API Status","https:\u002F\u002Fstatus.form3.tech\u002F","Latest Press Release",{"about":156,"people":171,"podcastEyebrow":183},{"eyebrow":157,"links":158},"About",[159,162,165,168],{"label":160,"href":161},"Our Story","\u002Fcompany\u002Four-story",{"label":163,"href":164},"Our Team","\u002Fcompany\u002Fteam",{"label":166,"href":167},"Our Success & Strategic Approach","\u002Fcompany\u002Four-success",{"label":169,"href":170},"Customer Stories","\u002Fcompany\u002Fcustomer-stories",{"eyebrow":172,"links":173},"People",[174,177,180],{"label":175,"href":176},"Careers","\u002Fcompany\u002Fcareers",{"label":178,"href":179},"Vacancies","\u002Fcompany\u002Fvacancies",{"label":181,"href":182},"Culture","\u002Fcompany\u002Fculture","Latest Podcast",{"intro":185,"links":189,"pressEyebrow":154,"podcastEyebrow":183},{"eyebrow":52,"heading":186,"body":187,"ctaLabel":188,"ctaHref":53},"Form3 Resources","Our Resources bring together thought leadership, engineering insights, payments expertise, webinars, podcasts, whitepapers, company news and stories from our teams—all in one place.","LEARN MORE",[190,193,196,199,202,205],{"label":191,"href":192},"Payments Cannot Fail Podcast","\u002Fresources\u002Fpodcasts",{"label":194,"href":195},"Press Releases","\u002Fresources\u002Fpress-releases",{"label":197,"href":198},"Payment Insights","\u002Fresources\u002Fpayment-insights",{"label":200,"href":201},"Culture Blog","\u002Fresources\u002Fculture-blog",{"label":203,"href":204},"Engineering Blog","\u002Fresources\u002Fengineering-blog",{"label":206,"href":207},"Events","\u002Fevents",{"intro":209,"links":213,"pressEyebrow":154},{"eyebrow":56,"heading":210,"body":211,"ctaLabel":212,"ctaHref":57},"Partner with Form3","Explore how Form3 works with banks, fintechs, cloud providers, technology platforms and system integrators to accelerate payment modernization, strengthen customer offerings and unlock new opportunities for growth.","Let's Partner Together",[214,217],{"label":215,"href":216},"Technical & Ecosystem Partners","\u002Fpartnerships\u002Ftechnical-ecosystem",{"label":218,"href":219},"Channel & Distribution Partners","\u002Fpartnerships\u002Fchannel-distribution",{"platform":221,"region":229,"development":240,"company":248,"resources":259,"partnerships":267,"stayConnected":272,"legalLinks":292,"certifications":314},{"title":36,"links":222},[223,224,225,226,227,228],{"label":62,"href":37},{"label":67,"href":68},{"label":70,"href":71},{"label":73,"href":74},{"label":76,"href":77},{"label":79,"href":80},{"title":230,"links":231},"Region",[232,234,236,237,238],{"label":233,"href":97},"Global",{"label":235,"href":103},"United States",{"label":109,"href":112},{"label":114,"href":117},{"label":239,"href":107},"Canada",{"title":241,"links":242},"Development",[243,244,245,246,247],{"label":135,"href":138},{"label":140,"href":141},{"label":146,"href":147},{"label":149,"href":150},{"label":152,"href":153},{"title":48,"links":249},[250,251,252,253,254,255,256],{"label":160,"href":161},{"label":163,"href":164},{"label":169,"href":170},{"label":175,"href":176},{"label":178,"href":179},{"label":181,"href":182},{"label":257,"href":258},"Net Zero","\u002Fcompany\u002Fnet-zero",{"title":52,"links":260},[261,262,263,264,265,266],{"label":186,"href":53},{"label":191,"href":192},{"label":194,"href":195},{"label":200,"href":201},{"label":203,"href":204},{"label":206,"href":207},{"title":56,"links":268},[269,270,271],{"label":210,"href":57},{"label":215,"href":216},{"label":218,"href":219},{"title":273,"body":274,"ctaLabel":32,"ctaHref":33,"social":275},"Stay Connected","Form3 is a global account-to-account financial fabric delivering a proven payments platform trusted by banks and fintechs to deliver resilient, real-time payment experiences for their customers at scale.",[276,280,284,288],{"label":277,"href":278,"icon":279},"LinkedIn","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fform3-financial-cloud\u002F","linkedin",{"label":281,"href":282,"icon":283},"X","https:\u002F\u002Fwww.x.com\u002FForm3Cloud","x",{"label":285,"href":286,"icon":287},"YouTube","https:\u002F\u002Fwww.youtube.com\u002F@Form3Cloud","youtube",{"label":289,"href":290,"icon":291},"Instagram","https:\u002F\u002Fwww.instagram.com\u002Fform3.tech","instagram",[293,296,299,302,305,308,311],{"label":294,"href":295},"Terms & Conditions","\u002Flegal\u002Fterms-and-conditions",{"label":297,"href":298},"Privacy Policy","\u002Flegal\u002Fdata-privacy-statement",{"label":300,"href":301},"Recruitment Data Policy","\u002Flegal\u002Frecruitment-data-policy",{"label":303,"href":304},"Modern Slavery Statement","\u002Flegal\u002Fmodern-slavery",{"label":306,"href":307},"License","\u002Flegal\u002Flicense",{"label":309,"href":310},"Cookie Policy","\u002Flegal\u002Fcookie-policy",{"label":312,"href":313},"Manage Cookies","#cookies",[315,317,319,321,323],{"label":316},"ISO 27001",{"label":318},"ISO 27017",{"label":320},"ISO 27018",{"label":322},"ISAE 3000 SOC 2 Type II",{"label":324},"ISO 22301",{"platform":326,"solutions":341,"developers":355,"company":365,"resources":366,"partnerships":374},[327,329,339,340],{"kind":328,"label":62,"href":37},"link",{"kind":330,"label":60,"children":331},"group",[332,333,334,335,337],{"label":67,"href":68},{"label":70,"href":71},{"label":73,"href":74},{"label":76,"href":336},"\u002Fplatform\u002Fsponsor-bank-enablement",{"label":79,"href":338},"\u002Fplatform\u002Finform3d-ui",{"kind":328,"label":82,"href":85},{"kind":328,"label":87,"href":90},[342,344,350],{"kind":328,"label":233,"href":343},"\u002Fsolutions\u002Fglobal",{"kind":330,"label":93,"children":345},[346,347,348,349],{"label":235,"href":103},{"label":239,"href":107},{"label":109,"href":112},{"label":114,"href":117},{"kind":330,"label":119,"children":351},[352,353,354],{"label":122,"href":123},{"label":126,"href":127},{"label":130,"href":131},[356,360],{"kind":330,"label":135,"children":357},[358,359],{"label":135,"href":138},{"label":140,"href":141},{"kind":330,"label":143,"children":361},[362,363,364],{"label":146,"href":147},{"label":149,"href":150},{"label":152,"href":153},[],[367,368,369,370,371,372,373],{"kind":328,"label":186,"href":53},{"kind":328,"label":191,"href":192},{"kind":328,"label":194,"href":195},{"kind":328,"label":197,"href":198},{"kind":328,"label":200,"href":201},{"kind":328,"label":203,"href":204},{"kind":328,"label":206,"href":207},[375,376,377],{"kind":328,"label":210,"href":57},{"kind":328,"label":215,"href":216},{"kind":328,"label":218,"href":219},{"id":379,"uid":380,"url":381,"type":382,"href":383,"tags":384,"first_publication_date":385,"last_publication_date":386,"slugs":387,"linked_documents":389,"lang":390,"alternate_languages":391,"data":392},"alz1HhEAACgAUWf0","nat-and-proxies-part2","\u002Fresources\u002Fengineering-blog\u002Fnat-and-proxies-part2","engineering_blog_post","https:\u002F\u002Fform3-website.cdn.prismic.io\u002Fapi\u002Fv2\u002Fdocuments\u002Fsearch?ref=apnMZxEAACcAKWxv&q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22alz1HhEAACgAUWf0%22%29+%5D%5D",[],"2026-07-19T16:21:53+0000","2026-08-27T22:11:26+0000",[388],"forward-proxies",[],"en-us",[],{"title":393,"excerpt":394,"card_image":395,"published_date":401,"reading_time":402,"tag":403,"dek":404,"featured_image":405,"about_form3":406,"client_about_heading":13,"client_about_body":407,"author_name":13,"author_title":13,"author_photo":408,"author_bio":409,"author_linkedin":410,"slices":412,"meta_title":393,"meta_description":394},"Network Address Translation (NAT) and Proxies (part 2)","Network Address Translation, forward proxies, and reverse proxies, are three common techniques for managing network traffic at scale. This blog will attempt to distil each idea into its simplest form, and write a code example where possible",{"dimensions":396,"alt":393,"copyright":13,"url":398,"id":399,"edit":400},{"width":397,"height":397},800,"\u002F_prismic-media\u002F6b23f7b7f0b874f6-5qNNexOYCLmGAlWV_nat-and-proxies-part2.png","5qNNexOYCLmGAlWV",{"x":17,"y":17,"zoom":18,"background":19},"2022-05-06",7,"Blogs","Exposing pools of machines to clients, or routing network traffic via an intermediary, are common techniques in distributed computing, and large networks. Network Address Translation, forward proxies, and reverse proxies, are three common techniques for managing network traffic at scale. However, I've always found each of these topics to be somewhat mystical, and I've never understood the fundamentals of how each technique works.",{},[],[],{},[],{"link_type":411},"Any",[413,461,482,492,530,546,566,574,589,604,640],{"variation":414,"version":415,"items":416,"primary":417,"id":459,"slice_type":460,"slice_label":13},"default","initial",[],{"body":418},[419,423,437,441,444,447,450,453,456],{"type":420,"text":421,"spans":422},"paragraph","In this blog post, I will attempt to distil each idea into its simplest form, and write a code example where possible.",[],{"type":420,"text":424,"spans":425},"The first blog post on this topic covered:",[426],{"start":427,"end":428,"type":429,"data":430},4,19,"hyperlink",{"id":431,"type":432,"tags":433,"lang":13,"slug":434,"first_publication_date":13,"last_publication_date":13,"link_type":435,"isBroken":436},"Yme0VBIAAC8AtIKZ","broken_type",[],"-","Document",true,{"type":438,"text":439,"spans":440},"list-item","Introduce TCP\u002FIP at a high level, and demonstrate TCP communication in Go.",[],{"type":438,"text":442,"spans":443},"Take a deeper look at IP communication, and the Linux networking stack.",[],{"type":438,"text":445,"spans":446},"Introduce Network Address Translation, and illustrate how it works.",[],{"type":420,"text":448,"spans":449},"This second part will:",[],{"type":438,"text":451,"spans":452},"Examine forward proxies, and show a simple example in Go.",[],{"type":438,"text":454,"spans":455},"Examine reverse proxies, and show a simple example in Go.",[],{"type":438,"text":457,"spans":458},"Summarise the differences and similarities between NATs and proxies, and provide examples of their use cases.",[],"rich_text$2cc2c261-4210-4d67-8636-60f8d3e1383f","rich_text",{"variation":414,"version":415,"items":462,"primary":463,"id":481,"slice_type":460,"slice_label":13},[],{"body":464},[465,469,472,475,478],{"type":466,"text":467,"spans":468},"heading2","Forward proxies",[],{"type":420,"text":470,"spans":471},"Whereas NAT is implemented at the network-layer (i.e. at the IP layer, beneath TCP), proxies operate at the application-layer (e.g. HTTP). This means that proxies are normally specific to the protocol you intend them to operate on. In the examples below, I'll look at HTTP proxies, although proxies could be used for other protocols as well.",[],{"type":420,"text":473,"spans":474},"An HTTP proxy acts an intermediary between the client sending the request, and the server receiving the request. Unlike NAT, which transparently modifies network packets, a proxy accepts and terminates network connections, and then re-transmits requests to the destination.",[],{"type":420,"text":476,"spans":477},"This means that, when you make requests via a proxy, the proxy actually accepts and processes the request, before making a new request on your behalf to the downstream server.",[],{"type":420,"text":479,"spans":480},"Unlike NAT, this is very easy to illustrate in a simple Go application, because all of the work happens at the application layer. Here's a sample application:",[],"rich_text$b2e0ca71-310e-40ff-bf3f-2a7ed8c8e6c7",{"variation":414,"version":415,"items":483,"primary":484,"id":490,"slice_type":491,"slice_label":13},[],{"language_label":13,"code":485},[486],{"type":487,"text":488,"spans":489},"preformatted","package main\n\nimport (\n    \"io\"\n    \"net\u002Fhttp\"\n)\n\nfunc main() {\n    \u002F\u002F The proxy handles all HTTP requests.\n    http.HandleFunc(\"\u002F\", func(w http.ResponseWriter, r *http.Request) {\n        \u002F\u002F The proxy makes a new request using the same HTTP verb and\n        \u002F\u002F relative URL as the original request. For simplicity, the body\n        \u002F\u002F is excluded, so in practice this would only work for GET\n        \u002F\u002F requests.\n        req, err := http.NewRequest(r.Method, r.RequestURI, nil)\n        if err != nil {\n            panic(err)\n        }\n\n        \u002F\u002F The proxy sends a new request, on behalf of the original\n        \u002F\u002F client.\n        res, err := http.DefaultClient.Do(req)\n        if err != nil {\n            panic(err)\n        }\n\n        \u002F\u002F The response is read by the proxy.\n        body, err := io.ReadAll(res.Body)\n        if err != nil {\n            panic(err)\n        }\n        defer res.Body.Close()\n\n        \u002F\u002F The contents of the proxied request are then written back\n        \u002F\u002F to the HTTP response of the original client's request.\n        w.WriteHeader(res.StatusCode)\n        w.Write(body)\n    })\n    http.ListenAndServe(\":8080\", nil)\n}",[],"code_block$255fbfa1-8bfe-4d3f-b58e-48122c2814e8","code_block",{"variation":414,"version":415,"items":493,"primary":494,"id":529,"slice_type":460,"slice_label":13},[],{"body":495},[496,499,502,505,508,511,514,517,520,523,526],{"type":420,"text":497,"spans":498},"This simple example handles all web requests by:",[],{"type":438,"text":500,"spans":501},"Reading the request.",[],{"type":438,"text":503,"spans":504},"Sending a new HTTP request that looks like the one it received.",[],{"type":438,"text":506,"spans":507},"Reading the response to this request.",[],{"type":438,"text":509,"spans":510},"Sending the same response back to the original client.",[],{"type":420,"text":512,"spans":513},"In reality, this is a very simple example (it will only work for GET requests among other things). However, it does illustrate the following main points:",[],{"type":438,"text":515,"spans":516},"Network packets are not handled transparently by the proxy.",[],{"type":438,"text":518,"spans":519},"Network traffic is processed at the application layer by the proxy.",[],{"type":438,"text":521,"spans":522},"TCP connections are terminated from the client by the proxy.",[],{"type":438,"text":524,"spans":525},"New connections are made downstream from the proxy to the destination.",[],{"type":420,"text":527,"spans":528},"Whilst this is a very different approach to NAT, it does have the same effect of masking the source IP address from the destination server's point of view. Since all requests are re-originated from the proxy, it is the proxy's IP address that will appear as the source IP address, at least at the network layer. Whether or not the same is true at higher levels of the network stack (e.g. in HTTP headers) depends on your implementation, but forward proxies like this can also be used to mask source IP addresses for many of the same reasons as NAT.",[],"rich_text$5575de86-0e6a-4bbd-86f3-4b3cc62e788d",{"variation":414,"version":415,"items":531,"primary":532,"id":545,"slice_type":460,"slice_label":13},[],{"body":533},[534,536,539,542],{"type":466,"text":467,"spans":535},[],{"type":438,"text":537,"spans":538},"Forward proxies operate at the application-layer.",[],{"type":438,"text":540,"spans":541},"They receive and terminate network-level traffic, e.g. TCP connections.",[],{"type":438,"text":543,"spans":544},"Forward proxies make onward requests on behalf of the original client, so the requests appear to originate from the proxy.",[],"rich_text$00fffbee-5bb8-48fc-a0ce-ecf94c20d5d3",{"variation":414,"version":415,"items":547,"primary":548,"id":565,"slice_type":460,"slice_label":13},[],{"body":549},[550,553,556,559,562],{"type":466,"text":551,"spans":552},"Reverse proxies",[],{"type":420,"text":554,"spans":555},"A reverse proxy operates in much the same way as a forward proxy, except that the address that is proxied is configured in advance in the proxy, rather than being dynamically based on the client's request.",[],{"type":420,"text":557,"spans":558},"When a request is sent to a forward proxy, the request is forwarded on to the original recipient indicated by the client's HTTP request. When a request is sent to a reverse proxy, the proxy decides where to forward the request based on some predetermined configuration.",[],{"type":420,"text":560,"spans":561},"This makes reverse proxies useful for presenting a public IP address for a set of private resources, like a set of private, back-end servers.",[],{"type":420,"text":563,"spans":564},"This is illustrated in the following simple Golang application:",[],"rich_text$63b9a9c4-c772-4870-8d35-a83d90269a0d",{"variation":414,"version":415,"items":567,"primary":568,"id":573,"slice_type":491,"slice_label":13},[],{"language_label":13,"code":569},[570],{"type":487,"text":571,"spans":572},"package main\n\nimport (\n    \"io\"\n    \"net\u002Fhttp\"\n)\n\nfunc main() {\n    \u002F\u002F The proxy listens for all HTTP traffic.\n    http.HandleFunc(\"\u002F\", func(w http.ResponseWriter, r *http.Request) {\n        \u002F\u002F The proxy handles the request by performing a pre-determined action. In\n        \u002F\u002F reality, it is likley to forward the request to another upstream server, \n        \u002F\u002F but in this example it simply makes a request to Google on behalf of\n        \u002F\u002F the original client.\n        req, err := http.NewRequest(http.MethodGet, \"https:\u002F\u002Fwww.google.com\", nil)\n        if err != nil {\n            panic(err)\n        }\n\n        \u002F\u002F The proxy makes the request on behalf of the client.\n        res, err := http.DefaultClient.Do(req)\n        if err != nil {\n            panic(err)\n        }\n        defer res.Body.Close()\n\n        \u002F\u002F The proxy copies the contents of the proxied response into\n        \u002F\u002F the response to the original client's request.\n        w.WriteHeader(res.StatusCode)\n        _, err = io.Copy(w, res.Body)\n        if err != nil {\n            panic(err)\n        }\n    })\n    http.ListenAndServe(\":8080\", nil)\n}",[],"code_block$22570b86-ca4e-4464-949b-327d32743912",{"variation":414,"version":415,"items":575,"primary":576,"id":588,"slice_type":460,"slice_label":13},[],{"body":577},[578],{"type":420,"text":579,"spans":580},"In this example, all requests to the reverse proxy are forwarded to https:\u002F\u002Fwww.google.com. This forwarding URL represents the static configuration that will determine how your proxy will route requests. If I run this example locally, and then curl -v http:\u002F\u002Flocalhost:8080, the Google home page is returned.",[581,585],{"start":582,"end":583,"type":584},68,90,"em",{"start":586,"end":587,"type":584},244,273,"rich_text$e4ee697e-5253-4f91-9cd8-ba8a4eefc7f4",{"variation":414,"version":415,"items":590,"primary":591,"id":603,"slice_type":460,"slice_label":13},[],{"body":592},[593,595,598,600],{"type":466,"text":551,"spans":594},[],{"type":438,"text":596,"spans":597},"Reverse proxies operate at the application-layer.",[],{"type":438,"text":540,"spans":599},[],{"type":438,"text":601,"spans":602},"Reverse proxies make onward requests on behalf of the original client according to a set of pre-defined rules.",[],"rich_text$7479b5db-1c02-4a11-a472-59cf862be47e",{"variation":414,"version":605,"items":606,"primary":607,"id":638,"slice_type":639,"slice_label":13},"",[],{"eyebrow":13,"heading":608,"body":613,"cta_label":13,"cta_link":617,"aside_type":618,"aside_image":619,"aside_video":626,"aside_video_poster":628,"aside_video_reduced_motion":629,"aside_video_url":13,"aside_embed":630,"pardot_form_url":13,"form_submit_label":13,"form_variant":631,"form_heading":13,"redirect_on_success":632,"theme":633,"overlay_pattern":634,"background_continuation":635,"media_position":636,"aside_vertical_align":637},[609],{"type":466,"text":610,"spans":611,"direction":612},"Summary",[],"ltr",[614],{"type":420,"text":615,"spans":616,"direction":612},"This two-part blog post has described the behaviour and characteristics of Network Address Translation, forward proxies, and reverse proxies. This is summarised below:",[],{"link_type":411},"Image",{"dimensions":620,"alt":13,"copyright":13,"url":623,"id":624,"edit":625},{"width":621,"height":622},2066,810,"\u002F_prismic-media\u002F96ae868fe0c0cd2b-D5mgEm-CzvBDvfGY_20cbc123-d4a3-4cd7-ba2b-fda933b.png","D5mgEm-CzvBDvfGY",{"x":17,"y":17,"zoom":18,"background":19},{"link_type":627},"Media",{},{},{},"Contact (default)",{"link_type":435},"Light","None","Solid color (no gradient)","Right","Top of section","content_block$ba9acb31-d594-43a6-a6ac-a9ad64ba2687","content_block",{"variation":414,"version":415,"items":641,"primary":642,"id":647,"slice_type":460,"slice_label":13},[],{"body":643},[644],{"type":420,"text":645,"spans":646},"I hope you found this blog post useful in understanding these three networking techniques in the future, and you now consider them somewhat less mystical!",[],"rich_text$5e5aa4ba-7b62-45e8-99d5-1ae1b9221999",1788466508455]