HTTP协议
- 网络基础
- 网络的服务器基于请求和响应的
https://
协议名 http ftp ...
xxxxx.com
域名 domain
整个网络中存在着很多个服务器,每一个服务器都有他自己的唯一标识,这个标识被称为ip地址 如192.168.1.17,但是ip地址不方便记忆,域名就相当于ip地址别名
/hello/index.html
网站资源路径
1.当在浏览器中输入地址后发生了什么?
1.DNS解析,获取网站的ip地址
2.浏览器需要和服务器建立链接(tcp/ip)(三次握手)
3.向服务器发送请求报文(http协议)
4.服务器处理请求,并返回响应报文(http协议)
5.浏览器将响应的页面渲染
6.断开和服务器的连接(四次挥手)
2.客户端如何和服务器建立(断开)连接
- 通过三次握手和四次挥手
- 三次握手(建立连接)
- 三次握手是客户端和服务器建立连接的过程
1.客户端向服务器发送连接请求(SYN(同步标识符))
2.服务器收到连接请求,向客服端返回消息(SYN(申请与客户端通信),ACK(表示同意))
3.客户端向服务器发送同意连接的信息(ACK(表示同意))
- 四次挥手(断开连接)
1.客户端向服务器发送请求,通知服务器数据发送完毕,请求断开连接(FIN(表示数据发完了))
2.服务器向客户端返回数据,知道了(ACK(表示知道了))
3.服务器向客服端返回数据,收完了,可以断开连接(FIN(数据收完了),ACK(同意断开连接))
4.客户端向服务器发数据,可以断开了(ACK(表示知道了))
请求和响应实际上就是一段数据,只是这段数据需要遵循一个特殊的格式,这个特殊的格式由HTTP协议来规定
TCP/IP 协议族(了解)
- TCP/IP协议族中包含了一组协议
这组协议规定了互联网中的所有通信的细节
- 网络通信的过程由4层组成
应用层
- 软件的层面,浏览器服务器都属于应用层
传输层
- 负责对数据进行拆分,把大数据拆分为一个一个小包
网络层
- 负责给数据包添加信息
数据链路层
- 传输信息
- HTTP协议就是应用层的协议,用来规定客户端和服务器间通信的报文格式的
- 报文(message)是什么?
- 浏览器和服务器之间通信是基于请求和相应的
- 浏览器向服务器发送请求(request)
- 服务器向浏览器返回响应(response)
服务器向浏览器返回响应,相当于服务器给浏览器回信
这个信在HTTP协议中就被称为报文
- 而HTTP协议就是对这个报文的格式进行规定
- 服务器
- 一个服务器的主要功能:
1.可以接收到浏览器发送的请求报文
2.可以向浏览器返回响应报文
- 请求报文(request)
- 客户端发送给服务器的报文称为请求报文
- 请求报文的格式如下:
请求首行
请求头
空行
请求体
请求首行
GET /index.html?username=tonyHTTP/1.1
第一部分 get 表示请求的方式,get表示发送的get请求
现在常用的方式就是get和post请求
get请求主要用来向服务器请求资源
post请求主要用来向服务器发送数据
第二部分 /index.html?username=tony
表示请求资源的路径
? 后面的内容叫做查询字符串
查询字符串是一个名值对结构,一个名字对应一个值
使用=连接,多个名值对之间使用&分割
get请求通过查询字符串将数据发送到服务器
由于查询字符串会在浏览器地址栏直接显示,所以他安全性较差,同时,由于url地址长度有限制,所以get请求无法发送较大数据
post请求通过请求体来发送数据
- 在Chrome中通过 载荷 来查看
post请求通过请求体发送数据,无法在地址栏直接查看所以安全性较好
请求体的大小没有限制,可以发送任意大小的数据
第三部分 HTTP/1.1 协议的版本
请求头
- 请求头也是名值对结构,用来告诉服务器我们浏览器的信息
- 每一个请求头都有它的作用:
Accept 浏览器可以接受的文件类型
Accept-Encoding 浏览器允许的压缩的编码
Accept-Language 客户端浏览器可以接受的语言
User-Agent 用户代理,他是一段用来描述浏览器信息的字符串
空行
- 用来分隔请求头和请求体
请求体
- post请求通过请求体来发送数据
网页,css,js,图片这些资源会作为响应报文中的哪一部分发送响应体
- 响应报文:
响应首行
HTTP/1.1 200 OK
200 响应状态码
OK 对响应状态码的描述
- 响应状态吗的规则
1xx 请求处理中
2xx 表示成功
3xx 表示请求的重定向
4xx 表示客户端错误
5xx 表示服务器错误
响应头
- 响应头也是一个一个的名值对结构,用来告诉浏览器响应的信息
Content-Type 用来描述响应体的类型
Content-Length 用来描述响应体的大小
空行
- 空行用来分隔响应头与响应体
响应体
- 服务端返回给客户端的内容
下一篇:Linux文件和目录常用命令