深圳建网站制作维护,建设课程网站,seo网站建站,一个人开公司怎么注册在日常上网浏览网页、刷视频时#xff0c;背后都离不开 HTTP 协议的支持。作为 Web 世界的 “交通规则”#xff0c;它负责服务器和客户端浏览器之间的数据传输。这篇文章就带大家全面了解 HTTP 协议#xff0c;从基本概念到通信细节#xff0c;再到安全相关的 HTTPS#…在日常上网浏览网页、刷视频时背后都离不开 HTTP 协议的支持。作为 Web 世界的 “交通规则”它负责服务器和客户端浏览器之间的数据传输。这篇文章就带大家全面了解 HTTP 协议从基本概念到通信细节再到安全相关的 HTTPS让你对它有清晰的认知。一、HTTP 协议是什么HTTP 协议全名叫 Hyper Text Transfer Protocol超文本传输协议是应用层里专门用来在服务器和客户端浏览器之间传输超文本数据的协议。像我们平时看到的文字、图片、视频、音频这些都靠它来传递。它不只是个简单的传输协议还是个双向协议工作在 “浏览器 - 服务器” 架构下。简单说就是浏览器把请求数据发给服务器服务器处理完请求后再把响应信息回传给浏览器。二、HTTP 协议怎么通信HTTP 属于应用层协议默认用 80 端口在传输层会借助 TCP 协议来传数据。整个通信过程分 11 步咱们结合浏览器和服务器比如 Tomcat的交互来看看用户在浏览器上发起新请求比如输入网址按回车浏览器向服务器发送 TCP 连接请求服务器和浏览器通过 TCP 三次握手建立起 TCP 连接浏览器按照 HTTP 协议格式生成请求数据包也就是 HTTP 请求报文把这个请求数据包发给服务器服务器按照 HTTP 协议格式解析收到的请求报文服务器执行请求处理调用相关的业务逻辑方法生成响应数据服务器再按照 HTTP 协议格式把响应数据打包成响应数据包HTTP 响应报文服务器把响应数据包发送给浏览器浏览器按照 HTTP 协议格式解析响应数据包浏览器把响应数据包里的内容显示在页面上用户就能看到网页了。三、URL定位资源的 “地址”HTTP 协议靠 URLUniform Resource Locator统一资源定位符来找到要访问的资源它的格式是http://host [:port] [abs_path]给大家举个例子http://192.168.0.116:8080/index.html这里每个部分的意思很明确“http” 表示用 HTTP 协议定位网络资源“host” 是合法的 Internet 主机域名或者 IP 地址比如例子里的 “192.168.0.116”“port” 是端口号要是没写就用默认的 80 端口例子里用的是 8080 端口“abs_path” 是请求资源的 URI例子里就是 “/index.html”。这里得提一下 URL 和 URI、URN 的关系。URL 是 URIUniform Resource Identifier统一资源标识符的子集它在 URI 的基础上多了定位资源的能力。而 URI 除了包含 URL还包含 URNUniform Resource Name统一资源名称。URN 只用来定义资源的名称没法定位资源比如 “urn:isbn:0451450523”这只是一本书的 ISBN 编号能确定是哪本书但没法知道在哪儿能找到这本书。简单总结下三者的关系URI 是大概念下面分了 URL 和 URNURL 能定位资源URN 只能命名资源。四、HTTP 报文数据传输的 “包裹”HTTP 报文分请求报文和响应报文就像快递包裹一样里面装着通信需要的各种信息。4.1 请求报文浏览器通过 URL 发请求时会把请求信息打包成 HTTP 请求报文发给服务器。它的结构分四部分第一行是请求行包含请求方式、URL、协议版本比如 “GET /index.html HTTP/1.1”接下来几行是 HTTP 请求首部里面有多个首部字段用来传递额外的请求信息一个空行作用是分隔首部和后面的内容主体 Body最后是请求的内容主体也就是要传给服务器的数据不是所有请求都有。4.2 响应报文服务器处理完请求后会把响应信息装进 HTTP 响应报文回传给浏览器。它的结构和请求报文类似也分四部分第一行是状态行包含协议版本、状态码和描述最常见的就是 “HTTP/1.1 200 OK”表示请求成功接下来几行是响应首部同样有多个首部字段一个空行分隔首部和内容主体最后是响应的内容主体也就是服务器返回给浏览器的数据比如网页的 HTML 代码。给大家看个 HTTP 响应报文的示例实际报文会更复杂这里是简化版
HTTP/1.1 200 OK
Content-Type: text/html; charsetUTF-8
Content-Length: 1234html
body
响应内容
/body
/html
五、常用的 HTTP 请求方式HTTP 请求报文的第一行请求行里会指定请求方式常见的有 GET、POST、HEAD、PUT、DELETE、OPTIONS 这几种各自的用途不一样请求方式用途特点GET获取资源只检索数据不影响资源参数通过 URL 传递幂等且可缓存POST提交数据增加资源用来创建或增加资源两个相同请求不会覆盖参数通过 Request Body 传递非幂等且不可缓存HEAD获取响应报头和 GET 类似但只返回响应报头没有内容主体常用于确认 URL 有效性和资源更新时间PUT修改资源用来更新资源两个相同请求会覆盖数据通过内容主体传递幂等DELETE删除资源用来删除指定资源幂等OPTIONS查询支持的方法询问指定 URL 支持哪些请求方式返回结果会包含 “Allow: GET, POST, HEAD, OPTIONS” 这类内容这里重点说下 GET 和 POST 的区别这俩是平时用得最多的用途不同GET 是拿数据POST 是提交数据请求报文格式有差异POST 的请求行是 “POST /URL HTTP/1.1 \r\n”GET 的是 “GET /URL HTTP/1.1 \r\n”参数传递方式不一样GET 的参数在 URL 里POST 的参数在 Request Body 里幂等性和缓存不同GET 是幂等多次执行结果一样且能缓存POST 是非幂等且不能缓存。六、HTTP 首部字段传递额外信息的 “小纸条”HTTP 首部字段就像通信时附带的 “小纸条”用来传递额外的信息比如服务器域名、数据长度、内容类型等等。下面给大家介绍几个常用的Host 字段浏览器发请求时用来指定服务器的域名。示例Host: www.apesource.comContent-Length 字段服务器返回响应时告诉浏览器本次响应数据的长度。示例Content-Length: 1000Connection 字段浏览器用来要求服务器使用长连接方便后续请求复用。示例Connection: keep-alive要是想断开连接就写Connection: closeContent-Type 字段服务器告诉浏览器本次响应数据的类型和编码。示例Content-Type: text/html; charsetutf-8表示是 HTML 文件编码是 UTF-8Accept 字段浏览器发请求时说明自己能接受哪些格式的响应数据。示例Accept: */*表示所有格式都能接受Content-Encoding 字段服务器告诉浏览器响应数据用的压缩格式。示例Content-Encoding: gzipAccept-Encoding 字段浏览器告诉服务器自己能处理哪些压缩格式。示例Accept-Encoding: gzip, deflate七、HTTP 状态码请求结果的 “反馈信号”服务器返回的响应报文里状态行中的状态码就像 “反馈信号”告诉浏览器请求处理的结果。状态码分 5 大类每类有不同的含义7.1 1XX信息提示这类状态码是协议处理中的中间状态实际用得很少主要是告诉浏览器 “请求正在处理中”。7.2 2XX请求成功表示服务器成功处理了请求常见的有200 OK最常用的说明请求完全成功响应里有完整的内容主体204 No Content和 200 OK 类似但响应报文没有内容主体206 Partial Content用于分块下载或断点续传说明返回的只是资源的一部分。7.3 3XX重定向表示客户端请求的资源位置变了需要用新的 URL 重新请求常见的有301 Moved Permanently永久重定向说明原来的资源没了以后都得用新 URL 访问302 Found临时重定向资源还在但暂时得用另一个 URL 访问。7.4 4XX客户端错误表示浏览器发的请求有问题服务器没法处理常见的有400 Bad Request请求报文格式错了服务器看不懂403 Forbidden服务器不让访问这个资源不是请求格式的问题404 Not Found请求的资源在服务器上找不到405 Not Allowed服务器不支持浏览器用的这种请求方式。7.5 5XX服务器错误表示请求没问题但服务器处理时出了内部错误常见的有500 Internal Server Error服务器内部出了未知错误501 Not Implemented浏览器请求的功能服务器还没实现502 Bad Gateway服务器作为网关或代理时访问后端服务器出错了自身没问题503 Service Unavailable服务器现在太忙了暂时没法响应请求建议稍后再试。八、连接管理让通信更高效HTTP 的连接管理主要涉及短连接、长连接和管线化连接目的是减少通信开销提高效率。8.1 短连接和长连接短连接HTTP/1.0 默认用的是短连接。每次通信都要重新 TCP 三次握手建立连接响应完就 TCP 四次挥手断开。这样频繁建立和断开连接开销很大。长连接HTTP/1.1 改成了默认长连接也叫持久性连接。建立一次 TCP 连接就能进行多次 HTTP 通信不用每次都重新连大大减少了开销还能减轻服务器压力。这里要注意两点HTTP/1.0 里要是想用长连接得在请求里加Connection: Keep-AliveHTTP/1.1 里要是想断开长连接客户端或服务器得发Connection: close。8.2 管线化连接管线化连接是把多个 HTTP 请求批量提交的技术发请求时不用等服务器先响应前一个。不过这得基于长连接而且只有 HTTP/1.1 支持HTTP/1.0 不支持。比如以前发两个请求得等第一个请求的响应回来再发第二个有了管线化能同时把两个请求发出去服务器处理完再依次返回响应效率更高。九、HTTPS给 HTTP 加层 “安全锁”HTTP 协议因为用明文传输存在不少安全问题而 HTTPS 就是为了解决这些问题而生的。9.1 HTTP 的安全隐患HTTP 用明文传数据会有三个主要问题内容可能被窃听比如数据被抓包里面的信息就能被看到通信方身份可能被伪装比如遇到钓鱼网站你以为是正规网站其实是假的报文可能被篡改比如传输过程中数据被改了像强制植入广告还没法发现。9.2 什么是 HTTPSHTTPS 不是新协议而是在 HTTP 和 TCP 之间加了一层 SSLSecure Sockets Layer安全套接层。简单说就是HTTP 先和 SSL 通信再由 SSL 和 TCP 通信。通过 SSLHTTPS 有了加密防窃听、认证防伪装、完整性保护防篡改这三个能力。9.3 HTTP 和 HTTPS 的区别安全性不同HTTP 明文传输不安全HTTPS 加了 SSL加密传输安全连接建立过程不同HTTP 只要 TCP 三次握手就能传报文HTTPS 在 TCP 三次握手后还要进行 SSL 握手才能传加密报文端口不同HTTP 默认 80 端口HTTPS 默认 443 端口证书要求不同HTTPS 需要向 CA证书权威机构申请数字证书证明服务器身份HTTP 不用。9.4 两种加密方式HTTPS 的加密主要用两种方式各有优缺点9.4.1 对称密钥加密加密和解密用同一个密钥。优点是运算速度快缺点是没法安全地把密钥传给对方 —— 要是密钥在传输过程中被偷了加密就没意义了。9.4.2 非对称密钥加密也叫公开密钥加密加密和解密用不同的密钥一个公钥一个私钥。公钥谁都能拿私钥只有自己有。加密过程发送方用接收方的公钥加密数据接收方用自己的私钥解密签名过程发送方用自己的私钥签名接收方用发送方的公钥验证签名能确认发送方身份。优点是公钥传输安全缺点是运算速度慢。9.5 HTTPS 的工作原理HTTPS 的工作过程其实就是结合了两种加密方式既保证安全又兼顾速度具体步骤如下用户用浏览器访问 HTTPS 网站服务器收到请求后选择浏览器支持的加密和哈希算法然后把数字证书里面包含颁发机构、网址、公钥、有效期等信息返回给浏览器浏览器校验证书要是证书有问题比如过期、不被信任会弹出警告要是没问题就生成一个随机秘钥 X用证书里的公钥加密后发给服务器服务器收到加密后的随机秘钥 X用自己的私钥解密得到 X然后用 X 对网页内容加密发给浏览器浏览器用之前生成的随机秘钥 X 和约定的加密算法解密服务器发来的内容最后把网页显示给用户。到这里HTTP 协议的核心内容就讲完了。从基本概念到通信流程再到安全升级的 HTTPS相信大家对 HTTP 有了更全面的认识。如果有疑问欢迎在评论区交流