【HTTP】详解

目录

HTTP 基本概念

啥是HTTP,有什么用?

HTTP(HyperTextTransferProtocol,超文本传输协议)是用于客户端和服务器之间数据传输的应用层协议,主要用在Web浏览器和服务器之间的通信。HTTP最初是为传输HTML文档设计的,但现在支持多种类型的数据,如图片、视频、文本等。

举个咱们最熟悉的例子:

  • Web浏览:浏览器使用HTTP从服务器获取网页和资源,如图片和CSS文件。
  • 数据传输:开发者使用HTTP在客户端和服务器之间发送和接收数据,特别是在WebAPI和REST服务中。你看当你通过浏览器访问一个网页的时候。你往往会输入:http://www.baidu.com.

无状态性:每个HTTP请求都是独立的,不记录之前的任何请求信息,请求一次,就返回一次。这简化了协议的实现,但可能会需要使用其他方式(如Cookies或Sessions)来保存状态。

一次HTTP请求的过程

  1. 建立连接:
    客户端(如浏览器)与服务器之间建立TCP连接。对于HTTPS请求,建立 SSL/TLS安全连接。
  2. 发送请求:
    客户端向服务器发送一个HTTP请求,包括请求行(如GET/index.html HTTP/1.1)、请求头(如Host、User-Agent等)和可选的请求主体(如 POST数据)。
  3. 服务器处理请求:
    服务器接收并解析请求,根据请求路径和参数决定返回的数据或页面内容。
  4. 发送响应:
    服务器向客户端发送HTTP响应,包括状态行(如HTTP/1.1 200 OK)、响应头(如Content-Type等)和响应主体(如网页内容)。
  5. 关闭连接:
    连接可以被立即关闭,或保持一段时间(使用Connection:keep-alive)。
  6. 客户端处理响应:
    客户端解析并展示网页或处理数据。

当你在浏览器中输入一个浏览器地址,它会发送什么 ?---(底层流程)


HTTP的协议头

HTTP协议分为请求头和响应头

请求头(对应客户端)

HTTP请求包含三部分:请求行(构建请求阶段),请求头,请求体。

一些请求头
  • Host:指定服务器的域名和端口号(例如:Host:www.example.com)。
  • User-Agent:描述客户端应用程序的名称和版本(例如:User-Agent:Mozilla/5.0)。
  • Accept:指示客户端可以处理的媒体类型(例如:Accept:text/html)。
  • Content-Type:指示请求主体的数据类型,常见于POST或PUT请求(例如:Content-Type:applic ation/json)。
  • Authorization:包含认证凭据,用于保护的资源访问(例如:Authorization:Basic)。
请求方法

响应头(对应服务端返回)

服务器端接收到客户端的请求,将作出处理并返回相应数据,包含响应行,响应头,响应体。

POST与GET的区别

  • 数据传输方式
    • GET请求:参数通过URL传递,数据包含在URL的查询字符串中(如?name=John&age=30)。URL长度有限,传输的数据量较小,适用于不敏感数据的请求。
    • POST请求:参数在请求主体中传输,适合发送较大数据量或敏感信息,如表单数据或文件上传。
  • 安全性
    • GET请求:不适合传输敏感数据,因为参数会暴露在URL中,可能被缓存或记录。
    • POST请求:更安全,参数不会显示在URL中,但仍需通过加密(如HTTPS)来保护数据。
  • 缓存
    • GET请求:可被浏览器缓存,适合可重复访问的请求。
    • POST请求:默认不被缓存,一般用于提交数据。

HTTP状态码

状态码 类别 含义
1xx 信息状态码
2xx 成功状态码
3xx 重定向状态码
4xx 客户端错误状态码
404 Not Found 资源未找到,服务器无法提供请求资源
5xx 服务器错误状态码

HTTPS

什么是https?

HTTPS(HyperTextTransferProtocolSecure)是HTTP协议的安全版本,用于在客户端(如浏览器)和服务器之间安全地传输数据。HTTPS通过加密机制来保护用户和网站之间传输的信息,确保数据的机密性和完整性。

早期很多公司刚起步的时候,使用的应用层协议都是HTTP,而HTTP无论是用GET方法还是POST方法传参,都是没有经过任何加密的,因此早期很多的信息都是可以通过抓包工具抓到的。

为了解决这个问题,于是出现了HTTPS协议,HTTPS实际就是在应用层和传输层协议之间加了一层加密层(SSL&TLS),这层加密层本身也是属于应用层的,它会对用户的个人信息进行各种程度的加密。HTTPS在交付数据时先把数据交给加密层,由加密层对数据加密后再交给传输层。

https要解决两个问题

  • 加密防篡改
  • 通过证书来验证服务端是可靠的

https特点

  • 数据加密:
    HTTPS使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议来加密数据。即使数据被第三方拦截,拦截者也无法读耳改数据内容,因为它们是加密的。
  • 数据完整性:
    数据在传输过程中不会被篡改或损坏。加密协议会对数据进行校验,过程中没有被意外或恶意修改。
  • 身份验证:
    HTTPS使用数字证书来验证服务器的身份,确保用户连接到的是真正的服务器,而不是被冒充的网站。这种身份验证可以防止"中间人攻击",提高信任。

https工作流程

  • 握手过程:
    • 当你在浏览器中访问一个HTTPS网站时,浏览器和服务器会进行一个加密"握手"过程。
    • 握手的目的是交换加密密钥,并建立一个安全的加密连接。这个过程会使用SSL/TLS协议,并涉及验证服务器的数字证书。
  • 加密传输:
    • 握手成功后,浏览器和服务器之间的所有数据都将通过加密通道传输,确保数据的安全性。
  • 使用数字证书:
    • 网站通过使用由可信的证书颁发机构(CA)签发的数字证书来证明自已的身份。浏览器会检查证书的有效性,并显示安全锁图标,提示用户这是一个安全的连接。
相关推荐
大丈夫立于天地间1 小时前
ospf收敛特性及其他的小特性
网络·网络协议·学习·算法·智能路由器·信息与通信
m0_748241701 小时前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#
久绊A1 小时前
理解CPU负载与使用率
服务器·网络·数据库·cpu
dog2504 小时前
重新审视端到端传输协议:从观念到原则
网络协议
然然阿然然4 小时前
2025.1.15——二、字符型注入
网络·数据库·sql·学习·网络安全
大G哥6 小时前
记录一次RPC服务有损上线的分析过程
java·开发语言·网络·网络协议·rpc
Channing Lewis7 小时前
RPC 简介
网络·网络协议·rpc
PorkCanteen7 小时前
Axios 封装:处理重复调用与内容覆盖问题
前端·javascript·http
jimboRen7 小时前
python http server运行Angular 单页面路由时重定向,解决404问题
python·http·angular.js