HTTP协议简介
Web使用一种名为HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器等一系列运作流程。而协议是指规则的约定。可以说,Web是建立在HTTP协议上通信的
TCP/IP 协议族
- 应用层
应用层规定了向用户提供应用服务时通信的协议,如:
TCP/IP 协议族内预存了各类通用的应用服务协议。比如,FTP(File Transfer Protocol,文件传输协议)、DNS(Domain Name System,域名系统)以及HTTP协议。
DNS域名系统提供域名(如:www.baidu.com)到IP地址(如:119.75.217.109)之间的解析服务。
2.传输层
传输层对接上层应用层,提供处于网络连接中两台计算机之间的数据传输所使用的协议。
在传输层有两个性质不同的协议:TCP(Transmission Control Protocol,传输控制协议,类似打电话)和UDP(User Data Protocol,用户数据报协议,类似发短信)。
3.网络层
网络层规定了数据通过怎样的传输路线到达对方计算机传送给对方(IP协议等)。
与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的所用就是在众多的选项内选择一条传输路线。就跟携程提供的回家路线图作用一样。
4.链路层
用来处理连接网络的硬件部分,包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
-
串行连接 一次请求对应一次响应,每次请求都要进行三次握手四次挥手
-
持久连接 一定时间内,同一域名下的HTTP请求,只要两端都没有提出断开连接,则持久保持TCP连接状态,其他请求可以复用这个连接通道
-
管道化持久连接 管道化则可以不用等待响应返回而发送下个请求并按顺序返回响应,现代浏览器并未默认开启管道化。
-
HTTP/2.0多路复用
-
WebSocket: WebSocket是HTML5提出的一种客户端和服务端通讯的全双工协议,由客户端发起请求,建立连接之后不仅客户端可以主动向服务端发送请求,服务端可以主动向客户端推送信息。
HTTP协议缺点
- 通信使用明文不对数据进行加密(内容容易被窃听)
- 不验证通信方身份(容易伪装)
- 无法确定报文完整性(内容易被篡改
HTTP报文
用于HTTP协议交互的信息被称为HTTP报文。客户端的HTTP报文叫请求报文,服务端的HTTP报文叫响应报文。
请求报文 是由请求行(请求方法、协议版本)、请求首部(请求URI、客户端信息等)和内容实体(用户信息和资源信息等,可为空)构成。
响应报文 是由状态行(协议版本、状态码)、响应首部(服务器名称、资源标识等)和内容实体(服务端返回的资源信息)构成。
请求方法
GET:get方法一般用于获取服务器资源
POST:post方法一般用于传输实体主体
PUT:put方法一般用于传输文件
DELETE:delete方法用于删除文件
HEAD:head方法用于获取报文首部,不返回报文主体
OPTIONS:options方法用于询问请求URI资源支持的方法
状态码
2XX | 成功(这系列表明请求被正常处理了) |
---|---|
200 | OK,表示从客户端发来的请求在服务器端被正确处理 |
204 | No content,表示请求成功,但响应报文不含实体的主体部分 |
206 | Partial Content,进行范围请求成功 |
3XX | 重定向(表明浏览器要执行特殊处理) |
---|---|
301 | moved permanently,永久性重定向,表示资源已被分配了新的 URL |
302 | found,临时性重定向,表示资源临时被分配了新的 URL |
303 | see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源(对于301/302/303响应,几乎所有浏览器都会删除报文主体并自动用GET重新请求) |
304 | not modified,表示服务器允许访问资源,但请求未满足条件的情况(与重定向无关) |
307 | temporary redirect,临时重定向,和302含义类似,但是期望客户端保持请求方法不变向新的地址发出请求 |
4XX | 客户端错误 |
---|---|
400 | bad request,请求报文存在语法错误 |
401 | unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息 |
403 | forbidden,表示对请求资源的访问被服务器拒绝,可在实体主体部分返回原因描述 |
404 | not found,表示在服务器上没有找到请求的资源 |
5XX | 服务器错误 |
---|---|
500 | internal sever error,表示服务器端在执行请求时发生了错误 |
501 | Not Implemented,表示服务器不支持当前请求所需要的某个功能 |
503 | service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求 |
TCP三次握手
- 客户端 -> (请求建立链接) -> 服务端
- 客户端 <- (确认建立链接) <- 服务端
- 客户端 -> (确认链接over) -> 服务端 接下来就可以愉快的传输数据了
TCP四次挥手
- 客户端 -> (请求关闭链接) -> 服务端
- 客户端 <- (确认关闭链接请求) <- 服务端
- 客户端 <- (确认关闭链接) <- 服务端
- 客户端 -> (确认关闭链接) -> 服务端 再见, 下次再见(如果服务器HTTP协议不支持长连接就断开了)
服务端
4. 客户端 -> (确认关闭链接) -> 服务端 再见, 下次再见(如果服务器HTTP协议不支持长连接就断开了) [外链图片转存中…(img-u4Q3QBkW-1618738793820)]