首页 > 其他分享 >HTTP协议:网络通信的基石

HTTP协议:网络通信的基石

时间:2024-08-03 20:26:34浏览次数:14  
标签:网络通信 HTTP 请求 响应 HTTPS 服务器 基石 客户端

一、引言

HTTP(HyperText Transfer Protocol),即超文本传输协议,是当今互联网世界中最为重要的协议之一。它是客户端和服务器之间进行通信的规则和标准,使得我们能够在浏览器中浏览网页、下载文件、提交表单等各种操作。

HTTP协议--超文本传输协议,底层采用TCP传输,视频、音频、图片、文字等都会被看作字节流传输,这种将各种类型的数据都转化为字节流的方式具有很多优势。例如,它简化了数据传输的过程,使得服务器和客户端能够以一种通用的格式来处理和交换信息。

二、HTTP 工作原理

HTTP 基于客户端-服务器模型工作。客户端(通常是浏览器)向服务器发送一个请求,请求中包含了要访问的资源的路径、使用的方法(如 GET、POST、PUT 等)以及其他相关的信息。服务器接收到请求后,根据请求的内容进行处理,并返回一个响应给客户端。响应中包含了请求的资源、状态码(如 200 表示成功,404 表示未找到等)以及其他相关的头部信息。

例如,当我们在浏览器中输入一个网址时,浏览器会向服务器发送一个 GET 请求,请求获取该网址对应的网页资源。服务器接收到请求后,如果资源存在且可以访问,就会返回一个包含网页内容的响应,浏览器再将其渲染展示给我们。

HTTP报文格式:

HTTP 报文分为请求报文和响应报文两种类型,它们都有着特定的格式。

请求报文格式

  1. 请求行:包括请求方法(如 GET、POST、PUT 等)、请求的 URL 和 HTTP 版本。例如:GET /example.html HTTP/1.1 。
  2. 请求头部:由一系列的键值对组成,用于提供关于请求的附加信息,如 User-Agent 表示客户端的类型,Content-Type 表示请求体的数据类型等。
  3. 空行:用于分隔请求头部和请求体。
  4. 请求体(内容):并非所有请求都有,通常在 POST 等方法中用于携带数据,如表单数据。

响应报文格式

  1. 状态行:包含 HTTP 版本、状态码(如 200 表示成功,404 表示未找到等)和状态描述。例如:HTTP/1.1 200 OK 。
  2. 响应头部:与请求头部类似,包含各种关于响应的信息。
  3. 空行:分隔响应头部和响应体。
  4. 响应体(内容):承载服务器返回的具体数据,比如 HTML 页面、JSON 数据等。

例如,当您在浏览器中输入一个网址并请求访问时,浏览器会向服务器发送一个请求报文。服务器接收到请求后,会根据请求的内容进行处理,并返回一个响应报文,其中包含您请求的网页内容或相关的错误信息等。

再比如,当您通过表单提交数据到服务器时,请求报文中的请求体就会包含您填写的表单数据,服务器处理后在响应报文中返回处理结果。


在网络通信中,HTTP内置了序列化和反序列化的工作,以行为分割符就可以把一个报文内的不同字段分割开来。

下面就是一次HTTP具体的请求和响应内容:

URL:

平时我们俗称的 "网址" 其实就是说的 URL

URL的编解码:

域名后从斜杠开始的,就是要访问的服务器资源,/是web根目录,直到结尾或问号,如果有问号,说明这次向服务器发起的请求需要传参,比如登录、搜索等;参数之间通过&分割。

那么像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现. 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义. 转义的规则如下: 将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

如图,"+" 被转义成了 "%2B"

三、HTTP 请求方法

最常用的就是GET和POST,他们都可以传参,GET是通过URL中?携带的参数,所以能传递的参数有限,而POST是通过正文content传参,理论上是无限的;GET的私密性较差,POST的私密性较好,但其实他们都不安全。

四、HTTP 状态码

状态码是服务器返回给客户端的一个数字代码,用于表示请求的处理结果。常见的状态码有:

  1. 200 OK:表示请求成功,服务器成功返回了请求的资源。
  2. 404 Not Found:表示服务器未找到请求的资源。
  3. 500 Internal Server Error:表示服务器内部错误,无法完成请求的处理。

五、HTTP 头部信息

头部信息包含了关于请求和响应的各种元数据,如:

Content-Type:指定资源的类型,如 text/html 表示 HTML 文档。

User-Agent:客户端的信息,如浏览器类型和版本。
Content-Length: Body的长度
Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
referer: 当前页面是从哪个页面跳转过来的;
location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;

六、HTTP 与 HTTPS 的区别

HTTP 与 HTTPS 的区别

HTTP(超文本传输协议)和 HTTPS(安全超文本传输协议)在以下几个方面存在明显区别:

  1. 安全性

    • HTTPS 通过 SSL/TLS 协议对数据进行加密传输,确保数据在传输过程中的保密性和完整性,防止数据被窃取或篡改。而 HTTP 数据以明文形式传输,安全性较低。
    • 例如,在进行在线支付等涉及敏感信息的操作时,使用 HTTPS 能有效保护信用卡号等重要信息;而使用 HTTP 则可能导致这些信息被黑客截取。
  2. 端口

    • HTTP 通常使用 80 端口,而 HTTPS 使用 443 端口。
  3. 证书

    • HTTPS 需要服务器配置有效的 SSL 证书来验证服务器的身份。如果证书无效或不匹配,浏览器会发出警告。HTTP 则不需要证书。
    • 比如,知名的电商网站会使用经过权威机构认证的证书,让用户确信他们正在与真实可靠的服务器进行通信。
  4. 性能

    • 由于加密和解密的过程,HTTPS 相对 HTTP 会有一定的性能开销,但随着技术的进步,这种影响已经逐渐减小。
  5. 成本

    • 部署和维护 HTTPS 证书需要一定的成本,包括购买证书、服务器配置等。而 HTTP 则没有这些额外成本。

标签:网络通信,HTTP,请求,响应,HTTPS,服务器,基石,客户端
From: https://blog.csdn.net/weixin_73567058/article/details/140857488

相关文章

  • [计算机网络]HTTPS
    HTTP与HTTPS有哪些区别?HTTP是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS则解决HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TC......
  • nginx模块ngx_http_geoip2_module
    /home/bby/nginx-1.26.0/modules/ngx_http_geoip2_module-3.4 ./configure--prefix=/usr/local/nginx\--with-compat\--with-debug\--with-pcre-jit\--with-http_ssl_module\--with-http_stub_status_module\--with-http_realip_module\--with-http_auth_req......
  • iis安装数字证书ssl并实现http跳转https的301重定向
    iis安装数字证书ssl并实现http跳转https的301重定向为了增强网站的安全性,实现域名访问从HTTP自动跳转到HTTPS,您可以按照以下步骤操作:安装SSL证书:首先,您需要为您的网站获取一个SSL证书。这可以通过向证书颁发机构(CA)申请免费的证书(如Let'sEncrypt提供的证书)或购买商业证书来完成......
  • Oracle归档日志异常增长问题的排查过程 转载 : https://blog.csdn.net/3moods/article
    Oracle归档日志是Oracle数据库的重要功能,用于将数据库的重做日志文件(RedoLog)保存到归档日志文件(ArchiveLog)中。归档日志的作用是提供数据库的备份和恢复功能,以及支持数据库的持续性和数据完整性。当数据库处于归档模式时,数据库引擎会将已经写满的重做日志文件保存到归档日志文件......
  • Flutter 插件之http(介绍、使用、二次封装)
    背景在我们日常开发过程中,经常会使用到网络请求,而在Flutter插件中,最常用的请求插件一共两个,分别是:1、dio2、http其中dio我已经做过详细介绍了(post、get等请求、文件上传、请求重试等),这里就不做过多阐述,下面附上文章链接,如有需要可前往查看。https://blog.csdn.net/WangQin......
  • 使用 $fetch 进行 HTTP 请求
    title:使用$fetch进行HTTP请求date:2024/8/2updated:2024/8/2author:cmdragonexcerpt:摘要:文章介绍了Nuxt3中使用\(fetch进行HTTP请求的方法,它是基于ofetch库,支持SSR和自动缓存。\)fetch简化了HTTP请求,支持GET、POST等,可结合useAsyncData或useFetch优化数据获取,避......
  • JavaWeb(10) HTTP协议
    一、HTTP协议1.定义        HTTP超文本传输协议(HTTP-HyperTexttransferprotocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器......
  • tpmtool 描述:     此实用程序可用于获取有关受信任的平台模块(TPM)的信息。    
     tpmtool|MicrosoftLearntpmtool描述:  此实用程序可用于获取有关受信任的平台模块(TPM)的信息。  有关最新文档,请转到https://aka.ms/tpmtool语法:  tpmtool[parameter][<参数>]参数:  GETDEVICEINFORMATION          显示......
  • 小程序http封装
    constui=require('./ui');constBASE_URL='http://119.23.227.211:8011'/***网络请求request*obj.data请求接口需要传递的数据*obj.showLoading控制是否显示加载Loading默认为false不显示*obj.contentType默认为application/json*obj.method请求......
  • Http发送Post请求 form-data 和 application/x-www-form-urlencoded 区别
    在HTTP协议中,使用POST请求时,可以通过不同的方式发送表单数据。form-data 和 application/x-www-form-urlencoded是两种常见的编码方式,它们在发送数据时有一些关键的区别:application/x-www-form-urlencoded编码方式:以键值对的形式进行编码,每个键值对之间用&符号连接,每个键和值......