基本概念
http:超文本传输协议,是互联网上应用很广泛的一个网络协议。它负责完成客户端到服务端的一系列操作,专门用来传输HTML的超媒体文档等web内容。他是基于TCP协议的应用层协议。http协议是以明文方式发送信息的,所以安全层很低。
https:是基于安全套接字的http协议,是由SSL+http协议构建的可进行加密传输、身份认证的网络协议。
区别
- http的URL是以http://开头,而https的URL是以https://开头。
- http是明文传输,安全性低,而https可以进行加密传输,身份认证。
- http的标准端口是80,而https的标准端口是443。
http请求
常见的http请求方法:
- GET:从服务器获得资源
- POST:客户端向服务器端提交资源
- PUT:修改服务器资源
- DELETE:修改服务器资源
http请求报文和响应报文
请求报文格式:请求行、请求头部、请求正文。
响应报文格式:状态行、响应头部、响应正文。
常见的http状态码
- 1XX:信息提示
- 2XX:成功状态码(200:OK)
- 3XX:重定向
- 4XX:客户端错误(404:Not Found)
- 5XX:内部服务器错误
http首部字段
首部字段分为四种类型:
- 通用首部字段:请求和响应报文都会使用的首部字段。
- 请求首部字段:客户端向服务器发送请求使用的首部字段。
- 响应首部字段:从服务器向客户端响应使用的首部字段。
- 实体首部字段:针对请求和响应报文的实体部分使用的首部字段。
一次完整的http请求
1、在地址栏输入网站的url地址。
2、输入url地址后,浏览器会查找浏览器缓存、系统缓存、路由缓存。如果有缓存就可以直接显示(在Cache—Control的max_age字段中有缓存的有效时间),如果没有就下一步。
3、通过DNS获取url对应的ip地址。通过本机的host文件中查找是否有url对应的ip地址,如果没有就请求DNS进行ip地址的获取。
4、建立TCP连接。通过TCP三次握手建立连接。
5、浏览器向web服务器发送请求。
6、浏览器给web服务器发送请求头信息。如果是POST还要发送请求体。
7、web服务器进行响应。
8、web服务器发送响应头消息。
9、web服务器发送数据。以响应头里面的content-type描述的格式发送数据。
10、web服务器关闭连接。web服务器向浏览器发送了应答数据之后,就要关闭tcp连接(TCP四次握手关闭连接),如果添加了connection:keep-alive就继续保持连接。
TCP三次握手
- 第一次握手:建立连接时,客户端发送syn包(syn=x)并进入SYN_SENT状态,等待服务器确认。
- 第二次握手:服务器收到syn包,必须确认客户的SYN(SYN=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态。
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入TCP连接成功状态,完成三次握手。
TCP四次挥手
- 第一次挥手:客户端发出fin,并且停止发送数据。
- 第二次挥手:服务器收到fin,发出ack。
- 第三次挥手:服务器发送fin给客户端。
- 第四次挥手:客户端发送ack给服务器。