首页 / 资讯中心 / 文章详情

网络(六)|应用层 HTTPHTTPS:URL、请求响应、Cookie 与证书

网络(六)|应用层 HTTPHTTPS:URL、请求响应、Cookie 与证书 ★ FEATURED ARTICLE
HTTP/HTTPS前言HTTP基础概念URLHTTP报文结构请求报文GET vs POST响应报文常见请求头响应头重点HTTP状态码HTTPS两种加密方式中间人攻击问题数字证书CA机构HTTPS握手简单流程总结前言上一篇传输层讲完 TCPUDP、三次握手四次挥手。本篇落到应用层讲解浏览器和服务器的通信协议 HTTP / HTTPS。传输层TCP、UDP完成了主机上进程与进程的数据传输。但浏览器、后端服务之间需要一套统一的格式约定请求长什么样、响应长什么样、要携带哪些附加信息这就是HTTP协议。HTTP是基于TCP的应用层协议明文传输HTTPS则是在HTTP基础上引入加密解决窃听、篡改、中间人劫持问题。本篇覆盖报文格式、URL、请求方法GET/POST、请求头响应头、Cookie、状态码、HTTPS加密原理、证书。HTTP基础概念HTTP超文本传输协议应用层协议默认基于 TCP。版本演进1HTTP/1.0每次请求新建 TCP 连接请求完断开2HTTP/1.1长连接默认管线化面试最常考3HTTP/2二进制帧、多路复用。工作模式一问一答客户端发起请求服务器返回响应。抓包工具Fiddler / Wireshark1Fiddler代理抓 HTTP/HTTPS观察请求响应报文2Wireshark抓取底层 TCP/IP 数据包URLURL唯一资源定位符描述了一个资源在网络上的位置。协议方案名://主机:端口/资源路径?query参数#片段例如 http://blog.test.com:8080/network/article?chapter6keywordhttp#summary协议方案名http/https主机端口定位服务器程序哪个主机上的哪个程序资源路径描述了要访问服务器的哪个资源query 查询字符串keyvaluekeyvalue键值对结构的数据以?开头。是针对此次请求进行了补充说明。URL编码中文、特殊符号要做urlencode否则浏览器可能会解析失败导致请求无法正常进行。HTTP报文结构请求报文首行首行包含三部分信息请求方法、URL、HTTP版本号中间用空格分隔。例如GET /index.html HTTP/1.1请求头header一组key: value键值对注意键和值之间用:空格来分隔每个键值对单独占一行。常见请求头1Host目标主机端口2User‑Agent客户端浏览器 / 设备信息3Referer从哪个页面跳转过来4Content‑Lengthbody 长度5Content‑Type请求 body 的数据格式空行请求头的结束标记分割头部和正文。正文bodyPOST/PUT携带数据GET一般没有body。GET vs POSTGET和POST没有本质区别双方可以替换对方的场景。但在使用习惯上有差异GET经常把传递给服务器的数据放到query string中POST则经常放到body中。但上述情况并非绝对GET也可以用bodyPOST也可以用query string使用的前提是客户端/服务器都要按照一样的方式处理代码。语义上有差异GET大多数用来获取数据POST大多数用来提交数据。响应报文首行包含HTTP版本状态码状态码描述中间用空格分隔。状态码描述了请求的结果。例如HTTP/1.1 200 OK响应头 header键值对返回服务器附加信息。空行响应头的结束标记。正文body返回给浏览器的数据 (html、json、图片等)常见请求头响应头重点User‑Agent浏览器操作系统的属性(版本)。以前用来区分新旧浏览器现在用来区分PC端还是移动端。Referer来源页面。Content‑Typebody 格式application/json、text/html、form‑data等Content‑Lengthbody 字节长度CookieCookie 由服务器下发保存在浏览器本地后续每次请求自动携带 Cookie 发给服务器。作用会话保持记住用户状态。服务器通过响应头Set‑Cookie设置浏览器请求头携带Cookie。HTTP状态码2xx 成功200 OK正常成功返回3xx 重定向301 永久重定向会被浏览器缓存302 临时重定向不会缓存响应头Location给出跳转地址4xx 客户端错误400 参数错误404 资源找不到403 权限不足拒绝访问5xx 服务端错误500 服务器内部异常503 服务不可用HTTPSHTTP 是明文传输存在窃听、篡改、中间人攻击风险HTTPS HTTP TLS 加密。两种加密方式对称加密同一个密钥加密解密都用它。速度快但是密钥传输容易泄露。非对称加密公钥加密、私钥解密。公钥公开私钥服务器自己保存。加密解密速度慢。中间人攻击问题如果只用非对称加密传输对称密钥客户端拿到的公钥有可能是黑客伪造的无法辨别公钥真假。数字证书CA机构解决公钥真伪问题。服务器向 CA 申请证书证书包含服务器公钥、域名信息CA 数字签名。客户端拿到证书用 CA 根证书校验签名确认公钥是真实服务器的不是黑客伪造。HTTPS握手简单流程客户端请求服务器服务器返回 CA 数字证书。客户端校验证书合法无误取出服务器真实公钥。客户端生成随机对称密钥使用服务器公钥加密发给服务器。服务器用自己私钥解密拿到对称密钥。后续所有 HTTP 数据全部使用这套对称密钥加密通信。非对称加密只用来安全传递对称密钥真正业务数据传输使用对称加密兼顾安全与性能。总结HTTP 作为应用层协议定义了客户端与服务器之间请求响应的格式规范。GET/POST、请求响应头、Cookie、状态码是日常开发和面试高频。HTTP 明文不安全HTTPS 结合对称加密、非对称加密、CA 数字证书解决窃听篡改中间人劫持。传输层 TCP 保证可靠传输HTTP 约定数据语义HTTPS 负责数据加密三者配合完成网页、接口的网络通信。本篇是「Java后端编程系列」的连载内容点击链接查看完整系列 上一篇网络五别再死背三次握手一文吃透 TCP 全底层原理 下一篇读懂 JVM内存模型、类加载机制、分代回收 点击直达 Java后端基础专栏合集
阅读完成 · 觉得有帮助?
咨询建站