基本概念

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给服务器。