{"version":3,"sources":["webpack:///./src/assets/images/dev_tool_request_headers.png","webpack:///./src/assets/images/open_dev_tools_chrome.png","webpack:///./src/assets/images/dev_tool_request_response.png","webpack:///./src/assets/images/lsof_output.png","webpack:///./src/assets/images/Http_response_anatomy.png","webpack:///./src/views/Chap26BasicHttpServer.vue?d6fd","webpack:///src/views/Chap26BasicHttpServer.vue","webpack:///./src/views/Chap26BasicHttpServer.vue?4598","webpack:///./src/views/Chap26BasicHttpServer.vue","webpack:///./src/assets/images/http_status_code.png","webpack:///./src/assets/images/curl_decomposition.png","webpack:///./src/assets/images/request.png","webpack:///./src/assets/images/ab_testing_server.png","webpack:///./src/assets/images/test_local_server.png","webpack:///./src/assets/images/Http_request_anatomy.png","webpack:///./src/assets/images/simple_web_page.png","webpack:///./src/assets/images/send_html_server.png","webpack:///./src/assets/images/dev_tool_request_get_404.png","webpack:///./src/assets/images/dev_tools_opened_chrome.png"],"names":["module","exports","render","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","_v","directives","name","rawName","pre","staticRenderFns","components","FeedbackInvite","BuyCopyInvite","NewsletterInput","ChapterHeading","ChapterBibliography","TOCChapter","NavBar","BIconLink45deg","Footer","created","window","data","publicPath","metaInfo","title","htmlAttrs","lang","meta","charset","content","property","link","rel","href","component"],"mappings":"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","file":"js/chunk-0b146112.63d12ef7.js","sourcesContent":["module.exports = __webpack_public_path__ + \"img/dev_tool_request_headers.9f882f6d.png\";","module.exports = __webpack_public_path__ + \"img/open_dev_tools_chrome.4d63c593.png\";","module.exports = __webpack_public_path__ + \"img/dev_tool_request_response.821184ac.png\";","module.exports = __webpack_public_path__ + \"img/lsof_output.8bd195a2.png\";","module.exports = __webpack_public_path__ + \"img/Http_response_anatomy.d3a140b3.png\";","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('NavBar'),_c('div',{staticClass:\"container-fluid\"},[_c('b-row',[_c('TOCChapter',{attrs:{\"chapter-id\":\"Chap26BasicHttpServer\"}}),_c('b-col'),_c('b-col',{attrs:{\"role\":\"main\",\"md\":\"6\"}},[_c('ChapterHeading',{attrs:{\"chapter-title\":\"Chapter 26: Basic HTTP Server\",\"image-name\":\"http-server.jpg\",\"image-alt\":\"Basic HTTP Server\"}}),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"what-will-you-learn-in-this-chapter\"}}),_c('h1',{attrs:{\"data-number\":\"1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"1\")]),_vm._v(\" What will you learn in this chapter? \"),_c('a',{attrs:{\"href\":\"#what-will-you-learn-in-this-chapter\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"What is an HTTP Server?\")])]),_c('li',[_c('p',[_vm._v(\"What is an HTTP Client?\")])]),_c('li',[_c('p',[_vm._v(\"What is HTML, and how to create an HTML file?\")])]),_c('li',[_c('p',[_vm._v(\"What are HTTP and IP?\")])]),_c('li',[_c('p',[_vm._v(\"How an HTTP request is formed\")])]),_c('li',[_c('p',[_vm._v(\"How an HTTP response is formed\")])]),_c('li',[_c('p',[_vm._v(\"How to build a basic webserver.\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"technical-concepts-covered\"}}),_c('h1',{attrs:{\"data-number\":\"2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"2\")]),_vm._v(\" Technical concepts covered \"),_c('a',{attrs:{\"href\":\"#technical-concepts-covered\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"HTTP\")])]),_c('li',[_c('p',[_vm._v(\"HTML\")])]),_c('li',[_c('p',[_vm._v(\"Request, response\")])]),_c('li',[_c('p',[_vm._v(\"Client, Server\")])]),_c('li',[_c('p',[_vm._v(\"DNS\")])]),_c('li',[_c('p',[_vm._v(\"Handler\")])]),_c('li',[_c('p',[_vm._v(\"Interface implementation\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"what-is-behind-a-web-page\"}}),_c('h1',{attrs:{\"data-number\":\"3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"3\")]),_vm._v(\" What is behind a web page \"),_c('a',{attrs:{\"href\":\"#what-is-behind-a-web-page\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"On figure \"),_c('a',{attrs:{\"href\":\"#fig:A-simple-webpage-screen\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:A-simple-webpage-screen\"}},[_vm._v(\"1\")]),_vm._v(\" you can see a very simple web page.\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/simple_web_page.png'),\"alt\":\"A simple web page[fig:A-simple-webpage-screen]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"A simple web page\"),_c('span',{attrs:{\"id\":\"fig:A-simple-webpage-screen\",\"label\":\"fig:A-simple-webpage-screen\"}},[_vm._v(\"[fig:A-simple-webpage-screen]\")])])],1),_c('p',[_vm._v(\"What is behind that? The web browser will load source code. This source code is then transformed into what you see on the screen. Here is the source code that generates the page in figure \"),_c('a',{attrs:{\"href\":\"#fig:A-simple-webpage-screen\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:A-simple-webpage-screen\"}},[_vm._v(\"1\")]),_vm._v(\":\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n\\n \\n Title of page\\n \\n \\n

Title

\\n

Welcome to my website

\\n \\n \\n\")])]),_c('p',[_vm._v(\"This is HTML. HTML means Hypertext Markup Language. It’s not a programming language but a \"),_c('strong',[_vm._v(\"markup\")]),_vm._v(\" language.\")]),_c('p',[_vm._v(\"With HTML, you can annotate a document to warn the web browser to apply a specific format to your content.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"html-basics\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"4\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"4\")]),_vm._v(\" HTML basics \"),_c('a',{attrs:{\"href\":\"#html-basics\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Let’s detail the code of the first example :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n\\n\\n\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"First, you can note that the document begins by \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\")])]),_vm._v(\". This line tells the web browser that what follows is written using HTML.\")])]),_c('li',[_c('p',[_vm._v(\"The document is composed of elements. Each element begins with a \"),_c('strong',[_vm._v(\"start tag\")]),_vm._v(\" and ends with an \"),_c('strong',[_vm._v(\"end tag\")]),_vm._v(\".\")])]),_c('li',[_c('p',[_vm._v(\"Elements can be nested. I can put one element inside another element.\")])]),_c('li',[_c('p',[_vm._v(\"The first element begins with the start tag \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\")])]),_vm._v(\" and ends with the end tag \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\")])]),_vm._v(\". It says between the start and the end tag; we will have other HTML elements.\")])]),_c('li',[_c('p',[_vm._v(\"Inside this first element, we have another element :\")])])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n Title of page\\n\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Start tag is \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\")])]),_vm._v(\" and end tag is \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\")])]),_vm._v(\". This is the head section. Inside it, we will find metadata about the document. Metadata is information related to the document.\")]),_c('ul',[_c('li',[_vm._v(\"Inside it, there is another element. It’s the title of the page. The title of the page will be displayed inside the browser tab.\")])])]),_c('li',[_c('p',[_vm._v(\"The next element is the body. It is the contents of the document: what will be displayed on the browser!\")])])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n

Title

\\n

Welcome to my website

\\n \\n\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"In the body, we have two elements and one comment\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"The first element is a heading of level 1: \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"

Title

\")])]),_vm._v(\".\")])]),_c('li',[_c('p',[_vm._v(\"A paragraph: \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"

Welcome to my website

\")])]),_vm._v(\".\")])]),_c('li',[_c('p',[_vm._v(\"A comment \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"\")])])])])])]),_c('li',[_c('p',[_vm._v(\"On the rendered web page, you will not see the tags. The web browser uses tags to render the page.\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"summary\"}}),_c('h4',{attrs:{\"data-number\":\"4.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"4.0.0.1\")]),_vm._v(\" Summary : \"),_c('a',{attrs:{\"href\":\"#summary\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"With HTML, you can build web pages.\")])]),_c('li',[_c('p',[_vm._v(\"Elements begin with a start tag and an end tag.\")])]),_c('li',[_c('p',[_vm._v(\"Tags denote elements and are interpreted by the browser.\")])]),_c('li',[_c('p',[_vm._v(\"Elements can be nested.\")])]),_c('li',[_c('p',[_vm._v(\"Here is the skeleton of a simple web page :\")])])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n\\n \\n Title of page\\n \\n \\n \\n \\n\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"what-is-http-secwhat-is-http\"}}),_c('h1',{attrs:{\"data-number\":\"5\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"5\")]),_vm._v(\" What is HTTP ?\"),_c('span',{attrs:{\"id\":\"sec:What-is-HTTP\",\"label\":\"sec:What-is-HTTP\"}},[_vm._v(\"[sec:What-is-HTTP]\")]),_vm._v(\" \"),_c('a',{attrs:{\"href\":\"#what-is-http-secwhat-is-http\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"HTTP means Hypertext Transfer Protocol. HTTP is a \"),_c('strong',[_vm._v(\"communication protocol\")]),_vm._v(\". It is a set of specifications that describe how two parties can communicate.\")]),_c('p',[_vm._v(\"In our everyday life, we use communication protocols: when you have a conversation with another human, there are some implied rules to follow. When you meet, you greet each other. Then the conversation starts. The conversation is sequential. The first interlocutor speaks, then the other one speaks. The end of the dialog is often punctuated with a “Goodbye” or “See you”.\")]),_c('p',[_vm._v(\"HTTP is a protocol designed to make machines exchange information over a network. HTTP exists in 2 main versions HTTP/1.1 and HTTP/2. The two specifications are dense. We will focus on some key elements that you must know in the next sections :\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"the-journey-of-an-http-request\"}}),_c('h1',{attrs:{\"data-number\":\"6\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"6\")]),_vm._v(\" The journey of an HTTP request \"),_c('a',{attrs:{\"href\":\"#the-journey-of-an-http-request\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"When you type in an \"),_c('strong',[_vm._v(\"URL\")]),_vm._v(\" inside your web browser and type enter an \"),_c('strong',[_vm._v(\"HTTP request\")]),_vm._v(\" is sent on the network.\")]),_c('p',[_vm._v(\"An HTTP request is a message sent by a sender (the client) to a recipient (the server).\")]),_c('p',[_vm._v(\"Servers are identified on the network by a unique name. This is the \"),_c('strong',[_vm._v(\"domain name\")]),_vm._v(\". You can also send a request to a server by providing an \"),_c('strong',[_vm._v(\"IP address\")]),_vm._v(\". When you make an HTTP request, you need to provide an IP address or a domain name for the network to route your request to the correct server.\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/request.png'),\"alt\":\"Sequence diagram of an HTTP request[fig:Sequence-diagram-of-request]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Sequence diagram of an HTTP request\"),_c('span',{attrs:{\"id\":\"fig:Sequence-diagram-of-request\",\"label\":\"fig:Sequence-diagram-of-request\"}},[_vm._v(\"[fig:Sequence-diagram-of-request]\")])])],1),_c('p',[_vm._v(\"Let’s define some important terms :\")]),_c('ul',[_c('li',[_c('p',[_c('strong',[_vm._v(\"IP\")]),_vm._v(\" : \"),_c('strong',[_vm._v(\"I\")]),_vm._v(\"nternet \"),_c('strong',[_vm._v(\"P\")]),_vm._v(\"rotocol. This a communication protocol between computers on a network and between different networks. You use this protocol when you browse the web.\")])]),_c('li',[_c('p',[_vm._v(\"An \"),_c('strong',[_vm._v(\"IP address\")]),_vm._v(\" is a string composed of numbers separated by points (.) or colons (:). It is attributed to each device connected to a network that uses the Internet Protocol for communication.\"),_c('a',{staticClass:\"footnote-ref\",attrs:{\"href\":\"#fn1\",\"id\":\"fnref1\",\"role\":\"doc-noteref\"}},[_c('sup',[_vm._v(\"1\")])]),_vm._v(\".\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1\")])]),_vm._v(\" is an IP address. \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"::1\")])]),_vm._v(\" is also an IP address. Note the difference between those two examples. The first one is an IPv4 address the second one is an IPv6 address.\")])]),_c('li',[_c('p',[_vm._v(\"A \"),_c('strong',[_vm._v(\"domain name\")]),_vm._v(\" is a string that identifies a server (or several servers) on the network. Domain names are managed by a complex but clever system named the \"),_c('strong',[_vm._v(\"Domain Name System\")]),_vm._v(\" (DNS).\")])])]),_c('p',[_vm._v(\"An HTTP server is a computer connected to the network thanks to the Internet Protocol. This computer runs a program that will handle HTTP requests sent to it by clients. Servers are rarely turned off. We will build a server!\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"anatomy-of-an-http-request\"}}),_c('h1',{attrs:{\"data-number\":\"7\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7\")]),_vm._v(\" Anatomy of an HTTP request \"),_c('a',{attrs:{\"href\":\"#anatomy-of-an-http-request\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Here is an HTTP request (version 1.1 of the protocol). An HTTP request is a succession of lines sent on the network.\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"GET /pub/WWW/TheProject.html HTTP/1.1\\nHost: www.w3.org\\nUser-Agent: curl/7.54.0\\nAccept: */*\")])]),_c('p',[_vm._v(\"On figure \"),_c('a',{attrs:{\"href\":\"#fig:Anatomy-of-HTTP-request\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:Anatomy-of-HTTP-request\"}},[_vm._v(\"3\")]),_vm._v(\" you can see a detailed schema of a request :\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/Http_request_anatomy.png'),\"alt\":\"Anatomy of an HTTP request[fig:Anatomy-of-HTTP-request]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Anatomy of an HTTP request\"),_c('span',{attrs:{\"id\":\"fig:Anatomy-of-HTTP-request\",\"label\":\"fig:Anatomy-of-HTTP-request\"}},[_vm._v(\"[fig:Anatomy-of-HTTP-request]\")])])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"building-blocks-of-a-request\"}}),_c('h4',{attrs:{\"data-number\":\"7.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7.0.0.1\")]),_vm._v(\" Building blocks of a request \"),_c('a',{attrs:{\"href\":\"#building-blocks-of-a-request\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The request is composed of three blocks :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"The request line\")])]),_c('li',[_c('p',[_vm._v(\"The headers\")])]),_c('li',[_c('p',[_vm._v(\"The message body\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"vocabulary\"}}),_c('h4',{attrs:{\"data-number\":\"7.0.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"7.0.0.2\")]),_vm._v(\" Vocabulary \"),_c('a',{attrs:{\"href\":\"#vocabulary\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_c('strong',[_vm._v(\"URI\")]),_vm._v(\" : \"),_c('strong',[_vm._v(\"U\")]),_vm._v(\"nified \"),_c('strong',[_vm._v(\"R\")]),_vm._v(\"essource \"),_c('strong',[_vm._v(\"I\")]),_vm._v(\"dentifier. Here : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"/pub/WWW/TheProject.html\")])])]),_c('ul',[_c('li',[_vm._v(\"This is the identification of the resource (here an HTML page) that we want to retrieve\")])])]),_c('li',[_c('p',[_c('strong',[_vm._v(\"URL\")]),_vm._v(\" means “Uniform Ressource Locator”. Here it’s \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http://www.w3.org/pub/WWW/TheProject.html\")])])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"It identifies the resource\")])]),_c('li',[_c('p',[_vm._v(\"And indicates how the resource can be retrieved (make an HTTP request to the host www.w3.org)\")])])])]),_c('li',[_c('p',[_vm._v(\"Each HTTP request has a \"),_c('strong',[_vm._v(\"method\")]),_vm._v(\". Possible standard values are : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT\")])]),_vm._v(\".\")]),_c('ul',[_c('li',[_vm._v(\"The web browser sends an HTTP \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"GET\")])]),_vm._v(\" request when a new page is loaded\")])])]),_c('li',[_c('p',[_vm._v(\"The client may add \"),_c('strong',[_vm._v(\"headers\")]),_vm._v(\" to the requests. Headers are a way for “the client to pass to the server information abou t the request and about itself.”\"),_c('a',{staticClass:\"footnote-ref\",attrs:{\"href\":\"#fn2\",\"id\":\"fnref2\",\"role\":\"doc-noteref\"}},[_c('sup',[_vm._v(\"2\")])]),_vm._v(\".\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Ex : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Host: www.w3.org\")])]),_vm._v(\" : this header indicates the network location of the requested resource.\")])]),_c('li',[_c('p',[_vm._v(\"Ex : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Accept: */*\")])]),_vm._v(\" : the client says to the client that he can accept any media type: JSON, XML ...\")])]),_c('li',[_c('p',[_vm._v(\"Ex : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"User-Agent: curl/7.54.0\")])]),_vm._v(\" : information about the program that has issued the request\")])])])]),_c('li',[_c('p',[_vm._v(\"The \"),_c('strong',[_vm._v(\"message body\")]),_vm._v(\" is the last part of the request. In the previous example, it’s empty. It is used to carry information.\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"anatomy-of-an-http-response\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"8\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8\")]),_vm._v(\" Anatomy of an HTTP response \"),_c('a',{attrs:{\"href\":\"#anatomy-of-an-http-response\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Here is an HTTP response :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"HTTP/1.1 404 Not Found\\nContent-Type: text/plain; charset=utf-8\\nDate: Fri, 03 Apr 2020 06:26:25 GMT\\nContent-Length: 19\\n\\n404 page not found\")])]),_c('p',[_vm._v(\"On figure \"),_c('a',{attrs:{\"href\":\"#fig:Anatomy-of-a-http-response\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:Anatomy-of-a-http-response\"}},[_vm._v(\"4\")]),_vm._v(\" you can see how the response is structured :\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/Http_response_anatomy.png'),\"alt\":\"Anatomy of an HTTP response[fig:Anatomy-of-a-http-response]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Anatomy of an HTTP response\"),_c('span',{attrs:{\"id\":\"fig:Anatomy-of-a-http-response\",\"label\":\"fig:Anatomy-of-a-http-response\"}},[_vm._v(\"[fig:Anatomy-of-a-http-response]\")])])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"building-blocks-of-a-response\"}}),_c('h4',{attrs:{\"data-number\":\"8.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8.0.0.1\")]),_vm._v(\" Building blocks of a response \"),_c('a',{attrs:{\"href\":\"#building-blocks-of-a-response\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The response is composed of three blocks :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"The status line\")])]),_c('li',[_c('p',[_vm._v(\"The headers\")])]),_c('li',[_c('p',[_vm._v(\"The message body\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"vocabulary-1\"}}),_c('h4',{attrs:{\"data-number\":\"8.0.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"8.0.0.2\")]),_vm._v(\" Vocabulary \"),_c('a',{attrs:{\"href\":\"#vocabulary-1\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"The \"),_c('strong',[_vm._v(\"status line\")]),_vm._v(\" is the first line of the response\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"It informs about the version of the protocol used\")])]),_c('li',[_c('p',[_vm._v(\"The status of the request indicated by a \"),_c('strong',[_vm._v(\"code\")]),_vm._v(\" and a \"),_c('strong',[_vm._v(\"reason phrase.\")])])])])]),_c('li',[_c('p',[_c('strong',[_vm._v(\"Response headers\")]),_vm._v(\" “allow the server to pass additional information about the response which cannot be placed in the Status-Line”\"),_c('a',{staticClass:\"footnote-ref\",attrs:{\"href\":\"#fn3\",\"id\":\"fnref3\",\"role\":\"doc-noteref\"}},[_c('sup',[_vm._v(\"3\")])])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"The header \"),_c('strong',[_vm._v(\"Content-Type\")]),_vm._v(\" informs the client about the media type of the content and eventually the character set\")])]),_c('li',[_c('p',[_c('strong',[_vm._v(\"Content-Length\")]),_vm._v(\" : informs the client about the size of the message body\")])])])]),_c('li',[_c('p',[_vm._v(\"The \"),_c('strong',[_vm._v(\"message body\")]),_vm._v(\" will contain the information requested.\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"For a website, the message body will contain an HTML page.\")])]),_c('li',[_c('p',[_vm._v(\"If it’s an HTML page, the header \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Content-Type\")])]),_vm._v(\" will be equal to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"text/html\")])])])])])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"status-code-of-an-http-response\"}}),_c('h1',{attrs:{\"data-number\":\"9\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"9\")]),_vm._v(\" Status code of an HTTP response \"),_c('a',{attrs:{\"href\":\"#status-code-of-an-http-response\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"An HTTP response will be composed of a status code. The status code is an integer number. You need to know the most common ones :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Status Code \"),_c('strong',[_vm._v(\"200\")]),_vm._v(\" OK: the request was successfully treated by the server\")])]),_c('li',[_c('p',[_vm._v(\"Status Code \"),_c('strong',[_vm._v(\"400\")]),_vm._v(\" Bad Request: the request sent by the client is erroneous (malformed request, syntax error...)\")])]),_c('li',[_c('p',[_vm._v(\"Status Code \"),_c('strong',[_vm._v(\"404\")]),_vm._v(\" Not found: the server did not find the resource requested by the client.\")])]),_c('li',[_c('p',[_vm._v(\"Status Code \"),_c('strong',[_vm._v(\"500\")]),_vm._v(\" Internal Server Error : “the server encountered an unexpected condition that prevented it from fulfilling the request.”\"),_c('a',{staticClass:\"footnote-ref\",attrs:{\"href\":\"#fn4\",\"id\":\"fnref4\",\"role\":\"doc-noteref\"}},[_c('sup',[_vm._v(\"4\")])])])])]),_c('p',[_vm._v(\"Other codes are available. You can find a list here https://tools.ietf.org/html/rfc7231#section-6.1.\")]),_c('p',[_vm._v(\"One thing to remember is that the first number of the status code indicates the status code class. Five classes exist (see figure) :\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/http_status_code.png'),\"alt\":\"The five classes of status codes\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"The five classes of status codes\")])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"how-to-build-a-simple-http-server\"}}),_c('h1',{attrs:{\"data-number\":\"10\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10\")]),_vm._v(\" How to build a simple HTTP Server \"),_c('a',{attrs:{\"href\":\"#how-to-build-a-simple-http-server\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"You can find all you need to build a web server in the standard library. The functions are available in the net/http package :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// basic-http-server/first/main.go\\npackage main\\n\\nimport (\\n \\\"log\\\"\\n \\\"net/http\\\"\\n \\\"time\\\"\\n)\\n\\nfunc main() {\\n // create a server\\n myServer := &http.Server{\\n // set the server address\\n Addr: \\\"127.0.0.1:8080\\\",\\n // define some specific configuration\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n }\\n // launch the server\\n log.Fatal(myServer.ListenAndServe())\\n}\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"code-explanations\"}}),_c('h4',{attrs:{\"data-number\":\"10.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.0.0.1\")]),_vm._v(\" Code explanations \"),_c('a',{attrs:{\"href\":\"#code-explanations\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"We first begin by creating a variable \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"myServer\")])]),_vm._v(\" which is a pointer to a new \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.Server\")])]),_vm._v(\" struct.The struct \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.Server\")])]),_vm._v(\" allow you to define a specific configuration for your server : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Addr\")])]),_vm._v(\" : the address on which the server will listen for requests. In my example, I set it to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1:8080\")])]),_vm._v(\". This means that clients can send requests to the address \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1:8080\")])]),_vm._v(\".\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Note that the address is composed of two parts : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"8080\")])]),_vm._v(\" separated by a colon. The first part is the IP address (IPv4) the second is a port number.\")]),_c('ul',[_c('li',[_vm._v(\"The \"),_c('strong',[_vm._v(\"port number\")]),_vm._v(\" complete the IP address. It’s an unsigned integer (16 bits). The operating system behind the Go program will direct received packets to this Go program that listens on these specific ports. On a single machine, you can run multiple servers with the same address IP and a different port. (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1:8081\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1:8083\")])]),_vm._v(\", \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1:8084\")])]),_vm._v(\")\")])])])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"ReadTimeout\")])]),_vm._v(\" : the maximum amount of time given to the web server to read the client’s request.\")]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"WriteTimeout\")])]),_vm._v(\" : this is the maximum duration allowed to the server handlers to write the response. The last line of the program needs some explanations :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"log.Fatal(myServer.ListenAndServe())\")])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"myServer.ListenAndServe()\")])]),_vm._v(\" is a method call that will launch the server. This method would return an error if something went wrong. For example, you will receive an error if the port number is already in use. \"),_c('u',[_vm._v(\"This function will run as long as the server run\")]),_vm._v(\". When the server does not run anymore, the method returns an error, which is passed to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"log.Fatal\")])]),_vm._v(\".\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"build-and-run\"}}),_c('h4',{attrs:{\"data-number\":\"10.0.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"10.0.0.2\")]),_vm._v(\" Build and run \"),_c('a',{attrs:{\"href\":\"#build-and-run\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Let’s build and run our brand new server :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ go build main.go\\n$ ./main\")])]),_c('p',[_vm._v(\"The program will run till an error occurred. Servers may run for months and even years without the need to be restarted.\")]),_c('p',[_vm._v(\"Let’s test our server. We have two options :\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"With a web browser (Chrome)\")])]),_c('li',[_c('p',[_vm._v(\"With the command-line tool cURL\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"how-to-test-a-local-web-server-with-chrome\"}}),_c('h1',{attrs:{\"data-number\":\"11\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"11\")]),_vm._v(\" How to test a local web server with Chrome \"),_c('a',{attrs:{\"href\":\"#how-to-test-a-local-web-server-with-chrome\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The first option is easy. Open your browser and type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"127.0.0.1:8080\")])]),_vm._v(\".\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/test_local_server.png'),\"alt\":\"Test on a web browser\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Test on a web browser\")])],1),_c('p',[_vm._v(\"Our server answered “404 page not found” ! It answered something!\")]),_c('p',[_vm._v(\"You have the ability with Chrome to inspect the request that was sent to your server. To do that, open the developer panel (see figure \"),_c('a',{attrs:{\"href\":\"#fig:Chrome-open-dev-tools\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:Chrome-open-dev-tools\"}},[_vm._v(\"5\")]),_vm._v(\")\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/open_dev_tools_chrome.png'),\"alt\":\"Chrome how to open the developer tools[fig:Chrome-open-dev-tools]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Chrome how to open the developer tools\"),_c('span',{attrs:{\"id\":\"fig:Chrome-open-dev-tools\",\"label\":\"fig:Chrome-open-dev-tools\"}},[_vm._v(\"[fig:Chrome-open-dev-tools]\")])])],1),_c('p',[_vm._v(\"A window will appear (see figure \"),_c('a',{attrs:{\"href\":\"#fig:Chrome-developer-tools\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:Chrome-developer-tools\"}},[_vm._v(\"6\")]),_vm._v(\"). You then need to click on the “\"),_c('strong',[_vm._v(\"Network\")]),_vm._v(\"” tab.\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/dev_tools_opened_chrome.png'),\"alt\":\"Chrome developer tools[fig:Chrome-developer-tools]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Chrome developer tools\"),_c('span',{attrs:{\"id\":\"fig:Chrome-developer-tools\",\"label\":\"fig:Chrome-developer-tools\"}},[_vm._v(\"[fig:Chrome-developer-tools]\")])])],1),_c('p',[_vm._v(\"The network pane will record any network usage. For the moment, it’s empty because there is no network activity. Reload the page, and you will see the request made by Chrome (see figure\"),_c('a',{attrs:{\"href\":\"#fig:View-of-the-request-404\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:View-of-the-request-404\"}},[_vm._v(\"7\")]),_vm._v(\")\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/dev_tool_request_get_404.png'),\"alt\":\"View of the request in Chrome dev tools[fig:View-of-the-request-404]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"View of the request in Chrome dev tools\"),_c('span',{attrs:{\"id\":\"fig:View-of-the-request-404\",\"label\":\"fig:View-of-the-request-404\"}},[_vm._v(\"[fig:View-of-the-request-404]\")])])],1),_c('p',[_vm._v(\"You can see :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"The name of the request\")])]),_c('li',[_c('p',[_vm._v(\"The method (HTTP method)\")])]),_c('li',[_c('p',[_vm._v(\"The request and the response header.\")])]),_c('li',[_c('p',[_vm._v(\"The status (here: 404 Not Found)\")])]),_c('li',[_c('p',[_vm._v(\"It’s type, the initiator, its size, and the time.\")])])]),_c('p',[_vm._v(\"You can get more information about the request and the response of our server by clicking on the request :\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/dev_tool_request_headers.png'),\"alt\":\"Dev tools : request headers[fig:Dev-tools-headers]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Dev tools : request headers\"),_c('span',{attrs:{\"id\":\"fig:Dev-tools-headers\",\"label\":\"fig:Dev-tools-headers\"}},[_vm._v(\"[fig:Dev-tools-headers]\")])])],1),_c('p',[_vm._v(\"The tab “\"),_c('strong',[_vm._v(\"Headers\")]),_vm._v(\"” (see figure \"),_c('a',{attrs:{\"href\":\"#fig:Dev-tools-headers\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:Dev-tools-headers\"}},[_vm._v(\"8\")]),_vm._v(\") contains the request and the response headers.\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/dev_tool_request_response.png'),\"alt\":\"Response in Chrome Dev Tools[fig:Response-in-Chrome]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Response in Chrome Dev Tools\"),_c('span',{attrs:{\"id\":\"fig:Response-in-Chrome\",\"label\":\"fig:Response-in-Chrome\"}},[_vm._v(\"[fig:Response-in-Chrome]\")])])],1),_c('p',[_vm._v(\"The tab “\"),_c('strong',[_vm._v(\"Response\")]),_vm._v(\"” print the server response. This is the raw response received from the server.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"how-to-test-a-local-web-server-with-curl\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"12\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"12\")]),_vm._v(\" How to test a local web server with cURL? \"),_c('a',{attrs:{\"href\":\"#how-to-test-a-local-web-server-with-curl\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"cURL is a software written in C released in 1997. This software is composed of two distinct elements: a library (\"),_c('strong',[_vm._v(\"libcurl\")]),_vm._v(\") and a command-line interface (\"),_c('strong',[_vm._v(\"curl\")]),_vm._v(\"). We can use the library in a C program or in any other programs that provide bindings for it.\")]),_c('p',[_vm._v(\"We will use the command-line tool to test our server.\")]),_c('p',[_vm._v(\"The following command will make an HTTP GET request to the server address\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http://127.0.0.1:8080\")])]),_vm._v(\" :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ curl http://127.0.0.1:8080 --verbose\")])]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/curl_decomposition.png'),\"alt\":\"Decomposition of a curl command line output[fig:curl-output]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Decomposition of a curl command line output\"),_c('span',{attrs:{\"id\":\"fig:curl-output\",\"label\":\"fig:curl-output\"}},[_vm._v(\"[fig:curl-output]\")])])],1),_c('p',[_vm._v(\"On figure \"),_c('a',{attrs:{\"href\":\"#fig:curl-output\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:curl-output\"}},[_vm._v(\"10\")]),_vm._v(\" you can see an example output of the command line. I have added the verbose flag intentionally to get more information about the request and the response. We can see :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"The connection to the server\")])]),_c('li',[_c('p',[_vm._v(\"The request that has been sent\")])]),_c('li',[_c('p',[_vm._v(\"The response received from the server\")])]),_c('li',[_c('p',[_vm._v(\"The final status of the connexion\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"how-to-serve-an-html-page-with-a-go-server\"}}),_c('h1',{attrs:{\"data-number\":\"13\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13\")]),_vm._v(\" How to serve an HTML page with a Go Server? \"),_c('a',{attrs:{\"href\":\"#how-to-serve-an-html-page-with-a-go-server\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The first server that we built does nothing: it receives an HTTP Response with a status code 404 (Not Found) for every HTTP request. We will send an HTML document in the message body of the response.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"http-response-with-html-contents\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.1\")]),_vm._v(\" HTTP response with html contents \"),_c('a',{attrs:{\"href\":\"#http-response-with-html-contents\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Our objective is to send this HTML document to the client :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n \\n Hello\\n\")])]),_c('p',[_vm._v(\"We need to be able to send this HTTP request with our server :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"HTTP/1.1 200 OK\\nContent-Type: text/html; charset=utf-8\\nDate: Fri, 03 Apr 2020 06:26:25 GMT\\nContent-Length: 45\\n\\n\\n \\n Hello\\n\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"the-server-type-struct\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.2\")]),_vm._v(\" The Server type struct \"),_c('a',{attrs:{\"href\":\"#the-server-type-struct\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Server\")])]),_vm._v(\" struct from the package \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http\")])]),_vm._v(\" has a field named \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Handler\")])]),_vm._v(\". Here is an extract of the file \"),_c('strong',[_vm._v(\"net/http/server.go\")]),_vm._v(\" from the standard library.\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"package http\\n//..\\ntype Server struct {\\n Addr string // TCP address to listen on, \\\":http\\\" if empty\\n Handler Handler // handler to invoke, http.DefaultServeMux if nil\\n //...\\n}\")])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Handler\")])]),_vm._v(\" (from package \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http\")])]),_vm._v(\") is an interface :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"package http\\n//...\\ntype Handler interface {\\n ServeHTTP(ResponseWriter, *Request)\\n}\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"create-your-own-http.handler-implementation\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.3\")]),_vm._v(\" Create your own http.Handler implementation \"),_c('a',{attrs:{\"href\":\"#create-your-own-http.handler-implementation\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"We should create our own type that implements this interface to define an HTTP handler :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type myHandler struct {\\n}\\n\\nfunc (h *myHandler)ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n // TODO\\n}\")])]),_c('p',[_vm._v(\"Here I created a type struct named \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"myHandler\")])]),_vm._v(\". On this type, I defined a method named \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"ServeHTTP\")])]),_vm._v(\". This method takes two parameters named \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"w\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"r\")])]),_vm._v(\". \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"w\")])]),_vm._v(\" is of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.ResponseWriter\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"r\")])]),_vm._v(\" is of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"*http.Request\")])]),_vm._v(\".\")]),_c('p',[_vm._v(\"What are those types? Let’s jump to the documentation.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"http.responsewriter\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.4\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.4\")]),_vm._v(\" http.ResponseWriter \"),_c('a',{attrs:{\"href\":\"#http.responsewriter\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"“An HTTP handler uses a ResponseWriter interface to construct an HTTP response.” We can see that’s a type \"),_c('strong',[_vm._v(\"interface\")]),_vm._v(\" :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"package http\\n//...\\ntype ResponseWriter interface {\\n // Header returns the header map that will be sent by\\n // WriteHeader. The Header map also is the mechanism with which\\n // Handlers can set HTTP trailers.\\n //...\\n Header() Header\\n\\n // Write writes the data to the connection as part of an HTTP reply.\\n //...\\n Write([]byte) (int, error)\\n\\n // WriteHeader sends an HTTP response header with the provided\\n // status code.\\n //...\\n WriteHeader(statusCode int)\\n}\")])]),_c('p',[_vm._v(\"When the server receives a request, it will pass to our function an implementation of this interface. It means that we will have the ability to use three methods :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"Header\")])]),_c('ul',[_c('li',[_vm._v(\"This method will return an element of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.Header\")])]),_vm._v(\" which is a map of headers.\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"Write\")])]),_c('ul',[_c('li',[_vm._v(\"With this method, we will be able to write content to the response body.\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"WriteHeader\")])]),_c('ul',[_c('li',[_vm._v(\"With this method, we can send a specific status code.\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"http.request\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.5\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.5\")]),_vm._v(\" http.Request \"),_c('a',{attrs:{\"href\":\"#http.request\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.Request\")])]),_vm._v(\" is a type struct that lists all the elements of the received request. This type struct has 10+ exported fields. Later, we will see that this struct is also used for building HTTP clients! The three more important are :\")]),_c('ul',[_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"URL\")])]),_vm._v(\" which is in the case of a server the \"),_c('strong',[_vm._v(\"URI.\")])])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Body\")])]),_vm._v(\" : which contains the message body.\")])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Header\")])]),_vm._v(\" : a map containing headers\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"implementation-of-serverhttp\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.6\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.6\")]),_vm._v(\" Implementation of ServerHTTP \"),_c('a',{attrs:{\"href\":\"#implementation-of-serverhttp\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Here is our handler :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type myHandler struct {\\n}\\n\\nfunc (h *myHandler)ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n // TODO\\n}\")])]),_c('p',[_vm._v(\"The method ServeHTTP “should write reply headers and data to the ResponseWriter and then return. Returning signals that the request is finished\"),_c('a',{staticClass:\"footnote-ref\",attrs:{\"href\":\"#fn5\",\"id\":\"fnref5\",\"role\":\"doc-noteref\"}},[_c('sup',[_vm._v(\"5\")])]),_vm._v(\"”.\")]),_c('p',[_vm._v(\"We will call \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"w.Write\")])]),_vm._v(\" to write to the response body our HTML Page. The function Write has the following signature :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"Write([]byte) (int, error)\")])]),_c('p',[_vm._v(\"It accepts a slice of bytes and returns an integer or an error. The integer returned is the number of bytes written to the response body.\")]),_c('p',[_vm._v(\"Let’s see how we will do that :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"func (h *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n toSend := []byte(\\\"Hello\\\")\\n _, err := w.Write(toSend)\\n if err != nil {\\n log.Printf(\\\"error while writing on the body %s\\\", err)\\n }\\n}\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"We create a initialize a variable \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"toSend\")])]),_vm._v(\". It is a slice of bytes containing our HTML document. Note that we have deleted the line breaks. The web browser ignores the line breaks; it’s just there to help the developer write the HTML document.\")])]),_c('li',[_c('p',[_vm._v(\"Then we pass this variable to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"w.Write\")])])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"We ignore the number of bytes written (with \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"_\")])]),_vm._v(\")\")])]),_c('li',[_c('p',[_vm._v(\"A new variable \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"err\")])]),_vm._v(\" is created that will hold the error.\")])])])]),_c('li',[_c('p',[_vm._v(\"Usually, when we have an error, we should test if it’s not \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"nil\")])]),_vm._v(\".\")])]),_c('li',[_c('p',[_vm._v(\"If the error is not nil, we log the error\")])])]),_c('p',[_vm._v(\"When the function returns, the request is finished.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"add-the-handler-to-the-server\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.7\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.7\")]),_vm._v(\" Add the handler to the server \"),_c('a',{attrs:{\"href\":\"#add-the-handler-to-the-server\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"We need to register the Handler :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"myServer := &http.Server{\\n // set the server address\\n Addr: \\\"127.0.0.1:8080\\\",\\n // define some specific configuration\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n Handler: &myHandler{},\\n}\")])]),_c('p',[_vm._v(\"Our server will now launch \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"myHandler.ServeHTTP\")])]),_vm._v(\" for each request received!\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"complete-code\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.8\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.8\")]),_vm._v(\" Complete code \"),_c('a',{attrs:{\"href\":\"#complete-code\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// basic-http-server/serve-html/main.go\\npackage main\\n\\nimport (\\n \\\"log\\\"\\n \\\"net/http\\\"\\n \\\"time\\\"\\n)\\n\\nfunc main() {\\n // create a server\\n myServer := &http.Server{\\n // set the server address\\n Addr: \\\"127.0.0.1:8080\\\",\\n // define some specific configuration\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n // register our handler\\n Handler: &myHandler{},\\n }\\n\\n // launch the server\\n log.Fatal(myServer.ListenAndServe())\\n}\\n\\ntype myHandler struct {\\n}\\n\\n// function executed for each HTTP request received\\nfunc (h *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n toSend := []byte(\\\"Hello\\\")\\n _, err := w.Write(toSend)\\n if err != nil {\\n log.Printf(\\\"error while writing on the body %s\\\", err)\\n }\\n}\")])]),_c('p',[_vm._v(\"Now let’s build it, and run it!\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ go build main.go\\n$ ./main\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"test-with-a-web-browser\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.9\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.9\")]),_vm._v(\" Test with a web browser \"),_c('a',{attrs:{\"href\":\"#test-with-a-web-browser\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/send_html_server.png'),\"alt\":\"Response\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"Response\")])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"test-with-curl\"}}),_c('h4',{attrs:{\"data-number\":\"13.0.0.10\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"13.0.0.10\")]),_vm._v(\" Test with curl \"),_c('a',{attrs:{\"href\":\"#test-with-curl\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ curl 127.0.0.1:8080 --verbose\\n* Rebuilt URL to: 127.0.0.1:8080/\\n* Trying 127.0.0.1...\\n* TCP_NODELAY set\\n* Connected to 127.0.0.1 (127.0.0.1) port 8080 (#0)\\n> GET / HTTP/1.1\\n> Host: 127.0.0.1:8080\\n> User-Agent: curl/7.54.0\\n> Accept: */*\\n>\\n< HTTP/1.1 200 OK\\n< Date: Sat, 04 Apr 2020 19:07:55 GMT\\n< Content-Length: 45\\n< Content-Type: text/html; charset=utf-8\\n<\\n* Connection #0 to host 127.0.0.1 left intact\\nHello\")])]),_c('p',[_vm._v(\"Hooray!\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"common-error-address-already-in-use\"}}),_c('h1',{attrs:{\"data-number\":\"14\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"14\")]),_vm._v(\" Common error: address already in use \"),_c('a',{attrs:{\"href\":\"#common-error-address-already-in-use\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"When you try to launch your web server, you might have this error. It means that another program already uses the port you have chosen. To solve it check that you have not forgotten to stop another server running on your machine.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"macos-linux\"}}),_c('h3',{attrs:{\"data-number\":\"14.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"14.0.1\")]),_vm._v(\" MacOs / Linux \"),_c('a',{attrs:{\"href\":\"#macos-linux\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"You can check which program is listening on port 8084 with this command :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ sudo lsof -i 8084\")])]),_c('p',[_vm._v(\"On figure \"),_c('a',{attrs:{\"href\":\"#fig:lsof-output\",\"data-reference-type\":\"ref\",\"data-reference\":\"fig:lsof-output\"}},[_vm._v(\"11\")]),_vm._v(\" you can see the output of the command.\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/lsof_output.png'),\"alt\":\"lsof output[fig:lsof-output]\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"lsof output\"),_c('span',{attrs:{\"id\":\"fig:lsof-output\",\"label\":\"fig:lsof-output\"}},[_vm._v(\"[fig:lsof-output]\")])])],1),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"lsof\")])]),_vm._v(\" means “list open files”.\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"The column \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"COMMAND\")])]),_vm._v(\" allow you to identify the command name\")])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"PID\")])]),_vm._v(\" is the process id (10206)\")])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"USER\")])]),_vm._v(\" : is the user that launched the program (here me)\")])]),_c('li',[_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"TYPE\")])]),_vm._v(\" : inform you about the type of the open file. (here IPv4)\")])])]),_c('p',[_vm._v(\"From the command line, you can directly kill the process with the following command :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ kill 10206\")])]),_c('p',[_vm._v(\"The OS will terminate the program.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"windows\"}}),_c('h4',{attrs:{\"data-number\":\"14.0.1.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"14.0.1.1\")]),_vm._v(\" Windows \"),_c('a',{attrs:{\"href\":\"#windows\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The following command will give you the process id of the program listening on port 8084:\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ netstat -ano | find \\\"8084\\\"\\nTCP 0.0.0.0:8084 0.0.0.0:0 LISTENING 10206\")])]),_c('p',[_c('strong',[_vm._v(\"10206\")]),_vm._v(\" is the process id of the program listening on 0.0.0.0:8084.\")]),_c('p',[_vm._v(\"To kill this process, you can use the following command :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ taskkill /F /PID 10206\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"common-error-too-many-open-files\"}}),_c('h1',{attrs:{\"data-number\":\"15\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"15\")]),_vm._v(\" Common error: too many open files \"),_c('a',{attrs:{\"href\":\"#common-error-too-many-open-files\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"What are “open files” ? There are two main types of open files :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"Files that are opened and read or write by a system user.\")])]),_c('li',[_c('p',[_vm._v(\"Open sockets: an open TCP connection, for example.\")])])]),_c('p',[_vm._v(\"Any OS can handle a limited number of open files.\")]),_c('p',[_vm._v(\"We will see some commands to get this number on your system :\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"macos-linux-1\"}}),_c('h3',{attrs:{\"data-number\":\"15.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"15.0.1\")]),_vm._v(\" MacOs / Linux \"),_c('a',{attrs:{\"href\":\"#macos-linux-1\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ lsof | wc -l\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"We call \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"lsof\")])]),_vm._v(\" to get the list of open files\")])]),_c('li',[_c('p',[_vm._v(\"Then we count the lines returned by this command (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"wc -l\")])]),_vm._v(\")\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"windows-1\"}}),_c('h3',{attrs:{\"data-number\":\"15.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"15.0.2\")]),_vm._v(\" Windows \"),_c('a',{attrs:{\"href\":\"#windows-1\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The tool Process Explorer program is a good starting point to see the list of process runnings and open files on your system. Here is a link to download it:\")]),_c('p',[_vm._v(\"https://docs.microsoft.com/sysinternals/downloads/process-explorer.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"possible-root-cause\"}}),_c('h3',{attrs:{\"data-number\":\"15.0.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"15.0.3\")]),_vm._v(\" Possible root cause \"),_c('a',{attrs:{\"href\":\"#possible-root-cause\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"When you open a file, you should not forget to close it when you don’t need it. Here is an example http handler to demonstrate it :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"func (h *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n _, err := os.Open(\\\"/tmp/test\\\")\\n if err != nil {\\n log.Println(\\\"error file open \\\", err)\\n } else {\\n log.Println(\\\"file opened\\\")\\n }\\n}\")])]),_c('p',[_vm._v(\"For each HTTP request, we will open the file \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"/tmp/test\")])]),_vm._v(\". Files will not close automatically when the response is sent!\")]),_c('p',[_vm._v(\"Let’s test this handler with a standard server :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"func main() {\\n // create a server\\n myServer := &http.Server{\\n // set the server address\\n Addr: \\\"127.0.0.1:8084\\\",\\n // define some specific configuration\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n Handler: &myHandler{},\\n }\\n\\n // launch the server\\n log.Fatal(myServer.ListenAndServe())\\n}\")])]),_c('p',[_vm._v(\"Then, we build it and launch it :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ go build -o myProg main.go\\n$ ./myBuggyServer\")])]),_c('p',[_vm._v(\"Let’s see now how many files were opened by this program. We first have to get its process id :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ lsof -i :8084\\nmyProg 12138 maximilienandile 3u IPv4 0x1f9c2813af8142d1 0t0 TCP localhost:8084 (LISTEN)\")])]),_c('p',[_vm._v(\"The process id is 12138. Let’s count the number of files opened :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ lsof -p 12458 | wc -l\\n10\")])]),_c('p',[_vm._v(\"Ten files opened! Now let’s launch four requests to the server (with the cURL command line) :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ curl 127.0.0.1:8084\\n$ curl 127.0.0.1:8084\\n$ curl 127.0.0.1:8084\\n$ curl 127.0.0.1:8084\")])]),_c('p',[_vm._v(\"Let’s check now how many open files the process has (the process id has not changed)\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ lsof -p 12458 | wc -l\\n14\")])]),_c('p',[_vm._v(\"The server will use too many resources. The garbage collector will close those open files for you. It’s still dangerous because your Go script might overflow the limit of your system’s open files before the garbage collection.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"application-ab-testing-server\"}}),_c('BuyCopyInvite'),_c('h1',{attrs:{\"data-number\":\"16\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16\")]),_vm._v(\" Application: A/B testing server \"),_c('a',{attrs:{\"href\":\"#application-ab-testing-server\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"mission\"}}),_c('h2',{attrs:{\"data-number\":\"16.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.1\")]),_vm._v(\" Mission \"),_c('a',{attrs:{\"href\":\"#mission\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Your client has two design ideas (A and B) for the hotel website’s homepage. He cannot choose between the two designs. He asks you if it’s possible to test the two design versions.\")]),_c('p',[_vm._v(\"The winning design is the one that will generate more phone calls.\")]),_c('p',[_vm._v(\"Your mission: build an http server that :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"listen on : IP 127.0.0.1 / Port 9899\")])]),_c('li',[_c('p',[_vm._v(\"For each HTTP request received, send either design A or design B :\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"When the current number of minutes is odd, serve A\")])]),_c('li',[_c('p',[_vm._v(\"Else serve B\")])])])])]),_c('p',[_vm._v(\"Here is the design \"),_c('strong',[_vm._v(\"A :\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n\\n The Golang Hotel\\n\\n\\n

The Golang Hotel is a relaxing place !

\\n

We offer 20% discount if you call this number : 1234567891

\\n\\n\")])]),_c('p',[_vm._v(\"And the design \"),_c('strong',[_vm._v(\"B\")]),_vm._v(\" :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"\\n\\n The Golang Hotel\\n\\n\\n

The Golang Hotel is a relaxing place !

\\n
We offer 20% discount if you call this number : 1234567892
\\n\\n\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"solution\"}}),_c('h2',{attrs:{\"data-number\":\"16.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2\")]),_vm._v(\" Solution \"),_c('a',{attrs:{\"href\":\"#solution\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"go.mod-file\"}}),_c('h4',{attrs:{\"data-number\":\"16.2.0.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2.0.1\")]),_vm._v(\" go.mod file \"),_c('a',{attrs:{\"href\":\"#go.mod-file\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The first step is to initialize a project with a go.mod file :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"module maximilien-andile.com/webserver/application1\\n\\ngo 1.13\")])]),_c('p',[_vm._v(\"You can also generate this file with the command \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"go mod init\")])])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ go mod init maximilien-andile.com/webserver/application1\\ngo: creating new go.mod: module maximilien-andile.com/webserver/application1\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"http.server-struct\"}}),_c('h4',{attrs:{\"data-number\":\"16.2.0.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2.0.2\")]),_vm._v(\" http.Server struct \"),_c('a',{attrs:{\"href\":\"#http.server-struct\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Then we need to create a new http.Server :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"abTestingServer := &http.Server{\\n Addr: \\\"127.0.0.1:9899\\\",\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n}\")])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"abTestingServer\")])]),_vm._v(\" is a pointer to this struct.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"handler-skeleton\"}}),_c('h4',{attrs:{\"data-number\":\"16.2.0.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2.0.3\")]),_vm._v(\" Handler skeleton \"),_c('a',{attrs:{\"href\":\"#handler-skeleton\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"We create a struct type that will implement the \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.Handler\")])]),_vm._v(\" interface. For memory, this is the http.Handler interface :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type Handler interface {\\n ServeHTTP(ResponseWriter, *Request)\\n}\")])]),_c('p',[_vm._v(\"We must implement the ServerHTTP method. Here is our \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.Handler\")])]),_vm._v(\" implementation :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"type AbHandler struct {\\n}\\n\\nfunc (h *AbHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n}\")])]),_c('p',[_vm._v(\"We can then set the \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Handler\")])]),_vm._v(\" field in \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"abTestingServer\")])]),_vm._v(\" :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"abTestingServer := &http.Server{\\n Addr: \\\"127.0.0.1:8084\\\",\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n Handler:&AbHandler{},\\n}\")])]),_c('p',[_vm._v(\"What is \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&AbHandler{}\")])]),_vm._v(\" ? Let’s decompose it : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"AbHandler{}\")])]),_vm._v(\" will create a variable of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"AbHandler\")])])]),_c('ul',[_c('li',[_vm._v(\"With the sign \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&\")])]),_vm._v(\" we will take the address of this variable.\")])]),_c('p',[_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"AbHandler{}\")])]),_vm._v(\" is of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"*AbHandler\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"handler-implementation-loading-html-designs\"}}),_c('h4',{attrs:{\"data-number\":\"16.2.0.4\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2.0.4\")]),_vm._v(\" Handler implementation : loading HTML designs \"),_c('a',{attrs:{\"href\":\"#handler-implementation-loading-html-designs\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"The first thing to do is to load our two designs :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"func (h *AbHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n // load design A\\n designA := []byte(\\\"The Golang Hotel

The Golang Hotel is a relaxing place !

We offer 20% discount if you call this number : 1234567891

\\\")\\n\\n // load design B\\n designB := []byte(\\\"The Golang Hotel

The Golang Hotel is a relaxing place !

We offer 20% discount if you call this number : 1234567892
\\\")\\n}\")])]),_c('p',[_vm._v(\"We have created two variables : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"designA\")])]),_vm._v(\" and \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"designB\")])]),_vm._v(\". They are slices of bytes. Note that the HTML content has been minified: new lines and useless spaces have been removed. The HTML version of each design.\")]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"handler-implementation-serve-two-html-page-alternatively\"}}),_c('h4',{attrs:{\"data-number\":\"16.2.0.5\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2.0.5\")]),_vm._v(\" Handler implementation: Serve two HTML page alternatively \"),_c('a',{attrs:{\"href\":\"#handler-implementation-serve-two-html-page-alternatively\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"Now in the handler, we can implement the response logic.\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"func (h *AbHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n\\n designA := []byte(\\\"The Golang Hotel

The Golang Hotel is a relaxing place !

We offer 20% discount if you call this number : 1234567891

\\\")\\n\\n designB := []byte(\\\"The Golang Hotel

The Golang Hotel is a relaxing place !

We offer 20% discount if you call this number : 1234567892
\\\")\\n\\n minutes := time.Now().Minute()\\n\\n if minutes%2 == 0 {\\n // even\\n log.Println(\\\"serving B\\\")\\n _, err := w.Write(designB)\\n if err != nil {\\n log.Print(\\\"impossible to serve design A\\\", err)\\n }\\n } else {\\n // odd\\n log.Println(\\\"serving A\\\")\\n _, err := w.Write(designA)\\n if err != nil {\\n log.Print(\\\"impossible to serve design B\\\", err)\\n }\\n }\\n}\")])]),_c('p',[_vm._v(\"For each request, we will get the current minute with \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"time.Now().Minute()\")])])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"If this number is even (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"minutes % 2 == 0\")])]),_vm._v(\"), then we will write the design B on the response writer\")])]),_c('li',[_c('p',[_vm._v(\"Else, design A is sent\")])])]),_c('p',[_vm._v(\"One thing is missing: we need to start the server :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"log.Fatal(abTestingServer.ListenAndServe())\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"complete-code-1\"}}),_c('h4',{attrs:{\"data-number\":\"16.2.0.6\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2.0.6\")]),_vm._v(\" Complete code \"),_c('a',{attrs:{\"href\":\"#complete-code-1\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// basic-http-server/ab-testing/main.go\\npackage main\\n\\nimport (\\n \\\"log\\\"\\n \\\"net/http\\\"\\n \\\"time\\\"\\n)\\n\\nfunc main() {\\n // create a server\\n abTestingServer := &http.Server{\\n // set the server address\\n Addr: \\\"127.0.0.1:9899\\\",\\n // define some specific configuration\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n Handler: &AbHandler{},\\n }\\n log.Fatal(abTestingServer.ListenAndServe())\\n}\\n\\ntype AbHandler struct {\\n}\\n\\nfunc (h *AbHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n\\n designA := []byte(\\\"The Golang Hotel

The Golang Hotel is a relaxing place !

We offer 20% discount if you call this number : 1234567891

\\\")\\n\\n designB := []byte(\\\"The Golang Hotel

The Golang Hotel is a relaxing place !

We offer 20% discount if you call this number : 1234567892
\\\")\\n\\n minutes := time.Now().Minute()\\n\\n if minutes%2 == 0 {\\n // even\\n log.Println(\\\"serving B\\\")\\n _, err := w.Write(designB)\\n if err != nil {\\n log.Print(\\\"impossible to serve design A\\\", err)\\n }\\n } else {\\n // odd\\n log.Println(\\\"serving A\\\")\\n _, err := w.Write(designA)\\n if err != nil {\\n log.Print(\\\"impossible to serve design B\\\", err)\\n }\\n }\\n}\")])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"test-of-the-server\"}}),_c('h4',{attrs:{\"data-number\":\"16.2.0.7\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.2.0.7\")]),_vm._v(\" Test of the server \"),_c('a',{attrs:{\"href\":\"#test-of-the-server\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('p',[_vm._v(\"To test the server, we first need to compile and run our application :\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"$ go build -o abServer main.go\\n$ ./abServer\")])]),_c('p',[_vm._v(\"Open a web browser and type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http://localhost:9899/\")])]),_vm._v(\" in the address bar.\")]),_c('figure',[_c('b-img',{staticClass:\"img-book\",attrs:{\"src\":require('@/assets/images/ab_testing_server.png'),\"alt\":\"A/B testing server\",\"fluid\":\"\",\"thumbnail\":\"\"}}),_c('figcaption',{attrs:{\"aria-hidden\":\"true\"}},[_vm._v(\"A/B testing server\")])],1),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"possible-improvements\"}}),_c('h2',{attrs:{\"data-number\":\"16.3\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"16.3\")]),_vm._v(\" Possible improvements \"),_c('a',{attrs:{\"href\":\"#possible-improvements\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"We create two slices of bytes for each request to store the design. This is useless.\")]),_c('ul',[_c('li',[_vm._v(\"We can store the two designs into two handler fields initialized when the server boot (in the main function)\")])])]),_c('li',[_c('p',[_vm._v(\"What if we want to store the two HTML on files? If we want to change one design (add some colors, add an image), we have to recompile the Go program. If files are stored into files, we can easily change the design without recompiling the server.\")])]),_c('li',[_c('p',[_vm._v(\"In the program, each URI will return the same two HTML pages. What if we want to define a specific path for this page. For instance : \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"/special-offer-summer\")])]),_vm._v(\".\")]),_c('ul',[_c('li',[_vm._v(\"We can achieve it with a \"),_c('strong',[_vm._v(\"router\")]),_vm._v(\" (that will trigger a specific handler for each specific route). We will see later how to do that.\")])])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"test-yourself\"}}),_c('h1',{attrs:{\"data-number\":\"17\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"17\")]),_vm._v(\" Test yourself \"),_c('a',{attrs:{\"href\":\"#test-yourself\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"questions\"}}),_c('h2',{attrs:{\"data-number\":\"17.1\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"17.1\")]),_vm._v(\" Questions \"),_c('a',{attrs:{\"href\":\"#questions\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Which package from the standard library can you use to build an HTTP web server?\")])]),_c('li',[_c('p',[_vm._v(\"True or False. An HTTP request is sent from the server to the client.\")])]),_c('li',[_c('p',[_vm._v(\"How to create an HTTP web server?\")])]),_c('li',[_c('p',[_vm._v(\"Inside a handler method (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"ServeHTTP(w http.ResponseWriter, r *http.Request)\")])]),_vm._v(\") can you get the value of a request header? How?\")])]),_c('li',[_c('p',[_vm._v(\"Can you give the signification of the HTTP status code 200, 500, and 400?\")])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"answers\"}}),_c('h2',{attrs:{\"data-number\":\"17.2\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"17.2\")]),_vm._v(\" Answers \"),_c('a',{attrs:{\"href\":\"#answers\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Which package from the standard library can you use to build an HTTP web server?\")]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"net/http\")])])]),_c('li',[_c('p',[_vm._v(\"True or False. An HTTP request is sent from the server to the client.\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"False\")])]),_c('li',[_c('p',[_vm._v(\"The client sends the request to the server\")])]),_c('li',[_c('p',[_vm._v(\"The server will answer with an HTTP response\")])])])]),_c('li',[_c('p',[_vm._v(\"How to create an http web server?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Create a variable of type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"*http.Server\")])])]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Set the listening address\")])]),_c('li',[_c('p',[_vm._v(\"Set the read and write timeout (to avoid defaults)\")])])])])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"myServer := &http.Server{\\n // set the server address\\n Addr: \\\"127.0.0.1:8080\\\",\\n // define some specific configuration\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n}\")])]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"Create a type \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"MyHandler\")])]),_vm._v(\" that implements the \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"http.Handler\")])]),_vm._v(\" interface.\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_vm._v(\"Implement the method \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"ServeHTTP(http.ResponseWriter, *http.Request)\")])])])])]),_c('li',[_c('p',[_vm._v(\"Set the field \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"Handler\")])]),_vm._v(\" of \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"myServer\")])]),_vm._v(\" to a pointer to \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"&MyHandler{}\")])])])]),_c('li',[_c('p',[_vm._v(\"Start the server by calling the method \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"ListenAndServe()\")])])])])])]),_c('li',[_c('p',[_vm._v(\"Inside a handler method (\"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"ServeHTTP(w http.ResponseWriter, r *http.Request)\")])]),_vm._v(\") can you get the value of a request header? How?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_vm._v(\"Yes, by calling \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"r.Header.Get(\\\"Name-Of-The-Header\\\")\")])])])])]),_c('li',[_c('p',[_vm._v(\"Can you give the signification of the HTTP status code 200, 500, and 400?\")]),_c('ol',{attrs:{\"type\":\"1\"}},[_c('li',[_c('p',[_vm._v(\"200 = “OK”\")])]),_c('li',[_c('p',[_vm._v(\"500 = “Internal Server Error” the server had an unexpected error\")])]),_c('li',[_c('p',[_vm._v(\"400 = “Bad Request” the request you have sent is malformed.\")])])])])]),_c('div',{staticClass:\"anchor\",attrs:{\"id\":\"key-takeaways\"}}),_c('h1',{attrs:{\"data-number\":\"18\"}},[_c('span',{staticClass:\"header-section-number\"},[_vm._v(\"18\")]),_vm._v(\" Key Takeaways \"),_c('a',{attrs:{\"href\":\"#key-takeaways\"}},[_c('b-icon-link45deg',{staticClass:\"heading-link-icon\",attrs:{\"font-scale\":\"0.7\"}})],1)]),_c('ul',[_c('li',[_c('p',[_vm._v(\"An HTTP Server is a program that will handle HTTP requests sent by clients\")])]),_c('li',[_c('p',[_vm._v(\"Clients can be web browsers (but not only, they can be other programs)\")])]),_c('li',[_c('p',[_vm._v(\"HTTP is a communication protocol\")])]),_c('li',[_c('p',[_vm._v(\"We can send an HTTP request to a server identified by an IP.\")])]),_c('li',[_c('p',[_vm._v(\"We can also send an HTTP request to a domain name that is mapped to one or several servers by the Domain Name System (DNS)\")])]),_c('li',[_c('p',[_vm._v(\"HTTP responses are composed of a status code (an unsigned integer) generated by the server to inform the client about its request status.\")]),_c('ul',[_c('li',[_c('p',[_vm._v(\"200 = “OK”\")])]),_c('li',[_c('p',[_vm._v(\"500 = “Internal Server Error” the server had an unexpected error\")])]),_c('li',[_c('p',[_vm._v(\"400 = “Bad Request” the request you have sent is malformed.\")])])])]),_c('li',[_c('p',[_vm._v(\"You can build an HTTP server with the standard package \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"net/http\")])])]),_c('ul',[_c('li',[_vm._v(\"Here is a sample HTTP server\")])]),_c('pre',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\"}},[_vm._v(\"// basic-http-server/sample/main.go\\npackage main\\n\\nimport (\\n \\\"log\\\"\\n \\\"net/http\\\"\\n \\\"time\\\"\\n)\\n\\nfunc main() {\\n // create a server\\n abTestingServer := http.Server{\\n // set the server address\\n Addr: \\\"127.0.0.1:9899\\\",\\n // define some specific configuration\\n ReadTimeout: 10 * time.Second,\\n WriteTimeout: 10 * time.Second,\\n Handler: &MyHandler{},\\n }\\n log.Fatal(abTestingServer.ListenAndServe())\\n}\\n\\ntype MyHandler struct {\\n}\\n\\nfunc (m *MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {\\n // TODO\\n}\")])]),_c('ul',[_c('li',[_c('p',[_vm._v(\"the parameter \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"w\")])]),_vm._v(\" allow you to write the response\")])]),_c('li',[_c('p',[_vm._v(\"the parameter \"),_c('span',{directives:[{name:\"highlightjs\",rawName:\"v-highlightjs\"}]},[_c('code',{pre:true,attrs:{\"class\":\"go\",\"style\":\"display: inline\"}},[_vm._v(\"r\")])]),_vm._v(\" allow you to access the request\")])])])])]),_c('section',{staticClass:\"footnotes\",attrs:{\"role\":\"doc-endnotes\"}},[_c('hr'),_c('ol',[_c('li',{attrs:{\"id\":\"fn1\",\"role\":\"doc-endnote\"}},[_c('p',[_vm._v(\"Source: https://en.wikipedia.org/wiki/IP_address\"),_c('a',{staticClass:\"footnote-back\",attrs:{\"href\":\"#fnref1\",\"role\":\"doc-backlink\"}},[_vm._v(\"↩︎\")])])]),_c('li',{attrs:{\"id\":\"fn2\",\"role\":\"doc-endnote\"}},[_c('p',[_vm._v(\"RFC 2616 section 5.3\"),_c('a',{staticClass:\"footnote-back\",attrs:{\"href\":\"#fnref2\",\"role\":\"doc-backlink\"}},[_vm._v(\"↩︎\")])])]),_c('li',{attrs:{\"id\":\"fn3\",\"role\":\"doc-endnote\"}},[_c('p',[_vm._v(\"RFC 2616 : https://www.w3.org/Protocols/rfc2616/rfc2616-sec6.html#sec6\"),_c('a',{staticClass:\"footnote-back\",attrs:{\"href\":\"#fnref3\",\"role\":\"doc-backlink\"}},[_vm._v(\"↩︎\")])])]),_c('li',{attrs:{\"id\":\"fn4\",\"role\":\"doc-endnote\"}},[_c('p',[_vm._v(\"https://tools.ietf.org/html/rfc7231#section-6.6.1\"),_c('a',{staticClass:\"footnote-back\",attrs:{\"href\":\"#fnref4\",\"role\":\"doc-backlink\"}},[_vm._v(\"↩︎\")])])]),_c('li',{attrs:{\"id\":\"fn5\",\"role\":\"doc-endnote\"}},[_c('p',[_vm._v(\"Documentation http package\"),_c('a',{staticClass:\"footnote-back\",attrs:{\"href\":\"#fnref5\",\"role\":\"doc-backlink\"}},[_vm._v(\"↩︎\")])])])])]),_c('h1',[_vm._v(\"Bibliography\")]),_c('ChapterBibliography',{attrs:{\"chapter-id\":\"Chap26BasicHttpServer\"}}),_c('b-row',{staticClass:\"ml-1 mr-1 \"},[_c('b-col',{staticClass:\"text-center border mr-1 p-2\"},[_c('router-link',{attrs:{\"to\":{name:'Chap25JsonAndXml'}}},[_c('p',[_c('u',[_c('small',[_vm._v(\"Previous\")])])]),_c('p',[_c('small',[_vm._v(\"JSON and XML\")])])])],1),_c('b-col',{staticClass:\"text-center border p-1 \"},[_c('router-link',{attrs:{\"to\":{name:'Chap27EnumIotaAndBitmask'}}},[_c('p',[_c('u',[_c('small',[_vm._v(\"Next\")])])]),_c('p',[_c('small',[_vm._v(\"Enum, Iota & Bitmask\")])])])],1)],1),_c('b-row',{staticClass:\"mt-1 ml-1 mr-1\"},[_c('b-col',{staticClass:\"text-center border p-1 \"},[_c('b-link',{attrs:{\"to\":{name:'Home'}}},[_vm._v(\"Table of contents\")])],1)],1),_c('FeedbackInvite'),_c('NewsletterInput'),_c('Footer')],1),_c('b-col')],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chap26BasicHttpServer.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Chap26BasicHttpServer.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Chap26BasicHttpServer.vue?vue&type=template&id=b5e4a28a&scoped=true&\"\nimport script from \"./Chap26BasicHttpServer.vue?vue&type=script&lang=js&\"\nexport * from \"./Chap26BasicHttpServer.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b5e4a28a\",\n null\n \n)\n\nexport default component.exports","module.exports = __webpack_public_path__ + \"img/http_status_code.81368d1b.png\";","module.exports = __webpack_public_path__ + \"img/curl_decomposition.aa70d615.png\";","module.exports = __webpack_public_path__ + \"img/request.bb26b9f9.png\";","module.exports = __webpack_public_path__ + \"img/ab_testing_server.61ef3ec5.png\";","module.exports = __webpack_public_path__ + \"img/test_local_server.bd976672.png\";","module.exports = __webpack_public_path__ + \"img/Http_request_anatomy.cf4e63d8.png\";","module.exports = __webpack_public_path__ + \"img/simple_web_page.c4b8e5a9.png\";","module.exports = __webpack_public_path__ + \"img/send_html_server.d42229c8.png\";","module.exports = __webpack_public_path__ + \"img/dev_tool_request_get_404.ffcff319.png\";","module.exports = __webpack_public_path__ + \"img/dev_tools_opened_chrome.d3df07c5.png\";"],"sourceRoot":""}