认识url
url:就是我们平时说的“网址”
HTTP协议格式
HTTP:请求响应机制
HTTP底层协议:TCP 协议
TCP 的特点:面向连接,保证可靠性
面向连接:我要和对应的服务器进行通信,第一件事情就是要把连接建立好
一个简单的网络通信:
- 建立连接
- 发请求
- 响应请求并断开连接
应用层核心工作:
把数据通过 TCP 实现从A点到B点,但是从A——>B只是最基础阶段,它后续要对HTTP请求做出响应。
HTTP 用 TCP要实现的两个基本功能:
- 发数据;
- 收数据。
HTTP 不关心其他的细节问题。
HTTP的任务:
- 请求资源(从对方服务器将资源拿到)——更简单;
- 提交信息(处理数据),从客户端把数据推送到服务器。
HTTP请求:
请求报头每一行的格式:
Name:[空格]内容(一行就是一个属性,这里的“行”是以换行符作为标准)
Header 解析:
- 请求行:
[请求方法] [url] [版本] (空格分开)
- Host :请求的资源在哪个主机的端口上
- Connection:该请求支持长连接(heep_alive)
- Content-Length:正文内容长度
- Content-Type:数据类型
- User-Agent:声明用户的操作系统和浏览器版本信息
- Accent:发起了请求
- Referer:当前页面是从哪个页面跳转过来的
- Accept-Encoding:接受的编码
- Accept-Language:接受的语言类型
- Cookie:用于在客户端存储少量信息,通常用于实现会话(session)功能
详解 Connection:
HTTP 是应用层协议,HTTP 用的是下层的 TCP协议,而 TCP 是保证可靠性的。
TCP 为了保证可靠性,所以 TCP 是面向连接的。
TCP 面向连接之前必须先建立连接——> HTTP 向通信就要在底层先把连接建立好。
然后,发送方根据已经建立好的连接向服务器发送一个请求。
发过去之后对方就可以根据这个完整地读出来,对方再分析这个报文,然后对这个报文做出响应,HTTP 请求结束,之后断开连接。
这种一来一回的形式成为短连接(一次请求一个)
读请求:按行读取
什么时候读完报头?:读到空行
有效载荷:正文
报头和有效载荷分离:空行
紧挨着的几个请求如何分开:那么读一个请求时,在读取正文部分就要精确正文要读取多少,需要严格控制,所以报头中有一个属性——>Content-Length(正文的长度)
HTTP响应:
Header 解析:
- 状态行:
[版本号] [状态码] [状态码解释] (空格分开)
HTTP 方法
- GET:获取资源
- POST:传输实体主体
- PUT:传输文件
- HEAD:获得报文首部(相当于GET方法获得的资源去掉正文)
- DELETE:删除文件
- OPTIONS:询问支持的方法(客户端问服务器)
- TRACE:追踪路径
- OCONNECT:要求用隧道协议连接代理
- LINK:建立与资源之间的联系
- UNLINE:断开连接关系
GET 方法和 POST 方法核心点:
- 传参的数据量不一样,一个通过 url,一个通过正文,所以 POST 能传更多的数据;
- GET 方法和 POST 方法传参位置上,可靠性问题。
HTTP 状态码
状态码 | 类别 | 原因短语 |
---|---|---|
1XX | Informational (信息性状态码) | 接收的请求正在处理 |
2XX | Success (成功状态码) | 请求正常处理完毕 |
3XX | Redirection (重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error (客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error (服务器错误状态码) | 服务器处理请求出错 |
HTTP 总结
HTTP 如何做到将报头和有效载荷分开?
特殊符号:空行
HTTP 有没有向上交付?
理论上 HTTP 不需要向上交付,但是上一层还有用户,需要将正文、请求方法和属性等交给用户。