HTTP—这估计是你看的最仔细的一份协议了!
Posted Java后台开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP—这估计是你看的最仔细的一份协议了!相关的知识,希望对你有一定的参考价值。
干货文~,全文3000字,阅读需要8分钟左右
HTTP是一个应用层的简单的请求响应协议,它通常运行在TCP之上,指定了浏览器和万维网服务器之间的通信规则,即要发送什么样的消息以及得到什么样的响应。
我们在电脑或者手机上通过浏览器访问相应的网站时正是使用HTTP协议来与服务器通信,且在URL的头部也会显示出协议的名称。
下面本文带你详细了解HTTP协议
HTTP协议介绍
HTTP是一种无状态的基于TCP/IP通信协议的用来传输数据的应用层协议
1.无状态是指Web浏览器与Web服务器之间不需要建立持久的连接,客户端与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。
2.HTTP基于TCP/IP协议,当用户在一个浏览器中向服务器发送请求后,浏览器将通过TCP/IP协议与指定的服务器建立连接。服务器会一直在HTTP的端口(80)上倾听连接,当接受到客户端的请求后该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。
3.http协议的传输方式有很多种,常用的是GET和POST两种
传输方式 | 描述 |
GET |
请求指定的服务器资源 |
POST |
向指定资源提交数据进行处理请求 |
HEAD |
用于获取报头 |
PUT |
从客户端向服务器传送的数据取代指定的文档的内容。 |
DELETE |
请求服务器删除指定的资源 |
TRACE |
用于测试,要求服务器送回收到的请求 |
CONNECT |
要求在于代理服务器通信时建立隧道,用隧道协议进行通信 |
OPTIONS |
查询针对请求URI指定的资源支持的方法 |
HTTP协议工作原理
我们在浏览器中输入www.baidu.com之后会发生以下的事情
(1) 浏览器分析超链接指向页面的 URL。
(4) 浏览器与服务器建立 TCP 连接
(5) 浏览器发出请求
(6) 服务器接受请求,并根据请求返回相应的文件作为应答;
(7) TCP 连接释放。
(8) 浏览器显示返回的html文件
HTTP请求的报文格式如下
一个HTTP请求报文由四个部分组成:请求行、首部行(请求头)、空行、实体主体
1.请求行
请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。比如 GET /data/info.html HTTP/1.1
2.首部行
首部行用来说明浏览器、服务器或报文主体的一些信息
例如:
Accept:浏览器可接受的MIME类型
Accept-Charset:浏览器可接受的字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式
Accept-Language:浏览器所希望的语言种类
Content-Length:表示请求消息正文的长度。
Host:想访问的主机名
3.空行
它的作用是通过一个空行,告诉服务器首部行到此为止。
4.请求数据
若方法字段是GET,则此项为空,没有数据
若方法字段是POST,则通常来说此处放置的就是要提交的数据
HTTP响应的报文格式如下
一个HTTP响应报文由四个部分组成:状态行、首部行(响应头)、空行、实体主体
1.状态行
状态行一般由协议版本、状态码及其描述组成 比如 HTTP/1.1 200 OK
状态码含义如下
2.首部行
首部行用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。
例如:
Allow:服务器支持哪些请求方法(如GET、POST等)
Content-Encoding:文档的编码(Encode)方法
Date:当前的GMT时间
Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存
3.空行
作用同样是通过一个空行,告诉服务器首部行到此为止。
4.响应体
响应体就是响应的消息体,一般返回HTML代码。
HTTP1.0/1.1/2.0之间的区别
1.HTTP1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,而HTTP1.1默认使用长连接,即在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,可有效减少TCP的三次握手的开销。
2.HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准。而HTTP1.1则引入了例如ETag,If-None-Match等更多可供选择的缓存头来控制缓存策略。
4.HTTP2.0通过在应用层和传输层之间增加一个二进制分帧层,二进制分帧将所有传输信息分割为更小的帧,用二进制进行编码,多个请求都在同一个TCP连接上完成,可以承载任意数量的双向数据流,突破了HTTP1.1的性能限制、改进传输性能。
5.HTTP2.0使用多路复用技术,多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。在HTTP1.1协议中,浏览器客户端在同一时间针对同一域名的请求有一定数据限制,超过限制数目的请求会被阻塞,而HTTP2.0可以同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
6.HTTP1.0和1.1的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来压缩需要传输的header大小。
HTTP与HTTPS之间的区别
HTTP是超文本传输协议,被用于在web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截获了传输报文,就可以读取内容,所以不建议传输一些敏感信息。所以HTTPS就是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,另外HTTP的端口号为80,HTTPS的端口号为443。
HTTPS 在证书验证阶段使用非对称加密,在内容传输的加密上使用的是对称加密,它的具体密过程如下
证书验证阶段:
1.浏览器发起 HTTPS 请求;
2.服务端返回 HTTPS 证书和公钥;
3.客户端验证证书是否合法,如果不合法则提示告警。
数据传输阶段:
1.当证书验证合法后,在本地生成随机数;
2.通过公钥加密随机数,并把加密后的随机数传输到服务端;
3.服务端通过私钥对随机数进行解密;
4.服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输。
HTTPS虽然提供了消息安全传输的通道,但是每次消息的加解密十分耗时,消息系统资源。所以,除非在一些对安全性比较高的场景下,比如银行系统,购物系统中我们必须要使用HTTPS进行通信,其他一些对安全性要求不高的场景,我们其实没必要使用HTTPS,另外使用HTTPS需要使用到数字证书,但是一般权威机构颁发的数字证书都是收费的。
以上是关于HTTP—这估计是你看的最仔细的一份协议了!的主要内容,如果未能解决你的问题,请参考以下文章