1
0
mirror of https://gitee.com/coder-xiaomo/notes synced 2025-01-12 04:28:15 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
notes/docs/.vuepress/dist/web-server/index.html

115 lines
45 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="VuePress 2.0.0-beta.27">
<link rel="icon" href="/images/logo.png"><link rel="stylesheet" href="/css/search.css"><title>第一期学习活动 | Coz的学习笔记</title><meta name="description" content="这是我的第一个 VuePress 站点">
<link rel="preload" href="/assets/js/runtime~app.c4644b03.js" as="script"><link rel="preload" href="/assets/css/styles.792c48da.css" as="style"><link rel="preload" href="/assets/js/567.6fcf9384.js" as="script"><link rel="preload" href="/assets/js/app.37033afc.js" as="script">
<link rel="stylesheet" href="/assets/css/styles.792c48da.css">
</head>
<body>
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="toggle sidebar" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/" class=""><!----><span class="site-name can-hide">Coz的学习笔记</span></a></span><div class="navbar-links-wrapper" style=""><!--[--><!--]--><nav class="navbar-links can-hide"><!--[--><div class="navbar-links-item"><a href="/" class="nav-link" aria-label="首页"><!--[--><!--]--> 首页 <!--[--><!--]--></a></div><div class="navbar-links-item"><div class="dropdown-wrapper"><button class="dropdown-title" type="button" aria-label="目录"><span class="title">目录</span><span class="arrow down"></span></button><button class="mobile-dropdown-title" type="button" aria-label="目录"><span class="title">目录</span><span class="right arrow"></span></button><!--[--><ul style="display:none;" class="nav-dropdown"><!--[--><li class="dropdown-item"><a href="/guide" class="nav-link" aria-label="目录"><!--[--><!--]--> 目录 <!--[--><!--]--></a></li><li class="dropdown-item"><!--[--><h4 class="dropdown-subtitle"><span>笔记</span></h4><ul class="dropdown-subitem-wrapper"><!--[--><li class="dropdown-subitem"><a href="/computer-networks" class="nav-link" aria-label="计算机网络"><!--[--><!--]--> 计算机网络 <!--[--><!--]--></a></li><li class="dropdown-subitem"><a href="/data-structures" class="nav-link" aria-label="数据结构"><!--[--><!--]--> 数据结构 <!--[--><!--]--></a></li><li class="dropdown-subitem"><a href="/algorithms" class="nav-link" aria-label="算法"><!--[--><!--]--> 算法 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="dropdown-item"><!--[--><h4 class="dropdown-subtitle"><span>其他</span></h4><ul class="dropdown-subitem-wrapper"><!--[--><li class="dropdown-subitem"><a aria-current="page" href="/web-server/" class="router-link-active router-link-exact-active nav-link router-link-active" aria-label="Web服务器"><!--[--><!--]--> Web服务器 <!--[--><!--]--></a></li><li class="dropdown-subitem"><a href="/temp-docs/" class="nav-link" aria-label="临时文档"><!--[--><!--]--> 临时文档 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></div></div><!--]--></nav><!--[--><!--]--><button class="toggle-dark-button" title="toggle dark mode"><svg style="" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M16 12.005a4 4 0 1 1-4 4a4.005 4.005 0 0 1 4-4m0-2a6 6 0 1 0 6 6a6 6 0 0 0-6-6z" fill="currentColor"></path><path d="M5.394 6.813l1.414-1.415l3.506 3.506L8.9 10.318z" fill="currentColor"></path><path d="M2 15.005h5v2H2z" fill="currentColor"></path><path d="M5.394 25.197L8.9 21.691l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 25.005h2v5h-2z" fill="currentColor"></path><path d="M21.687 23.106l1.414-1.415l3.506 3.506l-1.414 1.414z" fill="currentColor"></path><path d="M25 15.005h5v2h-5z" fill="currentColor"></path><path d="M21.687 8.904l3.506-3.506l1.414 1.415l-3.506 3.505z" fill="currentColor"></path><path d="M15 2.005h2v5h-2z" fill="currentColor"></path></svg><svg style="display:none;" class="icon" focusable="false" viewBox="0 0 32 32"><path d="M13.502 5.414a15.075 15.075 0 0 0 11.594 18.194a11.113 11.113 0 0 1-7.975 3.39c-.138 0-.278.005-.418 0a11.094 11.094 0 0 1-3.2-21.584M14.98 3a1.002 1.002 0 0 0-.175.016a13.096 13.096 0 0 0 1.825 25.981c.164.006.328 0 .49 0a13.072 13.072 0 0 0 10.703-5.555a1.01 1.01 0 0 0-.783-1.565A13.08 13.08 0 0 1 15.89 4.38A1.015 1.015 0 0 0 14.98 3z" fill="currentColor"></path></svg></button><form class="search-box" role="search"><input type="search" placeholder="在笔记中搜索一下..." autocomplete="off" spellcheck="false" value><!----></form></div></header><!--]--><div class="sidebar-mask"></div><!--[--><aside class="sidebar"><nav class="navbar-links"><!--[--><div class="navbar-links-item"><a href="/" class="nav-link" aria-label="首页"><!--[--><!--]--> 首页 <!--[--><!--]--></a></div><div class="navbar-links-item"><div class="dropdown-wrapper"><button class="dropdown-title" type="button" aria-label="目录"><span class="title">目录</span><span class="arrow down"></span></button><button class="mobile-dropdown-title" type="button" aria-label="目录"><span class="title">目录</span><span class="right arrow"></span></button><!--[--><ul style="display:none;" class="nav-dropdown"><!--[--><li class="dropdown-item"><a href="/guide" class="nav-link" aria-label="目录"><!--[--><!--]--> 目录 <!--[--><!--]--></a></li><li class="dropdown-item"><!--[--><h4 class="dropdown-subtitle"><span>笔记</span></h4><ul class="dropdown-subitem-wrapper"><!--[--><li class="dropdown-subitem"><a href="/computer-networks" class="nav-link" aria-label="计算机网络"><!--[--><!--]--> 计算机网络 <!--[--><!--]--></a></li><li class="dropdown-subitem"><a href="/data-structures" class="nav-link" aria-label="数据结构"><!--[--><!--]--> 数据结构 <!--[--><!--]--></a></li><li class="dropdown-subitem"><a href="/algorithms" class="nav-link" aria-label="算法"><!--[--><!--]--> 算法 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><li class="dropdown-item"><!--[--><h4 class="dropdown-subtitle"><span>其他</span></h4><ul class="dropdown-subitem-wrapper"><!--[--><li class="dropdown-subitem"><a aria-current="page" href="/web-server/" class="router-link-active router-link-exact-active nav-link router-link-active" aria-label="Web服务器"><!--[--><!--]--> Web服务器 <!--[--><!--]--></a></li><li class="dropdown-subitem"><a href="/temp-docs/" class="nav-link" aria-label="临时文档"><!--[--><!--]--> 临时文档 <!--[--><!--]--></a></li><!--]--></ul><!--]--></li><!--]--></ul><!--]--></div></div><!--]--></nav><!--[--><!--]--><ul class="sidebar-links"><!--[--><!--[--><p class="sidebar-heading sidebar-item">第一期学习活动</p><ul class=""><li><!--[--><a aria-current="page" href="/web-server/#第1天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="第1天"><!--[--><!--]--> 第1天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-web服务器基本工作原理学习" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务Web服务器基本工作原理学习"><!--[--><!--]--> 任务Web服务器基本工作原理学习 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#第2天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="第2天"><!--[--><!--]--> 第2天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-http协议学习-f12-wireshark抓包" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务HTTP协议学习 &amp; F12 &amp; wireshark抓包"><!--[--><!--]--> 任务HTTP协议学习 &amp; F12 &amp; wireshark抓包 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-1" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#第3天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="第3天"><!--[--><!--]--> 第3天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-套接字编程基础知识" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务:套接字编程基础知识"><!--[--><!--]--> 任务:套接字编程基础知识 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-2" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#★-第4天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="★ 第4天"><!--[--><!--]--> ★ 第4天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-编写一个tcp-client-发出一个简单的http请求" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务编写一个TCP Client发出一个简单的HTTP请求"><!--[--><!--]--> 任务编写一个TCP Client发出一个简单的HTTP请求 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-3" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#★-第5天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="★ 第5天"><!--[--><!--]--> ★ 第5天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-编写一个tcp-server-发出一个简单的http响应" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务编写一个TCP Server发出一个简单的HTTP响应"><!--[--><!--]--> 任务编写一个TCP Server发出一个简单的HTTP响应 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-4" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#★-第8天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="★ 第8天"><!--[--><!--]--> ★ 第8天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-改造tcp-server-发送一个html文件" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务改造TCP Server发送一个HTML文件"><!--[--><!--]--> 任务改造TCP Server发送一个HTML文件 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#★-第9天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="★ 第9天"><!--[--><!--]--> ★ 第9天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-使用多线程" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务:使用多线程"><!--[--><!--]--> 任务:使用多线程 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-5" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#第10天" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="第10天"><!--[--><!--]--> 第10天 <!--[--><!--]--></a><ul class="sidebar-sub-items"><li><!--[--><a aria-current="page" href="/web-server/#任务-设计并使用配置文件" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="任务:设计并使用配置文件"><!--[--><!--]--> 任务:设计并使用配置文件 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-6" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-7" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-8" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-9" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li><li><!--[--><a aria-current="page" href="/web-server/#作业-10" class="router-link-active router-link-exact-active nav-link sidebar-item" aria-label="作业"><!--[--><!--]--> 作业 <!--[--><!--]--></a><!----><!--]--></li></ul><!--]--></li></ul><!--]--><!--]--></ul><!--[--><!--]--></aside><!--]--><!--[--><main class="page"><!--[--><!--]--><div class="theme-default-content"><!--[--><h1 id="第一期学习活动" tabindex="-1"><a class="header-anchor" href="#第一期学习活动" aria-hidden="true">#</a> 第一期学习活动</h1><h2 id="第1天" tabindex="-1"><a class="header-anchor" href="#第1天" aria-hidden="true">#</a> 第1天</h2><h3 id="任务-web服务器基本工作原理学习" tabindex="-1"><a class="header-anchor" href="#任务-web服务器基本工作原理学习" aria-hidden="true">#</a> 任务Web服务器基本工作原理学习</h3><p>学习资料: 1、https://www.cnblogs.com/BOHB-yunying/articles/10911192.html</p><p>2、《Web工作原理》见附件</p><p>作业:写一篇小短文,发布在星球,小短文中需要回答几个问题</p><p>一个web服务器最基本的由哪几个核心组件组成</p><p>讲述一下web服务器从收到一个请求到完成这个请求的响应主要流程是什么</p><p>将自己理解的Web服务器工作原理绘制一张图</p><p>附件:<a href="/web-server/files/day1-Web%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86.pdf">Web工作原理.pdf</a></p><h3 id="作业" tabindex="-1"><a class="header-anchor" href="#作业" aria-hidden="true">#</a> 作业</h3><p>看了一下网上搜索出来的感觉大都很专业,我就说说我自己的看法叭</p><p>web服务器组件我理解的是包含以下部分</p><ul><li>配置文件、默认错误页面像404, 500等错误页模板</li><li>日志记录模块</li><li>端口监听模块</li><li>业务处理模块</li><li>请求响应模块</li><li>扩展模块(如反向代理等)</li></ul><p>web服务器主要完成以下几件事</p><ol><li><p>监听到客户端发来的请求</p><p>涉及到计算机网络结构方面的知识</p></li><li><p>处理请求</p><ol><li><p>取得请求方法GET, POST, PUT等解析url进行路由</p></li><li><p>通过路由知道客户端的请求</p><p>分成静态、动态两类静态资源直接返回给客户端就行了动态资源需要去对应提供服务的业务取得像php, java, asp.net等等</p></li></ol></li><li><p>将响应返回给用户 响应头中还包含一些扩展信息像web服务器版本信息MIME缓存配置信息静态资源还会有修改时间</p></li></ol><p><img src="/assets/img/day1-How-the-Web-server-works.200e1050.svg" alt="Web服务器工作原理"></p><h2 id="第2天" tabindex="-1"><a class="header-anchor" href="#第2天" aria-hidden="true">#</a> 第2天</h2><h3 id="任务-http协议学习-f12-wireshark抓包" tabindex="-1"><a class="header-anchor" href="#任务-http协议学习-f12-wireshark抓包" aria-hidden="true">#</a> 任务HTTP协议学习 &amp; F12 &amp; wireshark抓包</h3><p>学习资料: https://www.ruanyifeng.com/blog/2016/08/http.html</p><p>https://zhuanlan.zhihu.com/p/77376952</p><p>https://haokan.baidu.com/v?pd=wisenatural&amp;vid=9883591515530208938</p><p>作业:写一篇小短文,发布在星球,完成下面这些内容</p><ul><li>HTTP请求主要由哪几个部分组成</li><li>HTTP响应主要由哪几部分组成</li><li>HTTP头部和数据如何组织在一起</li><li>这是世界上第一个网页: http://info.cern.ch/hypertext/WWW/TheProject.html</li></ul><p>使用浏览器访问这个URL并使用wireshark抓包分析请求和响应。</p><p>请求Method、URI、HTTP版本、Headers</p><p>响应状态码、Headers、HTML内容</p><h3 id="作业-1" tabindex="-1"><a class="header-anchor" href="#作业-1" aria-hidden="true">#</a> 作业</h3><h4 id="http请求主要由哪几个部分组成" tabindex="-1"><a class="header-anchor" href="#http请求主要由哪几个部分组成" aria-hidden="true">#</a> HTTP请求主要由哪几个部分组成</h4><p><strong>请求报文</strong></p><ol><li><p><strong>请求行</strong>请求方法字段、URL字段和HTTP协议版本</p><p>例如GET /index.html HTTP/1.1</p><p>get方法将数据拼接在url后面传递参数受限</p><p>请求方法GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT</p></li><li><p><strong>请求头</strong>(key value形式)</p><ul><li><p>User-Agent产生请求的浏览器类型。</p></li><li><p>Accept客户端可识别的内容类型列表。</p></li><li><p>Host主机地址</p></li></ul></li><li><p><strong>请求数据</strong></p><p>post方法中会把数据以key value形式发送请求</p></li><li><p><strong>空行</strong></p><p>发送回车符和换行符,通知服务器以下不再有请求头</p></li></ol><h4 id="http响应主要由哪几部分组成" tabindex="-1"><a class="header-anchor" href="#http响应主要由哪几部分组成" aria-hidden="true">#</a> HTTP响应主要由哪几部分组成</h4><p><strong>响应报文</strong></p><ol><li><p><strong>状态行</strong></p></li><li><p><strong>消息报头</strong></p></li></ol><p><strong>3. 响应正文</strong></p><h4 id="http头部和数据如何组织在一起" tabindex="-1"><a class="header-anchor" href="#http头部和数据如何组织在一起" aria-hidden="true">#</a> HTTP头部和数据如何组织在一起</h4><p><img src="/assets/img/day2-HTTP-request-message.ac379a72.png" alt="HTTP请求报文"></p><h4 id="wireshark抓包" tabindex="-1"><a class="header-anchor" href="#wireshark抓包" aria-hidden="true">#</a> Wireshark抓包</h4><p>首先打开Wireshark访问http://info.cern.ch/hypertext/WWW/TheProject.html</p><p><img src="/assets/img/day2-World-Wide-Web-shortcut.ae1b396c.png" alt=""></p><p>使用Wireshark抓包按照 <code>ip.src == 188.184.21.108</code> 过滤,先 <code>Ctrl+R</code> 清除记录一次)</p><p><img src="/assets/img/day2-wireshark.bc4bb754.png" alt="day2-wireshark"></p><p><code>Ctrl+Alt+Shift+T</code> 追踪TCP流右键 追踪流、TCP流</p><p><img src="/assets/img/day2-trace-tcp-stream.69b2b430.png" alt="day2-trace-tcp-stream"></p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>GET /hypertext/WWW/TheProject.html HTTP/1.1
Host: info.cern.ch
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
HTTP/1.1 200 OK
Date: Mon, 29 Nov 2021 12:28:56 GMT
Server: Apache
Last-Modified: Thu, 03 Dec 1992 08:37:20 GMT
ETag: &quot;8a9-291e721905000&quot;
Accept-Ranges: bytes
Content-Length: 2217
Connection: close
Content-Type: text/html
&lt;HEADER&gt;
&lt;TITLE&gt;The World Wide Web project&lt;/TITLE&gt;
&lt;NEXTID N=&quot;55&quot;&gt;
&lt;/HEADER&gt;
&lt;BODY&gt;
&lt;H1&gt;World Wide Web&lt;/H1&gt;The WorldWideWeb (W3) is a wide-area&lt;A
NAME=0 HREF=&quot;WhatIs.html&quot;&gt;
hypermedia&lt;/A&gt; information retrieval
initiative aiming to give universal
access to a large universe of documents.&lt;P&gt;
Everything there is online about
W3 is linked directly or indirectly
to this document, including an &lt;A
NAME=24 HREF=&quot;Summary.html&quot;&gt;executive
summary&lt;/A&gt; of the project, &lt;A
NAME=29 HREF=&quot;Administration/Mailing/Overview.html&quot;&gt;Mailing lists&lt;/A&gt;
, &lt;A
NAME=30 HREF=&quot;Policy.html&quot;&gt;Policy&lt;/A&gt; , November&#39;s &lt;A
NAME=34 HREF=&quot;News/9211.html&quot;&gt;W3 news&lt;/A&gt; ,
&lt;A
NAME=41 HREF=&quot;FAQ/List.html&quot;&gt;Frequently Asked Questions&lt;/A&gt; .
&lt;DL&gt;
&lt;DT&gt;&lt;A
NAME=44 HREF=&quot;../DataSources/Top.html&quot;&gt;What&#39;s out there?&lt;/A&gt;
&lt;DD&gt; Pointers to the
world&#39;s online information,&lt;A
NAME=45 HREF=&quot;../DataSources/bySubject/Overview.html&quot;&gt; subjects&lt;/A&gt;
, &lt;A
NAME=z54 HREF=&quot;../DataSources/WWW/Servers.html&quot;&gt;W3 servers&lt;/A&gt;, etc.
&lt;DT&gt;&lt;A
NAME=46 HREF=&quot;Help.html&quot;&gt;Help&lt;/A&gt;
&lt;DD&gt; on the browser you are using
&lt;DT&gt;&lt;A
NAME=13 HREF=&quot;Status.html&quot;&gt;Software Products&lt;/A&gt;
&lt;DD&gt; A list of W3 project
components and their current state.
(e.g. &lt;A
NAME=27 HREF=&quot;LineMode/Browser.html&quot;&gt;Line Mode&lt;/A&gt; ,X11 &lt;A
NAME=35 HREF=&quot;Status.html#35&quot;&gt;Viola&lt;/A&gt; , &lt;A
NAME=26 HREF=&quot;NeXT/WorldWideWeb.html&quot;&gt;NeXTStep&lt;/A&gt;
, &lt;A
NAME=25 HREF=&quot;Daemon/Overview.html&quot;&gt;Servers&lt;/A&gt; , &lt;A
NAME=51 HREF=&quot;Tools/Overview.html&quot;&gt;Tools&lt;/A&gt; ,&lt;A
NAME=53 HREF=&quot;MailRobot/Overview.html&quot;&gt; Mail robot&lt;/A&gt; ,&lt;A
NAME=52 HREF=&quot;Status.html#57&quot;&gt;
Library&lt;/A&gt; )
&lt;DT&gt;&lt;A
NAME=47 HREF=&quot;Technical.html&quot;&gt;Technical&lt;/A&gt;
&lt;DD&gt; Details of protocols, formats,
program internals etc
&lt;DT&gt;&lt;A
NAME=40 HREF=&quot;Bibliography.html&quot;&gt;Bibliography&lt;/A&gt;
&lt;DD&gt; Paper documentation
on W3 and references.
&lt;DT&gt;&lt;A
NAME=14 HREF=&quot;People.html&quot;&gt;People&lt;/A&gt;
&lt;DD&gt; A list of some people involved
in the project.
&lt;DT&gt;&lt;A
NAME=15 HREF=&quot;History.html&quot;&gt;History&lt;/A&gt;
&lt;DD&gt; A summary of the history
of the project.
&lt;DT&gt;&lt;A
NAME=37 HREF=&quot;Helping.html&quot;&gt;How can I help&lt;/A&gt; ?
&lt;DD&gt; If you would like
to support the web..
&lt;DT&gt;&lt;A
NAME=48 HREF=&quot;../README.html&quot;&gt;Getting code&lt;/A&gt;
&lt;DD&gt; Getting the code by&lt;A
NAME=49 HREF=&quot;LineMode/Defaults/Distribution.html&quot;&gt;
anonymous FTP&lt;/A&gt; , etc.&lt;/A&gt;
&lt;/DL&gt;
&lt;/BODY&gt;
</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br><span class="line-number">14</span><br><span class="line-number">15</span><br><span class="line-number">16</span><br><span class="line-number">17</span><br><span class="line-number">18</span><br><span class="line-number">19</span><br><span class="line-number">20</span><br><span class="line-number">21</span><br><span class="line-number">22</span><br><span class="line-number">23</span><br><span class="line-number">24</span><br><span class="line-number">25</span><br><span class="line-number">26</span><br><span class="line-number">27</span><br><span class="line-number">28</span><br><span class="line-number">29</span><br><span class="line-number">30</span><br><span class="line-number">31</span><br><span class="line-number">32</span><br><span class="line-number">33</span><br><span class="line-number">34</span><br><span class="line-number">35</span><br><span class="line-number">36</span><br><span class="line-number">37</span><br><span class="line-number">38</span><br><span class="line-number">39</span><br><span class="line-number">40</span><br><span class="line-number">41</span><br><span class="line-number">42</span><br><span class="line-number">43</span><br><span class="line-number">44</span><br><span class="line-number">45</span><br><span class="line-number">46</span><br><span class="line-number">47</span><br><span class="line-number">48</span><br><span class="line-number">49</span><br><span class="line-number">50</span><br><span class="line-number">51</span><br><span class="line-number">52</span><br><span class="line-number">53</span><br><span class="line-number">54</span><br><span class="line-number">55</span><br><span class="line-number">56</span><br><span class="line-number">57</span><br><span class="line-number">58</span><br><span class="line-number">59</span><br><span class="line-number">60</span><br><span class="line-number">61</span><br><span class="line-number">62</span><br><span class="line-number">63</span><br><span class="line-number">64</span><br><span class="line-number">65</span><br><span class="line-number">66</span><br><span class="line-number">67</span><br><span class="line-number">68</span><br><span class="line-number">69</span><br><span class="line-number">70</span><br><span class="line-number">71</span><br><span class="line-number">72</span><br><span class="line-number">73</span><br><span class="line-number">74</span><br><span class="line-number">75</span><br><span class="line-number">76</span><br><span class="line-number">77</span><br><span class="line-number">78</span><br><span class="line-number">79</span><br><span class="line-number">80</span><br><span class="line-number">81</span><br><span class="line-number">82</span><br><span class="line-number">83</span><br><span class="line-number">84</span><br><span class="line-number">85</span><br><span class="line-number">86</span><br><span class="line-number">87</span><br><span class="line-number">88</span><br><span class="line-number">89</span><br><span class="line-number">90</span><br><span class="line-number">91</span><br><span class="line-number">92</span><br><span class="line-number">93</span><br><span class="line-number">94</span><br></div></div><p><strong>请求</strong></p><p>MethodGET</p><p>URI/hypertext/WWW/TheProject.html</p><p>HTTP版本HTTP/1.1</p><p>Headers</p><p>Host: info.cern.ch User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,<em>/</em>;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: keep-alive Upgrade-Insecure-Requests: 1 Pragma: no-cache Cache-Control: no-cache</p><p><strong>响应</strong></p><p>状态码HTTP/1.1 200 OK</p><p>Headers</p><p>Date: Mon, 29 Nov 2021 12:28:56 GMT Server: Apache Last-Modified: Thu, 03 Dec 1992 08:37:20 GMT ETag: &quot;8a9-291e721905000&quot; Accept-Ranges: bytes Content-Length: 2217 Connection: close Content-Type: text/html</p><p>HTML内容</p><p></p><h2 id="第3天" tabindex="-1"><a class="header-anchor" href="#第3天" aria-hidden="true">#</a> 第3天</h2><h3 id="任务-套接字编程基础知识" tabindex="-1"><a class="header-anchor" href="#任务-套接字编程基础知识" aria-hidden="true">#</a> 任务:套接字编程基础知识</h3><p>学习资料: 《网络编程》第六章(见附件)</p><p>https://www.jianshu.com/p/6ca1c102fc00</p><p>https://wenku.baidu.com/view/8d0f749881c758f5f71f6749.html</p><p>作业:写一篇小短文,发布在星球,回答几个问题</p><ul><li>什么是套接字?</li><li>套接字有哪几个类型?</li><li>用套接字编写一个客户端和服务端,分别有哪几个步骤?</li></ul><p>附件:<a href="/web-server/files/day3-Linux%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.pdf">Linux网络编程.pdf</a></p><h3 id="作业-2" tabindex="-1"><a class="header-anchor" href="#作业-2" aria-hidden="true">#</a> 作业</h3><h4 id="什么是套接字" tabindex="-1"><a class="header-anchor" href="#什么是套接字" aria-hidden="true">#</a> 什么是套接字?</h4><p>套接字socket为通信的端点每个套接字由一个 IP 地址和一个端口号组成。通过网络通信的每对进程需要使用一对套接字,即每个进程各有一个。</p><h4 id="套接字有哪几个类型" tabindex="-1"><a class="header-anchor" href="#套接字有哪几个类型" aria-hidden="true">#</a> 套接字有哪几个类型?</h4><p>套接字的类型</p><p>常用的TCP/IP协议的3种套接字类型如下所示。</p><p>流套接字SOCK_STREAM</p><p>流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送并按顺序接收。流套接字之所以能够实现可靠的数据服务原因在于其使用了传输控制协议即TCPThe Transmission Control Protocol协议。</p><p>数据包套接字SOCK_DGRAM</p><p>数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性数据有可能在传输过程中丢失或出现数据重复且无法保证顺序地接收到数据。数据包套接字使用UDPUser Datagram Protocol协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性对于有可能出现的数据丢失情况需要在程序中做相应的处理。</p><p>原始套接字SOCK_RAW</p><p>原始套接字(SOCKET_RAW)允许对较低层次的协议直接访问比如IP、 ICMP协议它常用于检验新的协议实现或者访问现有服务中配置的新设备因为RAW SOCKET可以自如地控制Windows下的多种协议能够对网络底层的传输机制进行控制所以可以应用原始套接字来操纵网络层和传输层应用。比如我们可以通过RAW SOCKET来接收发向本机的ICMP、IGMP协议包或者接收TCP/IP栈不能够处理的IP包也可以用来发送一些自定包头或自定协议的IP包。网络监听技术很大程度上依赖于SOCKET_RAW</p><p>原始套接字与标准套接字标准套接字指的是前面介绍的流套接字和数据包套接字的区别在于原始套接字可以读写内核没有处理的IP数据包而流套接字只能读取TCP协议的数据数据报套接字只能读取UDP协议的数据。因此如果要访问其他协议发送数据必须使用原始套接字。</p><h4 id="用套接字编写一个客户端和服务端-分别有哪几个步骤" tabindex="-1"><a class="header-anchor" href="#用套接字编写一个客户端和服务端-分别有哪几个步骤" aria-hidden="true">#</a> 用套接字编写一个客户端和服务端,分别有哪几个步骤?</h4><p><strong>服务端</strong></p><ol><li>返回socket句柄</li><li>设置套接字</li><li>绑定端口,开始监听</li><li>等待客户端连接</li></ol><p><strong>客户端</strong></p><ol><li>创建连接</li><li>发送请求</li></ol><hr><p>下面是网上找到的:</p><p><strong>服务器</strong></p><ol><li><p>socketfd = socket(........); 返回一个socket文件句柄</p></li><li><p>设置套接字 setsockopt(socketfd , SOL_SOCKET, SO_REUSEADDR, &amp;on, sizeof(on)) &lt; 0) // int on =1; SO_REUSEADDR表示可以重复使用一个端口</p></li><li><p>memset(&amp;addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = ; (端口号) <em>/ addr.sin_addr.s_addr = htonl(INADDR_ANY); /</em> 可以监听本地的所有的ip */</p></li><li><p>bind(socketfd , (struct sockaddr*)&amp;addr, sizeof(addr)) != 0 ) // 绑定端口和IP</p></li><li><p>listen(socketfd , 10) != 0 /* 启动监测数据,最多可以同时连接10个客服端 */</p></li><li><p>clientfd = accept(socketfd , (struct sockaddr <em>)&amp;client_addr, &amp;addr_len); /</em> 等待客服端的链接,如果有链接,则建立链接 返回一个客服端的clientfd 会堵塞*/</p></li></ol><p><strong>客户端</strong></p><ol><li><p>iSocketClient = socket(AF_INET, SOCK_DGRAM, 0); // SOCK_DGRAM 表示UDP</p></li><li><p>tSocketServerAddr.sin_family = AF_INET; tSocketServerAddr.sin_port = htons(端口号); /* host to net, short */ //tSocketServerAddr.sin_addr.s_addr = INADDR_ANY;</p></li><li><p>iRet = connect(iSocketClient, (const struct sockaddr *)&amp;tSocketServerAddr, sizeof(struct sockaddr)); // 连接</p></li></ol><p>参考https://blog.csdn.net/lgz929974811/article/details/106006925</p><h2 id="★-第4天" tabindex="-1"><a class="header-anchor" href="#★-第4天" aria-hidden="true">#</a> ★ 第4天</h2><h3 id="任务-编写一个tcp-client-发出一个简单的http请求" tabindex="-1"><a class="header-anchor" href="#任务-编写一个tcp-client-发出一个简单的http请求" aria-hidden="true">#</a> 任务编写一个TCP Client发出一个简单的HTTP请求</h3><p>学习资料:</p><ul><li>C/C++ socket编程《网络编程》见附件</li><li>Python socket编程<a href="https://www.cnblogs.com/george92/p/9291394.html" target="_blank" rel="noopener noreferrer">https://www.cnblogs.com/george92/p/9291394.html<span><svg class="icon outbound" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><!--[--><span class="sr-only">open in new window</span><!--]--></span></a></li><li>Java socket编程<a href="https://m.runoob.com/java/java-networking.html" target="_blank" rel="noopener noreferrer">https://m.runoob.com/java/java-networking.html<span><svg class="icon outbound" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><!--[--><span class="sr-only">open in new window</span><!--]--></span></a></li></ul><p>作业:</p><p>编写一个TCP Client程序向http://www.baidu.com发起一个GET请求并把服务器返回的数据打印出来</p><p>附件:<a href="/web-server/files/day3-Linux%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.pdf">Linux网络编程.pdf</a></p><h3 id="作业-3" tabindex="-1"><a class="header-anchor" href="#作业-3" aria-hidden="true">#</a> 作业</h3><p>面向连接的socket的工作流程👇</p><p><img src="/assets/img/day4-the-workflow-of-connection-oriented-sockets.81b480c8.png" alt="day4-the-workflow-of-connection-oriented-sockets"></p><p>无连接的socket工作流程👇</p><p><img src="/assets/img/day4-the-workflow-of-connection-oriented-sockets.81b480c8.png" alt="day4-the-workflow-of-connection-oriented-sockets"></p><h2 id="★-第5天" tabindex="-1"><a class="header-anchor" href="#★-第5天" aria-hidden="true">#</a> ★ 第5天</h2><h3 id="任务-编写一个tcp-server-发出一个简单的http响应" tabindex="-1"><a class="header-anchor" href="#任务-编写一个tcp-server-发出一个简单的http响应" aria-hidden="true">#</a> 任务编写一个TCP Server发出一个简单的HTTP响应</h3><p>学习资料:同昨天相同</p><p>作业:</p><p>编写一个TCP Server程序当收到客户发来GET请求时先不用管请求的具体是什么都返回一个网页网页的内容如下</p><div class="language-html ext-html line-numbers-mode"><pre class="language-html"><code><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>html</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span>这是我的第一个网页!<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>body</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>html</span><span class="token punctuation">&gt;</span></span>
</code></pre><div class="line-numbers"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>使用浏览器去访问自己写的这个TCP Server截图展示访问效果</p><p>然后使用前一天自己编写的TCP Client去请求这个Server通过Client将这个网页内容打印出来</p><h3 id="作业-4" tabindex="-1"><a class="header-anchor" href="#作业-4" aria-hidden="true">#</a> 作业</h3><h2 id="★-第8天" tabindex="-1"><a class="header-anchor" href="#★-第8天" aria-hidden="true">#</a> ★ 第8天</h2><h3 id="任务-改造tcp-server-发送一个html文件" tabindex="-1"><a class="header-anchor" href="#任务-改造tcp-server-发送一个html文件" aria-hidden="true">#</a> 任务改造TCP Server发送一个HTML文件</h3><p>学习资料同任务4 作业今天的任务只有一个改动就是将第五天任务中的TCP Server返回的那个网页内容改为从文件中加载而不是固定写死在代码中。</p><h2 id="★-第9天" tabindex="-1"><a class="header-anchor" href="#★-第9天" aria-hidden="true">#</a> ★ 第9天</h2><h3 id="任务-使用多线程" tabindex="-1"><a class="header-anchor" href="#任务-使用多线程" aria-hidden="true">#</a> 任务:使用多线程</h3><p>学习资料同任务4 作业: 在原来TCP Server基础上进行改造当服务器收到连接请求时启动一个单独的线程进行处理。并且不要关闭连接继续监听这个客户端后续的请求。</p><p>附件:<a href="/web-server/files/day3-Linux%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B.pdf">Linux网络编程.pdf</a></p><h3 id="作业-5" tabindex="-1"><a class="header-anchor" href="#作业-5" aria-hidden="true">#</a> 作业</h3><h2 id="第10天" tabindex="-1"><a class="header-anchor" href="#第10天" aria-hidden="true">#</a> 第10天</h2><h3 id="任务-设计并使用配置文件" tabindex="-1"><a class="header-anchor" href="#任务-设计并使用配置文件" aria-hidden="true">#</a> 任务:设计并使用配置文件</h3><p>学习资料:无 作业: Web服务器一般会拥有多个参数将服务器绑定的IP、端口、HTML文件所在的目录写在配置文件中程序启动的时候进行加载。</p><p>需要自己设计自己的Web服务器的文件格式可以参考JSON、XML、YML等格式</p><h3 id="作业-6" tabindex="-1"><a class="header-anchor" href="#作业-6" aria-hidden="true">#</a> 作业</h3><iframe src="/web-server/files/day10-conf.json"></iframe><p><img src="/assets/img/day10-conf-image.07fa24a3.png" alt="day10-conf-image"></p><h3 id="作业-7" tabindex="-1"><a class="header-anchor" href="#作业-7" aria-hidden="true">#</a> 作业</h3><h3 id="作业-8" tabindex="-1"><a class="header-anchor" href="#作业-8" aria-hidden="true">#</a> 作业</h3><h3 id="作业-9" tabindex="-1"><a class="header-anchor" href="#作业-9" aria-hidden="true">#</a> 作业</h3><h3 id="作业-10" tabindex="-1"><a class="header-anchor" href="#作业-10" aria-hidden="true">#</a> 作业</h3><hr><p>11.29 11:01 其他人的作业</p><h1 id="笔记" tabindex="-1"><a class="header-anchor" href="#笔记" aria-hidden="true">#</a> 笔记</h1><h4 id="回答轩辕大佬的问题" tabindex="-1"><a class="header-anchor" href="#回答轩辕大佬的问题" aria-hidden="true">#</a> 回答轩辕大佬的问题:</h4><h5 id="_1-web服务器-约等于-http服务器-其他服务" tabindex="-1"><a class="header-anchor" href="#_1-web服务器-约等于-http服务器-其他服务" aria-hidden="true">#</a> 1.Web服务器 约等于 HTTP服务器 + 其他服务</h5><p>(先不去管它这些操作具体的名称,单纯记录他的操作,后面再补) 包含拿到数据包之后解包的东西、解析客户端的意图的东西、进行分类处理或是提供某种文件、或是处理数据的东西、将结果装入缓冲区的东西、将以HTTP协议格式打包的东西、将该数据包推入Internet的东西</p><h5 id="_2-主要流程是-接收数据-⇒-http解析-⇒-逻辑处理-⇒-http封包-⇒-发送数据" tabindex="-1"><a class="header-anchor" href="#_2-主要流程是-接收数据-⇒-http解析-⇒-逻辑处理-⇒-http封包-⇒-发送数据" aria-hidden="true">#</a> 2.主要流程是:接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据</h5><h5 id="_3-用电脑画图画的-有点丑哈哈哈" tabindex="-1"><a class="header-anchor" href="#_3-用电脑画图画的-有点丑哈哈哈" aria-hidden="true">#</a> 3.用电脑画图画的,有点丑哈哈哈</h5><h4 id="其他" tabindex="-1"><a class="header-anchor" href="#其他" aria-hidden="true">#</a> 其他</h4><p>顺便熟悉一下Markdown语法哈哈哈 稍微浏览了一下计网的书,感觉轩辕大佬的模式很好,通过项目学习,补充细节 在公众号搜到几篇文章,感觉挺有意思的,特别是有画小人的那个图解的</p><h5 id="网址信息收集" tabindex="-1"><a class="header-anchor" href="#网址信息收集" aria-hidden="true">#</a> 网址信息收集</h5><p><strong><em>下面四个是一个系列的</em></strong> [# 自己动手开发一个 Web 服务器(一)](https://mp.weixin.qq.com/s/cTfLlJNpKhixk31zlvaFgg [# 自己动手开发一个 Web 服务器(二)](https://mp.weixin.qq.com/s/2ulVC3L3w3YLcN4QS6lEvA [# 自己动手开发一个 Web 服务器《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=A》](https://mp.weixin.qq.com/s/Yn_4XhwNSAuqNFGAilSmAA [# 自己动手开发一个 Web 服务器《https://wx.zsxq.com/mweb/views/weread/search.html?keyword=B》](https://mp.weixin.qq.com/s/B0CRXwKs8Z8FrW5tbEVHpg</p><hr><p>[#Web服务器工作原理详解基础篇](https://mp.weixin.qq.com/s/eb7xOT0-2uE9caaEfAqSCg就是轩辕大佬发的 [# Linux下Web服务器详解](https://mp.weixin.qq.com/s/RZFQLpgjHj1V89BWyT8pQA [# Linux | 搭建Web服务器](https://mp.weixin.qq.com/s/X6u3SBhZ7A54-uczToD9Kw [# 来写一个属于自己的Web服务器](https://mp.weixin.qq.com/s/W5eDKKcHwlHtc-ssWOWBAg [# 开发一个属于自己的 web 服务器](https://mp.weixin.qq.com/s/zX8JGTQ-GwC2q63UuIQKFw [# 如何开发一个web静态服务器](https://mp.weixin.qq.com/s/H_t4jPSiBdogYVscoqUVaA [# 开发一个 web 服务器](https://mp.weixin.qq.com/s/EoDV6g93TzKMGDV-R12jqA [# web服务器开发之理论篇](https://mp.weixin.qq.com/s/ufQ68pdC7ZR3aI2gKZdsgw [# 手写一个 web 服务器!](https://mp.weixin.qq.com/s/cKgoSqIk97M1M9Q-gBOLBw [# Python 高手之路从零开始打造一个Web服务器](https://mp.weixin.qq.com/s/3OWFXRTfhL30twQF4UzFUQ</p><p>https://t.zsxq.com/YNZNRnm</p><!--]--></div><footer class="page-meta"><!----><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><span class="meta-item-info">2021/12/6 上午12:23:53</span></div><div class="meta-item contributors"><span class="meta-item-label">Contributors: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: 2291200076@qq.com">Coding Zhang</span><!----><!--]--><!--]--></span></div></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
<script src="/assets/js/runtime~app.c4644b03.js" defer></script><script src="/assets/js/567.6fcf9384.js" defer></script><script src="/assets/js/app.37033afc.js" defer></script>
</body>
</html>