什么是HTTP协议
HTTP (全称为 “超文本传输协议”) 是一种应用非常广泛的应用层协议。
很难理解对吗?
那么,上图:
图内是浏览器控制台中打印出的页面调用接口的一部分。而test这个接口就是未加密的HTTP请求,
那么,我们从图中可以看出,HTTP请求涉及到三个大的模块。
请求行url,请求头部(request headers),响应头部(response headers);
这三者就是HTTP协议格式的基本元素。
看图:
HTTP协议中,无论是请求头还是响应头,数据格式都是K-V格式的。
首先说Request。
请求行
以此为例:https://dlswbr.baidu.com/heicha/mw/abclite-2036-s.js
Method:请求类型(GET,POST,delete,put…),实际上HTTP支持的方法很多,并不只是我们常用的
涉及到增删改查的请求类型,感兴趣的可以去了解下。
URL:https://dlswbr.baidu.com/heicha/mw/abclite-2036-s.js
dlswbr.baidu.com:资源在哪台主机上——域名 (domain) 或者ip来体现一主机 (host)
端口 (port):可有可无,主机上的哪个进程去获取资源
资源路径/路径 (path):互联网上的每一个文件/资源都是唯一的
Request
请求头本身数据格式为Key-value格式,且很多参数是可不用的。这里只介绍几个常见的参数。
HTTP最常见的请求头如下:
Accept:浏览器可接受的MIME类型;
Accept-Charset:浏览器可接受的字符集;
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间;
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到;
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中;
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小;
Content-Length:表示请求消息正文的长度;
Cookie:这是最重要的请求头信息之一;
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它;
Host:初始URL中的主机和端口;
If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答;
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝;
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用;
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
此外,前端可以在请求头中自定义参数,比如token,tenantId等等,但是,我们要注意,请求头中自定义参数必须要和后端协同使用,否则请求报错,因为添加自定义请求头参数必定会使请求变为非简单请求,感兴趣的朋友可以去了解下。
response
响应头包含三块内容,响应首行,协议头(response header),空行,响应正文(body)
响应首行有什么?
版本号:http协议版本
状态码:表示接口响应状态(常见的有200,404,500等等)
状态码解释:OK
协议头
响应报头的基本格式和请求报头的格式基本一致,这里不多说。