HTTP协议之编写简单的Web服务器
花开花落,倏忽一载便逝矣,新的一年,祝大家天天开心 HTTP即超文本传输协议(Hypertext Transfer Protocol),是Web通信所使用的协议。它是基于TCP/IP实现的协议,所以本篇需要先了解TCP通信,我们将使用TCP来写一个简单的Web服务器端,它可以响应浏览器的访问。 通信需要服务端和客户端,在这里浏览器就属于客户端,当访问一个网页时,浏览器内部会创建套接字和服务器进行通信。服务器会响应请求返回一些HTML格式的数据给浏览器,浏览器来把这些HTML数据解析成我们看到的漂亮的页面。 当我们在浏览器的地址栏上敲下一个域名地址后,浏览器会先通过默认DNS服务器获取该域名对应的IP地址,然后向服务器发送请求,请求有一定的标准,分为: 请求行 消息头 空行 消息体 现在来随便访问一个网址,这里使用的是 Firefox 浏览器,按 Ctrl+Shift+E 可以查看网络请求。 左边对应的是浏览器对服务器发出的请求,右边对应的是该条请求相关的信息。 我们先看左边的第一条,这里的请求方式是GET,表示想从服务器获取文件,获取的文件目录是/。然后服务器响应请求,发回了状态码302,表示Found重定向,我们本来访问的是 www.bing.com,现在被重定向到了 https://cn.bing.com/。这个重定向地址是通过响应头的location指定的,可以在右边看到。 https是加了SSL/TLS的协议,在需要安全的环境下,比如发送银行卡,身份信息等地方都会使用。只使用http这些信息很容易被窃听,SSL/TLS会对请求和响应的信息进行加密解密操作,保证数据安全。 接着同样是一些GET请求用于从服务器获取数据,状态码200 OK表示请求已经成功。还有常见的404 Not Found,表示找不到客户端请求的资源,这种情况我们就把链接转移到404错误页。现在来把对应的请求整理如下: 请求行: GET / HTTP/2.0 消息头: Accept:text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8 Accept-Encoding:gzip, deflate, br 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 Connection:keep-alive Cookie:_EDGE_V=1; MUID=3802FC7ABA5D6F…ndefined; _UR=OMD=13190641321 Host:cn.bing.com Upgrade-Insecure-Requests:1 User-Agent:Mozilla/5.0 (Windows NT 10.0; …) Gecko/20100101 Firefox/64.0 空行: 消息体: 请求行为一行数据,其中包含着请求方式,请求文件,HTTP版本。… Continue Reading HTTP协议之编写简单的Web服务器