Http协议介绍
发明者:蒂姆·伯纳斯-李
英国计算机科学家(1955-)
万维网(1990HTTP协议)
世界第一个浏览器
第一个服务端程序
创办MIT人工智能实验室
HTTP协议
- 超文本传输协议(Hyper Text Trabsfer Protocol)
- 处理客户端和服务端之间的通信
- http请求/http返回
- 网页/json/xml/提交表单......
纯文本+无状态(Stateless)
- 应用层协议(下面可以是TCP/IP)
- 信息纯文本传输
- 无状态(每次请求独立)(请求间互不影响)
- 浏览器提供了手段维护状态(Cookie,Session,*Storage等)
HTTP历史
- 1991 HTTP 0.9
- 1996 HTTP 1.0
- 1999 HTTP 1.1
- 2015 HTTP 2.0
设计的基础因素
带宽:基础网络(线路、设备等)
延迟:浏览器、DNS查询、建立连接(TCP三次握手)
设计考虑因素——缓存与带宽优化
缓存
- (http1.0)提供缓存机制如IF-Modified-Since等基础缓存控制策略
- (http1.1)提供E-Tag等高级缓存策略
带宽优化
- (http1.1)利用range头获取文件的某个部分
- (http1.1)利用长连接让多个请求在一个TCP连接上排队
- (http2.0)利用多路复用技术同时传输多个请求
设计考虑因素——压缩/安全性
压缩
- 主流web服务器如nginx/express等都提供gzip压缩功能
- (http2.0)采用二进制传输,头部使用HPACK算法压缩
HTTPS
- 安全超文本传输协议(Hyper Text Trabsfer Protocol Secure)
- 数据加密传输(防止各种攻击手段(信息泄露、篡改等))
- SSL/TSL(Sevure Socket Layer/Transport Layer Secure)
SSL-安全套接层
TSL-传输层安全性协议
需要在客户端安装证书
- 在HTTP和TCP/IP之间增加TSL/SSL层
- 数据传输加密(非对称+对称加密)
HTTP(应用层协议)
TSL/SSL(2选一,加密服务)
TCP(传输层协议)/IP(网络层协议)
Node.js实战http请求
Header和Body(实战)
- Http协议是一个文本传输协议,传输内容是人类可读的文本,大体分成两部分:
请求头(Header)/返回头
消息体(Body)
- server:观察node实现http的基础协议
// node.js中
const net = require('net')
// const response = `HELLO WORLD`
const response =
`HTTP/1.1 200 OK// response header
Data: Tue, 30 Jun 2020 01:00:00 GMT
Content-Type: text/plain
Connection: Closed
Hello world // 空一行写返回值
`
const server = net.createServer(socket => {// socket插座
socket.end(response)
})
server.listen(80, ()=>{
})
chrome/curl/postman/whistle工具初探
Chrome
- Google开发的免费浏览器
- Chrome开发者工具拥有强大的调试能力
cURL
- 传输一个URL(和服务器交互的工具)
- url:网址(Uniform Resource Locator)
- 支持多种协议(HTTP/HTTPS/FTP/FTPS/SCP/SFTP/DICT/TELNET......)
cmd中 curl 百度一下,你就知道 (返回页面信息)
curl -I 百度一下,你就知道 (返回头部信息)
它是一个命令行工具
用到的场景
- 我的浏览器连着代理
- 给网页发请求带一些特别的参数(返回头部信息指令,直接拷贝给同事)
fetch
fetch('/')
- 在网络上获取数据的标准接口
- 提供对请求/返回对象(标准Promise接口)
- 提供自定义Header能力
- 提供跨域能力
postman
协作的API开发工具
后端人员配好请求参数+header信息等分享给前端
Whistle
跨平台网络调试工具
- 需要SwitchOmega插件
- node.js开发
- 支持抓包、重放、替换、修改等
CMD
安装: npm install whistle -g
跑:whistle start
localhost:8899/#network
总结
- 简单比效率更重要(Java/HTTP等)
- 跟上时代,掌握更多的工具