文章目录
- HTTP和HTTPS
-
- HTTP的请求报文和响应报文
- HTTP有哪些请求方式
- GET和POST请求的区别
- HTTP的状态码
- HTTP和HTTPS的区别
- [HTTPS的工作原理(HTTPS建立连接的过程)](#HTTPS的工作原理(HTTPS建立连接的过程))
- [HTTP的Keep-Alive是什么?TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?](#HTTP的Keep-Alive是什么?TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?)
HTTP和HTTPS
HTTP的请求报文和响应报文
都是 首行-请求/响应头-空行-正文 结构
请求报文
首行
GET URL http/1.1
请求方法 请求资源地址 http版本号
请求头
每行都是一个键值对, 中间由":"分隔
是http标准规定的字段, 有具体的含义
也允许用户添加自定义的字段
常见的有
host 访问的域名
authorization 用户认证凭证信息, 比如token
user-agent 包含了用户客户端, 浏览器等信息
空行
正文
有些请求有, 有些没有
响应报文
首行
http/1.1 200
版本号 状态码
响应头
content-type 传输数据的媒体类型
空行
正文
服务器返回客户端的信息
通常是 html/css/js/json/图片/音频等
HTTP有哪些请求方式
最常见的是POST, GET, 其他还要PUT, DELETE
他们有具体的语义
POST是提交资源
GET是获取资源
PUT是更新资源
DELETE是删除资源
GET和POST请求的区别
他们没有实际的区别, GET能用的, POST也能用, 反之亦然
使用习惯上有区别
语义区别:GET是向服务器获取资源, POST是向服务器提交资源
传输数据: GET是通过query string 把自定义数据提交给服务器, POST是通过body
幂等性:GET通常是幂等的,就是多次请求返回的结果一样, POST没有这个要求
HTTP的状态码
2XX 成功
200 OK
3XX 重定向
301 Moved Permanently 永久重定向
302 Found 临时重定向 就是这一次转到另一个URL, 下一次访问还是原地址, 例如登陆时跳转到登陆页面
4XX 客户端错误
401 Unauthorized 未认证, 需要验证用户身份或者凭证无效
403 Forbidden 用户通过认证, 但没有权限
404 Not Found 访问资源在服务器上不存在
5XX 服务端错误
501 Internal Server Error 服务器发生了未预期的内部错误
504 Gateway Timeout 连接服务器超时
HTTP和HTTPS的区别
一个是明文, 一个是加密
一个是在TCP三次握手之后就可以传输, 一个还要在TCP三次握手后增加SSL/TLS握手
一个端口是80, 一个是443
HTTPS需要向CA机构申请证书来验证服务器的身份是可信的
HTTPS的工作原理(HTTPS建立连接的过程)
- 客户端向服务端发送建立HTTPS请求
- 服务端发给客户端公钥证书
- 客户端通过CA机构验证证书的合法性, 并验证证书的有效性
- 验证通过后, 生成一对随机对称加密密钥, 通过公钥加密发给服务端
- 服务端通过私钥解密对称加密密钥, 此时客户端服务端都拥有相同密钥
- 两方用对称加密密钥加密和解密数据进行通信
HTTP的Keep-Alive是什么?TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?
HTTP的连接建立是通过 TCP建立资源-HTTP请求资源-响应资源-断开连接
但是每次建立连接只能响应一次资源
HTTP的keep-alive实现同一个TCP来发送和接收多个HTTP请求和应答, 减少建立和释放的开销, 这就是HTTP的长连接
通过设置HTTP头 Connection:keep-alive来实现
TCP的keep-alive是内核实现的, 称为TCP保活机制, 是一种用于在TCP连接上检测空闲连接状态的机制
在TCP连接建立后, 如果一段事件没有任何数据传输, TCP keep-alive会发送探测包检查连接是否有效