本文正在参与 “网络协议必知必会”征文活动
前言
在浏览器中输入:https://juejin.cn/,可以看到掘金的首页。
当你请求掘金地址时,整个过程发生了什么?
- 浏览器将域名发送给DNS服务器,让它解析为IP地址
- 首先建立TCP连接,三次握手和四次挥手
- 连接建立后,就是发送HTTP请求
- 服务端响应请求并返回结果给浏览器,浏览器渲染结果
Http协议
超文本传输协议【HyperText Transfer Protocol】, 是应用层的协议,用于分布式、协作式和超媒体信息系统的通信的协议。
主要特点:
- 支持客户端/服务端模式
- 请求简单快速,使用GET、POST、HEAD等方法和请求路径向服务器发送请求。因HTTP协议简单,所以通信快
- 允许传输任意类型的数据对象,通过Content-Type 标记
- 无连接: 每次http 连接只处理一个请求,服务端接收到客户端请求并应答后即断开连接,这种方式可以节省传输时间
- HTTP协议是无状态协议。不记录任何信息,如果后续需要处理前面信息都需要重新传输
URL
`https://juejin.cn/是请求URL,也是一种位置表示,其格式如下:
http://host[":"port][abs_path]
- http 是网络协议
- host 是合法网络的主机域名或IP地址
- port 是指定端口号,缺省端口是80
- abs_path 请求资源的URI,统一资源定位符
请求
http 请求时主要有三部分组成
-
请求行:格式:
[Method] [Request-URI] [HTTP-Version] CRLF- Method表示请求方法;支持 GET、POST、HEAD、PUT、DELETE、TRACE、CONNECT、OPTIONS
- Request-URI是一个统一资源标识符;
- HTTP-Version表示请求的HTTP协议版本;
- CRLF表示回车和换行
-
消息报文
- HTTP消息报头都包含普通报头、请求报头、响应报头、实体报头
-
请求正文
响应
服务端接收到请求消息后,需要返回一个HTTP响应消息,响应也是有三部分组成
-
状态行,格式:
HTTP-Version Status-Code Reason-Phrase CRLF- HTTP-Version表示服务器HTTP协议的版本;
- Status-Code表示服务器发回的响应状态代码;
- Reason-Phrase表示状态代码的文本描述
常见的状态码:
-
状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:
- 1xx:指示信息--表示请求已接收,继续处理
- 2xx:成功--表示请求已被成功接收、理解、接受
- 3xx:重定向--要完成请求必须进行更进一步的操作
- 4xx:客户端错误--请求有语法错误或请求无法实现
- 5xx:服务器端错误--服务器未能实现合法的请求
- 消息报文
- 响应正文