• 生活小妙招免费各类生活中的小问题知识以及音乐简谱等,是你了解世界未知知识的好地方。

一次完整的http请求过程是怎样的?

十万个为什么 空空 2024-4-12 08:58:20 5次浏览

关于问题一次完整的 http 请求过程是怎样的?一共有 3 位热心网友为你解答:

【1】、来自网友【英明果断梦想家 EW】的最佳回答:

HTTP(HyperText Transfer Protocol)是一种用于在万维网(WWW)上传输超文本的协议。它是一种基于客户端/服务器模型的协议,客户端通过发送 HTTP 请求来访问服务器上的资源,服务器则通过返回 HTTP 响应来响应客户端的请求。

一次完整的 HTTP 请求过程通常包括以下几个步骤:

  1. 建立连接:客户端向服务器发起连接请求,服务器接受连接请求并建立连接。
  2. 发送请求:客户端向服务器发送 HTTP 请求,请求中包含了请求方法、请求路径、协议版本以及请求头等信息。
  3. 服务器响应:服务器收到 HTTP 请求后,会根据请求的内容进行处理,并向客户端返回 HTTP 响应。响应中包含了协议版本、响应状态码、响应头等信息。
  4. 服务器发送数据:如果请求成功,服务器会向客户端发送请求的数据。数据的格式可能是文本、图片、音频、视频等。
  5. 关闭连接:客户端和服务器之间的连接通常是临时的,在数据传输完成后,客户端和服务器会关闭连接。

请注意,这只是一个大致的流程,实际的 HTTP 请求过程可能会有所不同。如果你想了解更多关于 HTTP 的知识,可以查看相关文档或课程。

【2】、来自网友【哟哟吼说科技】的最佳回答:

“我是哟哟吼说科技,专注于数据网络的回答,欢迎大家与我交流数据网络的问题”

如题,一个完整的 HTTP 过程是怎样的?

一个完整的 HTTP 过程包括建立连接、数据传输、断开连接等七个步骤。

下面哟哟来详细介绍一下每一步:

1、TCP 建立连接

HTTP 协议是基于 TCP 协议来实现的,因此首先就是要通过 TCP 三次握手与服务器端建立连接,一般 HTTP 默认的端口号为 80;

2、浏览器发送请求命令

在与服务器建立连接后,Web 浏览器会想服务器发送请求命令

3、浏览器发送请求头消息

在浏览器发送请求命令后,还会发送一些其它信息,最后以一行空白内容告知服务器已经完成头信息的发送;

4、服务器应答

在收到浏览器发送的请求后,服务器会对其进行回应,应答的第一部分是协议的版本号和应答状态码;

5、服务器回应头信息

与浏览器端同理,服务器端也会将自身的信息发送一份至浏览器;

6、服务器发送数据

在完成所有应答后,会以 Content-Type 应答头信息所描述的格式发送用户所需求的数据信息;

7、断开 TCP 连接

在完成此次数据通信后,服务器会通过 TCP 四次挥手主动断开连接。但若此次连接为长连接,那么浏览器或服务器的头信息会加入 keep-alive 的信息,会保持此连接状态,在有其它数据发送时,可以节省建立连接的时间;

欢迎大家多多关注我,在下方评论区说出自己的见解。

【3】、来自网友【全网同名 IT 老哥】的最佳回答:

前言

今天我们来彻底聊聊,什么是 TCP/IP、http、socket、长连接、短连接

TCP/IP

TCP/IP 是协议组,分为三个层次:

  • 网络层
  • 传输层
  • 应用层。

在网络层有:

  • IP 协议
  • ICMP 协议
  • ARP 协议
  • RARP 协议
  • BOOTP 协议

在传输层中有:

  • TCP 协议
  • UDP 协议

在应用层有:

TCP 包括:

  • FTP 协议
  • HTTP 协议
  • TELNET 协议
  • SMTP 协议

UDP 包括:

  • DNS 协议
  • TFTP 协议

短连接

流程:连接->传输数据->关闭连接

HTTP 是无状态的,浏览器和服务器每进行一次 HTTP 操作,就建立一次连接,但任务结束就中断连接。

也可以这样说:短连接是指 SOCKET 连接后发送后接收完数据后马上断开连接。

长连接

流程:连接 -> 传输数据 -> 保持连接 -> 传输数据 -> 。。。-> 关闭连接。

长连接指建立 SOCKET 连接后不管是否使用都保持连接,但安全性较差。

http 的长连接

HTTP 也可以建立长连接的,使用 Connection:keep-alive,HTTP 1.1 默认进行长连接。

HTTP1.1 和 HTTP1.0 相比较而言,最大的区别就是增加了长连接支持(貌似最新的 http1.0 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。

什么时候用长连接,短连接?

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。

每个 TCP 连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多。

所以每个操作完后都不断开,次处理时直接发送数据包就 OK 了,不用建立 TCP 连接。

例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成 socket 错误,而且频繁的 socket 创建也是对资源的浪费。


而像 WEB 网站的 http 服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源。

而像 WEB 网站成千上万甚至上亿客户端的频繁连接,用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。

所以并发量大,但每个用户无需频繁操作情况下需用短连好。

总之,长连接和短连接的选择要视情况而定。

数据发送接收方式

异步

报文发送和接收是分开的,相互独立的,互不影响。这种方式又分两种情况:

  • 异步双工:接收和发送在同一个程序中,由两个不同的子进程分别负责发送和接收
  • 异步单工:接收和发送是用两个不同的程序来完成。

同步

报文发送和接收是同步进行,既报文发送后等待接收返回报文。

同步方式一般需要考虑超时问题,即报文发出去后不能无限等待,需要设定超时时间,超过该时间发送方不再等待读返回报文,直接通知超时返回。

在长连接中一般是没有条件能够判断读写什么时候结束,所以必须要加长度报文头。读函数先是读取报文头的长度,再根据这个长度去读相应长度的报文。

Socket 是什么

Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层,它是一组接口(TCP/IP 是协议,Socket 是他们的具体实现和对外 api)。

在设计模式中,Socket 其实就是一个门面模式,它把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面。

对用户来说,一组简单的接口就是全部,让 Socket 去组织数据,以符合指定的协议。

Socket 通信示例

主机 A 的应用程序要能和主机 B 的应用程序通信,必须通过 Socket 建立连接,而建立 Socket 连接必须需要底层 TCP/IP 协议来建立 TCP 连接。

建立 TCP 连接需要底层 IP 协议来寻址网络中的主机。

我们知道网络层使用的 IP 协议可以帮助我们根据 IP 地址来找到目标主机,但是一台主机上可能运行着多个应用程序,如何才能与指定的应用程序通信就要通过 TCP 或 UPD 的地址也就是端口号来指定。

这样就可以通过一个 Socket 实例唯一代表一个主机上的一个应用程序的通信链路了。

建立通信链路(有点烧脑,可绕过)

当客户端要与服务端通信,客户端首先要创建一个 Socket 实例,操作系统将为这个 Socket 实例分配一个没有被使用的本地端口号,并创建一个包含本地和远程地址和端口号的套接字数据结构。

这个数据结构将一直保存在系统中直到这个连接关闭。在创建 Socket 实例的构造函数正确返回之前,将要进行 TCP 的三次握手协议,TCP 握手协议完成后,Socket 实例对象将创建完成,否则将抛出 IOException 错误。

与之对应的服务端将创建一个 ServerSocket 实例,ServerSocket 创建比较简单只要指定的端口号没有被占用,一般实例创建都会成功,同时操作系统也会为 ServerSocket 实例创建一个底层数据结构,这个数据结构中包含指定监听的端口号和包含监听地址的通配符,通常情况下都是“*”即监听所有地址。

之后当调用 accept() 方法时,将进入阻塞状态,等待客户端的请求。当一个新的请求到来时,将为这个连接创建一个新的套接字数据结构,该套接字数据的信息包含的地址和端口信息正是请求源地址和端口。

这个新创建的数据结构将会关联到 ServerSocket 实例的一个未完成的连接数据结构列表中,注意这时服务端与之对应的 Socket 实例并没有完成创建,而要等到与客户端的三次握手完成后,这个服务端的 Socket 实例才会返回,并将这个 Socket 实例对应的数据结构从未完成列表中移到已完成列表中。所以 ServerSocket 所关联的列表中每个数据结构,都代表与一个客户端的建立的 TCP 连接。

以上就是关于问题【一次完整的 http 请求过程是怎样的?】的全部回答,希望能对大家有所帮助,内容收集于网络仅供参考,如要实行请慎重,任何后果与本站无关!

喜欢 (0)