在互联网世界中,HTTP (HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文档)。HTTP 协议是客户端与服务器之间通信的基础。客户端通过 HTTP 协议向服务器发送请求,服务器收到请求后处理并返回响应。 HTTP 协议是一个无连接、无状态的协议,即每次请求都需要建立新的连接,且服务器不会保存客户端的状态信息。
平时我们俗称的 " 网址" 其实就是说的 URL。在互联网中,要找到一份资源,要知道资源所在主机的IP地址以及在该主机中的文件路径。域名会被解释成IP和端口。//,/,?等都是特殊字符,域名(服务器地址)是禁止出现特殊字符的。?后面都是kv参数,如果我们的搜索内容中本来就包含了特殊字符,那特殊字符在请求时浏览器会对其进行编码转换成对应的十六进制,我们的汉字也会被编码转换成对应的十六进制。
上面的/dir就是网站注册的搜索服务。
像/?:等这样的字符,已经被url当做特殊意义理解。因此这些字符不能随意出现。比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义。转义的规则如下:将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位 做一位,前面加上%,编码成%XY格式。
URI指的是指定服务器下的一串路径,指定服务器下的什么资源。 这里HTTP版本指的是客户端的版本。由上图可知,空行可以保证我们把报头全部读完,请求正文可以不携带。如果我们没有指明我们要请求什么资源,URI默认就是/,http协议可以支持默认首页。我们在一个网站中访问网页,进行页面跳转,每一次访问,都是一次http请求。进一步的我们也可以理解什么是网站,网站本质上就是一对特定目录和文件构成的目录结构。一张网页里可以包含很多资源,比如说图片。获取一张完整的网页,要先获取html,渲染解析html,浏览器会发起二次或多次请求,获取完成完整网页的所有元素,然后构成一个完整的网页结果。http内部要根据目标要访问的资源的文件后缀,区分清楚文件类型,通过Content-Type告诉浏览器我的响应正文的类型。
注意点:设置端口号复用,当服务器已经停止使用时还有客户端连着,此时服务器端的端口号还会被一直占用着,导致无法立即重启,设置端口号复用可以实现立即重启。
注意点:http的请求本质上是一个大字符串。httpserver尽量不依赖任何第三方库。我们可以把功能、服务当成资源,http本身不能进行数据处理。
这里HTTP版本指的是服务端的版本。我们可以看到请求报头和响应报头有的格式是一样的。 请求报头和响应报头中的版本字段可以保证客户端和服务端在通信时版本的匹配,不至于产生通信问题。
GET方法会以url的方式来向服务器提交参数,可以用于请求URL 指定的资源,指定资源经服务器端解析后返回响应内容。
POST方法会以正文形式进行参数的上传。POST方法上传参数要比GET方法更加私密,另外,POST方法可以传递更多、更大的数据。
六、HTTP响应报文状态码
最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)。