1、概念
Http
:超文件传输协议:是网络内两点之间转输文本,图片,视频等超文本数据的协议Https
:在http
与tcp
协议之间增加SSL/TLS
安全传输层
1.1、Http
与Https
的区别:
HTTP | HTTPS | |
---|---|---|
端口 | 80 | 443 |
内容 | 明文传输 | 加密传输 |
建立连接 | 三次握手 | 三次握手 后再进行 SSL/TLS 握手 |
证书 | 需要向CA进行证书申请 |
1.2、Https
优点
- 混合加密:加强了信息的机密性,解决了窃听风险
- 摘要算法:校验数据的完整性,解决了篡改风险
- 公钥放入证书中:将服务器的公钥放入证书中,解决了冒充风险
2、请求 & 响应说明
可通过
curl -vvv http://www.baidu.com
进行对比学习# cur -vvv http://www.baidu.com * Connected to www.baidu.com (14.215.177.39) port 80 (#0) GET / HTTP/1.1 Host: www.baidu.com User-Agent: curl/7.55.1 Accept: */* < HTTP/1.1 200 OK < Accept-Ranges: bytes < Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform < Connection: keep-alive < Content-Length: 2381 < Content-Type: text/html < Date: Thu, 09 Sep 2021 02:59:50 GMT < Etag: "588604dc-94d" < Last-Modified: Mon, 23 Jan 2017 13:27:56 GMT < Pragma: no-cache < Server: bfe/1.0.8.18 < Set-Cookie: BDORZ=27315; max-age=86400; domain=.baidu.com; path=/ < <!DOCTYPE html> <!--STATUS OK--><html> <head>....
2.1、请求说明
[请求方法][\s][URL][\s][协议版本][\r\n]
[请求头1字段名]:[请求头1值][\r\n]
....
[请求头n字段名]:[请求头n值][\r\n]
[\r\n]
[请求体]
\s
表示:空格
,\r\n
表示:回车+换行
- 请求方法:
GET
,HEAD
,POST
,PUT
,DELETE
,OPTIONS
,TRACE
,CONNECT
- 协议版本:
HTTP/1.0
,HTTP/1.1
,HTTP/2.0
,HTTP/3.0
- 请求头字段/请求头值:可自定义的请求参数
Host
:指定服务器的域名,有了Host
字段,就可以将请求发往「同一台」服务器上的不同网站Connection
:http/1.1
增加,表示复用tcp连接
,值一般为:keep-alive
Accept
:表示客户端支持的返回类型Accept-Encoding
:表示客户支持的压缩算法- …..
- 请求体:部分请求方法不存在请求体,如
GET
2.2、响应说明
[协议版本][\s][状态码]\s[状态说明][\r\n]
[响应头1字段名]:[响应头1值][\r\n]
....
[响应头n字段名]:[响应头n值][\r\n]
[\r\n]
[响应体]
\s
表示:空格
,\r\n
表示:回车+换行
- 协议版本:
HTTP/1.0
,HTTP/1.1
,HTTP/2.0
,HTTP/3.0
- 状态码:
1xx
,2xx
,3xx
,4xx
,5xx
- 状态说明:状态码的简短说明,如
200 Ok/404 Not Found
中的Ok/Not Found
- 响应头字段/响应头值:可自定义的请求参数
Content-Type
:表示响应内容的类型Content-Length
:表示响应内容的长度(字节)Content-Encoding
:响应数据的压缩方法- ….
- 响应体:部分响应不存在响应体
2.3、例子
3、常用请求方法
GET
:【常用】http/1.0
定义,请求指定的资源,返回响应体POST
:【常用】http/1.0
定义,向指定的资源提交数据,数据包含在请求体中,PUT
:【常用】http/1.1
新增,向指定的资源传送数据,以取代指定的资源内容DELETE
:【常用】http/1.1
新增,请求删除特定的资源HEAD
:http/1.0
定义,请求指定的资源,仅返回响应头OPTIONS
:http/1.1
新增,请求查看服务器性能TRACE
:http/1.1
新增,回显服务器收到的请求。一般用于测试CONNECT
:http/1.1
中预留,给能够将连接改为管道方式的代理服务器。
4、协议版本
http/1.0
:- 短连接
- 每次请求建立一个连接,使用完后丢弃
- 串行请求【完成一个请求再进行下一个请求】
- 增加通信开销
http/1.1
- 支持长连接的通信方式,也叫持久连接,【通过
Connect:Keep-alive
】 - 管道网络传输,即同一个连接,在等待响应的同时,可再次复用连接进行下一次请求
- 响应按请求顺序进行排队返回
- 队头 阻塞,即响应队列中某一个请求阻塞时,后面的的响应都将阻塞
- 支持长连接的通信方式,也叫持久连接,【通过
http/2.0
- 头部压缩:同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分
- 二进制格式:全面采用了二进制格式,头信息和数据体都是二进制,并且统称为帧(frame):头信息帧和数据帧
- 数据流:每个请求或回应的所有数据包,称为一个数据流(
Stream
),每个数据流都标记着一个独一无二的编号,其中规定客户端发出的数据流编号为奇数, 服务器发出的数据流编号为偶数 - 多路复用:HTTP/2 是可以在一个连接中并发多个请求或回应,而不用按照顺序一一对应,不会再
http/1.1
出现「队头阻塞」问题,降低了延迟,大幅度提高了连接的利用率。 - 服务器推送:服务器不再是被动地响应,也可以主动向客户端发送消息。
http/3.0
:
5、常用状态码
1xx
:表示提示信息,是协议处理中的一种中间状态,实际用到的比较少。2xx
:表示服务器成功处理了客户端的请求200 OK
:是最常见的成功状态码,表示一切正常。如果是非HEAD
请求,服务器返回的响应头都会有 body 数据。204 Not Content
:200 OK 基本相同,但响应头没有 body 数据。206 Partial Content
:应用于 HTTP 分块下载或断点续传,表示此次响应仅是一部分
3xx
: 表示资源重定向,当资源发生了变动,需要客户端使用新的URL重新发起请求301 Moved Permanently
:永久重定向,需要使用 新的URL请求,响应头会附带 Location:302 Found
:临时重定向,说明请求的资源还在,临时使用新的URL请求,响应头会附带 Location:304 Not Modified
:资源修改,让客户端使用缓存资源
4xx
:表示 客户端的请求有误,服务器无法处理400 Bad Request
:表示客户端请求的报文有错误,但只是个笼统的错误403 Forbidden
:表示服务器禁止访问资源404 Not Found
:表示请求的资源在服务器上不存在或未找到
5xx
:表示 服务器发生内部错误500 Internal Server Error
:笼统通用的错误码,服务器发生什么错误并不清楚501 Not Implemented
:表示客户端请求的功能还不支持,类似“即将开业,敬请期待”的意思502 Bad Gateway
:服务器作为网关或代理时返回的错误码,表示服务器正常,但访问后端服务器服务时出错503 Service Unavailable
:服务器繁忙,请稍后再试