HTTP协议
个人博客
1、浏览器发起http请求过程
- DNS解析
1.1 浏览器缓存
1.2 查找本地host文件
1.3 接入互联网的应用提供商的服务器
1.4 根域名服务器
1.5 顶级域名服务器 - TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
2、响应码
响应码 | 原因 |
---|---|
1xx | 指示信息:接收请求正在处理 |
2xx | 成功 |
3xx | 重定向(Location字段) |
4xx | 客户端错误:报文格式错误 |
5xx | 服务端错误:服务器发生未知错误 |
3、Get、Post请求的区别
GET | POST | |
---|---|---|
请求报文 | url带参数(可携带信息较少) | 请求体(可携带报文较大) |
安全性 | 不安全 | 相对安全 |
数据库幂等性 | 符合 | 不符合 |
其它 | 可以被缓存 | 不能被缓存 |
4、Cookie和Session的区别
HTTP本身是无状态协议,Cookie和Session是为了保持多次请求在同一个会话中(保持用户状态)。
Cookie | Session | |
---|---|---|
存储方式 | 客户端以文本方式存储 | 服务端 |
安全性 | 不安全 | 相对安全 |
服务器压力 | 小 | 大 |
一般Session的使用会依赖于Cookie,因为Session ID存放在Cookie由客户再次请求时带上这个Session ID服务器才能获取到对应的Session。如果浏览器禁用Cookie可以用URL重写把 Session ID直接附加在URL路径的后面。
5、HTTP1.0和HTTP1.1的区别
5.1、长连接
HTTP1.0默认使用短连接即用一次就关闭,打开一个网页需要请求多次静态资源而每次都要重新建立连接进行TCP三次握手四次挥手,这样开销会比较大。所以HTTP1.1默认使用长连接,会在响应头加入这行代码Connection:keep-alive
。当然Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
5.2、错误状态响应码
在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
5.3、缓存处理
在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。
5.4、带宽优化及网络连接的使用
HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
6、HTTP和HTTPS的区别
HTTP | HTTPS | |
---|---|---|
端口 | 默认80端口 | 默认443端口 |
证书 | 不需要 | 需要CA证书 |
协议 | 基于TCP | 基于SSL/TLS的HTTP协议,SSL/TLS又基于TCP协议 |
报文 | 不加密明文 | 加密密文 |
安全性 | 低 | 高 |
资源消耗 | 低 | 高 |