HTTP协议全称为超文本传输协议,所谓超文本,就是指可以传输文本及其他格式的数据,如音乐,图片,视频等,是一种被广泛应用的应用层协议。对于应用层协议的解释:将数据从A端传输到B端,TCP/IP协议对应的功能是顺丰的功能,但是两端还要对数据进行加工处理或使用,所以还需要一层协议,不必关心通信时的细节,只关心应用,这层协议就是应用层协议。我们平时打开的网站就是通过HTTP协议来传输数据的,HTTP协议是基于传输层TCP协议实现。HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。通常访问一个网站的时候,涉及到多次HTTP请求和响应的交互过程,可以通过浏览器的开发者工具的网络标签页,刷新页面查看详细过程。
分析HTTP协议格式
- HTTP请求格式
- HTTP响应格式
HTTP请求:
URL(Uniform Resource Locator统一资源定位符):互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。
URL的具体格式:
资源在哪台主机上——域名(domain)或者ip来体现一主机(host)和主机上的哪个进程去获取资源——端口(port)。具体定位到是该进程管理的哪个资源——资源路径/路径(path)。URL设计之处,不仅仅为HTTP协议使用。所以需要标识出本次资源对应的协议(protocol/schema)。针对本次请求,除了资源本身之外的特殊要求。(查询字符串query string、文档片段fragment)
首行:请求方法+url+协议版本号。
Header头:请求的属性,为多个用冒号分割的键值对,每个键值独占一行。
空行:表示Header头的结束。
Host:标识服务器主机的地址(域名或IP+端口)
Header头中有两个字段:
Content-Length:标识Body的长度(字节长度),对方根据这个属性来解析。
Content-Type:标识Body的数据格式,目的是告诉对方如何解析body。
image/jpeg:指定具体的一个文件类型,客户端发送请求只能上传一个文件,服务端返回相应只能返回一个图片。
User-Agent:简称UA,标识浏览器和操作系统的信息,常用作判断是哪个浏览器,pc,手机
Referer:标识这个页面是从哪个页面跳转过来。
Cookie:用于请求头,浏览器自动携带本网站在本地保存的Cookie信息。Set-Cookie:用于响应头,服务端设置信息。
Body:空行后面的内容都是Body,Body允许空,如果Body存在,则在Header头中有一个Content-Length的属性来标识Body的长度。
HTTP响应:
状态行:协议版本、数字形式的状态代码和状态描述,元素之间以空格分隔。
响应头:包含服务器类型、日期、长度、内容类型等。
空行:响应头与响应体之间用空行隔开。
响应正文:程序处理后果,浏览器会将实体内容中的数据取出来,生成相应的页面。
状态码由三位数字构成,表示访问一个页面的结果,HTTP响应报文由服务端返回(程序可以设置内容),状态码也可以由程序设置。
200:表示服务端对当次请求处理成功。
404 Not Found:找不到请求路径url对应的资源。
304 Not Modified:表示之前访问过的资源,本次请求时没有被修改过,也就是客户端直接从缓存中获取。
403 Forbidden:表示访问被拒绝,一般是没有访问权限,没有登陆时就访问就会出现403。
405 Method Not Allowed:方法不支持,检查前端请求方法也要检查后端的请求方法。
500 Internal Server Error:服务器内部错误,要检查后端控制台异常堆栈信息。
504 Gateway Timeout:请求在服务端处理超时,服务端也有返回响应的时间限制,发现处理时间超时就返回504。