http协议是超文本传输协议,定义了客户端和服务端的格式和方法。
特点
1.http允许任何传输任意类型的数据。传输类型由Content-Type加以标记。
2.无状态。对于客户端每次发的请求,服务端都认为是新的请求,在上一次和下一次没有联系。
3.支持客户端和服务端模式
报文格式
HTTP请求由请求行、请求头部、空行和请求体四个部分组成。
请求行:包括请求方法、访问资源的URL,使用HTTP版本。get、post、head、options、put、trace、delete
请求头:格式内容是 属性名:属性值,服务端根据请求头获取客户端信息,主要有cookie、host、connection、accept-language、accept-encoding、user-agent
。
请求体:用户请求数据如用户名密码
POST /xxx HTTP/1.1 请求行
Accept:image/gif.image/jpeg, 请求头部
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
username=dabin 请求体
HTTP响应也是由四个部分组成,分别是状态行、响应头、空行、响应体
状态行:协议版本
响应头:响应字段 :connection、content-type、content-encoding、content-length、set-cookie、Last-Modified,、Cache-Control、Expires
。
响应体:服务端返回给客户端的内容。
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
<html>
<body>响应体</body>
</html>
HTTP状态码:
状态码是服务器端返回给客户端的响应状态码,根据状态码知道服务端给客户端的含义。可大概分成5类
1.1xx:消息状态码 服务器收到请求,需要请求者继续执行操作
2.2xx:请求正常的处理完毕
3.3xx:重定向,需要进一步操作已完成的请求。
4.4xx:客户端错误,服务器无法处理请求
5.5xx:服务器处理请求出错
HTTP协议包括的请求:
HTTP协议中定义八种方法来表示对Requst-URL指定资源的操作。
GET:向特定的资源发出请求。
POST:向指定资源提交数据进行处理请求,上交表单或者上传文件
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向WEB服务器发送"*"请求。
HEAD:向服务器索要GET请求一致的响应,只不过响应体不会被返回。
PUT:在指定资源位置上传最新的内容。
DELETE:请求服务器删除Requst-URI说标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或者诊断。
CONNECT:HTTP/1.1协议中预留能给连接改为管道方式的代理服务器。
POST和GET区别:
- GET 和 POST 最本质的区别是规范上的区别,在规范中,定义 GET 请求是用来获取资源的,也就是进行查询操作的,而 POST 请求是用来传输实体对象的,因此会使用 POST 来进行添加、修改和删除等操作。
- GET请求参数通过URL传递,POST的参数放在请求体中。
- GET 请求可以直接进行回退和刷新,不会对用户和程序产生任何影响;而 POST 请求如果直接回滚和刷新将会把数据再次提交。
- GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把请求头和请求体一并发送出去;而对于POST,浏览器先发送请求头,服务器响应100 continue,浏览器再发送请求体。
- GET 请求一般会被缓存,比如常见的 CSS、JS、HTML 请求等都会被缓存;而 POST 请求默认是不进行缓存的
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
HTTP协议无状态:
浏览器第一次发送请求给服务器,服务器响应了,当浏览器再次发送请求时,浏览器是不知道是一次发送过的浏览器。
HTTP的长连接和短连接:
HTTP短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。HTTP1.0默认使用的是短连接。
HTTP长连接:指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立和断开的消耗。
HTTP/1.1起,默认使用长连接。要使用长连接,客户端和服务器的HTTP首部的Connection都要设置为keep-alive,才能支持长连接。
HTTP如何实现长连接:
HTTP分为长连接和短连接,本质上说的是TCP的长短连接。TCP连接是一个双向的通道,它是可以保持一段时间不关闭的。
通过在头部(请求和响应头)设置Connection字段指定为
keep-alive
,HTTP/1.0协议支持,但是是默认关闭的,从HTTP/1.1以后,连接默认都是长连接。
HTTP1.1和HTTP2.0的区别:
新的二进制格式:HTTP1.1 基于文本格式传输数据;HTTP2.0采用二进制格式传输数据,解析更高效
多路复用:在一个连接里,允许同时发送多个请求或响应,并且这些请求或响应能够并行的传输而不被阻塞,避免 HTTP1.1 出现的”队头堵塞”问题。
头部压缩,HTTP1.1的header带有大量信息,而且每次都要重复发送;HTTP2.0 把header从数据中分离,并封装成头帧和数据帧,使用特定算法压缩头帧,有效减少头信息大小。并且HTTP2.0在客户端和服务器端记录了之前发送的键值对,对于相同的数据,不会重复发送。比如请求a发送了所有的头信息字段,请求b则只需要发送差异数据,这样可以减少冗余数据,降低开销。
服务端推送:HTTP2.0允许服务器向客户端推送资源,无需客户端发送请求到服务器获取。
HTTPS和HTTP区别:
- HTTP是超文本传输协议,信息是明文传输;HTTPS则是具有安全性的ssl加密传输协议。
- HTTP和HTTPS用的端口不一样,HTTP端口是80,HTTPS是443。
- HTTPS协议需要到CA机构申请证书,一般需要一定的费用。
- HTTP运行在TCP协议之上;HTTPS运行在SSL协议之上,SSL运行在TCP协议之上。