1、概念

  • Http:超文件传输协议:是网络内两点之间转输文本,图片,视频等超文本数据的协议

  • Https:在 httptcp 协议之间增加 SSL/TLS 安全传输层

1.1、HttpHttps的区别:

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.0HTTP/1.1HTTP/2.0HTTP/3.0
  • 请求头字段/请求头值:可自定义的请求参数
    • Host:指定服务器的域名,有了 Host 字段,就可以将请求发往「同一台」服务器上的不同网站
    • Connectionhttp/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.0HTTP/1.1HTTP/2.0HTTP/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新增,请求删除特定的资源
  • HEADhttp/1.0定义,请求指定的资源,仅返回响应头
  • OPTIONShttp/1.1新增,请求查看服务器性能
  • TRACEhttp/1.1新增,回显服务器收到的请求。一般用于测试
  • CONNECThttp/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:服务器繁忙,请稍后再试