ToB企服应用市场:ToB评测及商务社交产业平台

标题: 【进阶篇】一文搞清楚网页发起 HTTP 哀求调用的完备过程 [打印本页]

作者: 用户国营    时间: 2024-7-15 07:57
标题: 【进阶篇】一文搞清楚网页发起 HTTP 哀求调用的完备过程
目次

前言

近来笔者在实际项目开发中会频繁涉及到服务之间的远程调用、域名的配置和哀求的转发等与盘算机网络相关的知识。
这些其着实读本科和考研的时间都有学习过理论,但为了更透彻地掌握便于在工作中利用,我还是决定写一篇文章来分享实际开发中是怎么应用的。
下面将从 HTTP 协议的基本概念与简介、完备的哀求过程、客户端的哀求以及服务端的响应这四部分来睁开,同时会利用实际的场景来加以分析,便于大家明白。
一、HTTP协议

1.1基本概念

HTTP 协议(Hyper Text Transfer Protocol)超文本传输协议,即传输笔墨、图片、音频、视频等超文本数据、是一种用于分布式、协作式和超媒体信息体系的应用层协议。为了更快地处理大量事务,确保协议的可伸缩性,HTTP 协议被设计成了一种无状态协议,不保留之前一切的哀求或响应报文的信息。HTTP 协议也是万维网(WWW,World Wide Web)的数据通信的基础。
HTTP 是一个客户端(用户)和服务器端(网站)哀求和应答的标准,其界说了界说 Web 客户端怎样向 Web 服务器哀求 Web 页面,以及服务器怎样把 Web 页面响应给客户端。
HTTP 协议中并没有规定必须利用 TCP/IP 或其支持的层。事实上,HTTP 可以在任何互联网协议上,或其他网络上实现。HTTP 假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其利用,所以其在 TCP/IP 协议族利用 TCP 作为其传输层,而 UDP 是不可靠传输。
用户通过利用各种工具(如网页浏览器、网络爬虫或者 Jmeter 等)作为客户端,来发起一个 HTTP 哀求到服务器的指定端口(默以为80)。这个客户端被称为用户代理步调(User Agent)。而接受并响应该 HTTP 哀求的服务器上会存储着各种用户需要的资源,比如 HTML 文件和图像,这个被用户哀求的服务器被称为源服务器(Origin Server)
1.2工作原理

通常,由 HTTP 客户端发起一个哀求,创建一个到服务器指定端口(默认是80端口)的 TCP 毗连,HTTP服务器则在那个端口监听客户端的哀求。一旦收到哀求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及响应哀求而返回的内容,如文件、错误消息、或者别的数据等。
以下是 HTTP 协议工作流程的几个关键步调:
  1. 第一步:建立 TCP/IP 连接,客户端与服务器通过 Socket 三次握手进行连接
  2. 第二步:客户端向服务端发起 HTTP 请求,如:POST/login.html http/1.1
  3. 第三步:客户端发送请求头部、请求内容,最后会发送一空白行,标示客户端请求完毕
  4. 第四步:服务器做出应答,表示对于客户端请求的应答,如:HTTP/1.1 200 OK
  5. 第五步:服务器向客户端发送响应头部信息,发送一空白行,表示应答头信息发送完毕,随后以 Content-type 要求的数据格式,发送响应正文给客户端
  6. 第六步:服务端关闭 TCP 连接,如果服务器或者客户端的 Connection:keep-alive 则表示客户端与服务器端继续保存连接,在下次请求时可以继续使用这次的连接
复制代码
二、哀求过程

下面对 1.2 末节中的几个步调做更为细致的讲授。
2.1域名剖析

浏览器向 DNS 服务器哀求剖析该 URL 中的域名所对应的 IP 地址,查找过程依次如下:
2.2TCP 毗连

根据 DNS 服务器剖析出的 IP 地址和默认端口号,与该服务器进行 TCP 毗连中 3 次握手的前两次,来建立毗连:
TCP 毗连2.3发送 HTTP 哀求

即完成 TCP 的 3 次握手的第三次:
发送 HTTP 哀求2.4服务器应答

客户端发起了哀求,服务器一定要有应答吗?要答复这个题目,得知道 HTTP 响应的底层原理是基于 HTTP 协议的通信机制,这个协议决定了:如果客户端发送的哀求能准确到达服务器,那么服务器必须会有响应并返回。
在本文的第四章,我会拿一个部署在 Linux 服务器上的、基于Spring Boot 的 Java 步调来分析具体服务器是怎么做出响应的。
服务器应答2.5响应内容

下面是访问 https://mvnrepository.com/ 即 Maven 远程中央仓库时,调用其搜刮接口所产生的响应标头内容:
响应内容2.6关闭毗连

末了浏览器会关闭该 TCP 毗连,浏览器利用自己内部的工作机制,把哀求到的静态资源和 HTML 代码进行渲染,呈现给用户。
三、客户端哀求

下面其实是本文的重头戏,会重点讲授具体的 HTTP 哀求是怎么构建、发送哀求的。
3.1哀求Header

一个 HTTP 哀求报文由哀求行(request line)、哀求头部(headers)、哀求数据(request body)和空行(blank line)4个部分组成。
其中哀求头部(headers)为哀求报文添加了一些附加信息,由键值对组成,每行一对,名和值之间利用冒号分隔,如下图是由 PostMan 调用所示:
响应内容哀求 Header常见的几个哀求头释义:
常见哀求头且我们还可以自界说 Header 如:Authorization 是认证信息、Tenant-Code 是发起本次哀求的租户编码。
注意:由于 HTTP 协议只规定 POST 提交的数据必须放在消息主体(body)中,并没有规定数据必须利用什么编码方式。服务端通常是根据哀求头中的 Content-Type 字段来获知哀求中的消息主体是用何种方式编码,再对 body 进行剖析。
常用的 Content-Type 编码方式有:
3.2哀求方法

最常用的四种哀求方法:GET、POST、PUT、DELETE。
常见 HTTP 哀求方法3.3cookie 和 token

在了解 Session 和 Cookies 之前,我们还需要了解 HTTP 的一个特点,叫作无状态。
HTTP 的无状态是指 HTTP 协议对事务处理是没有影象能力的,也就是说服务器不知道客户端是什么状态。
这时两个用于保持 HTTP 毗连状态的技术就出现了,它们分别是 Session 和 Cookie。
Session 在服务端,也就是网站的服务器,用来保存用户的 Session 信息。
Cookie 在客户端,也可以明白为浏览器端有了 Cookie,浏览器在下次访问网页时会自动附带上它发送给服务器,服务器通过识别 Cookie 并判定出是哪个用户,然后再判断用户是否是登录状态,进而返回对应的响应。
四、服务端响应

4.1demo 举例

这里以一个基于 Spring Boot 的 Java 步调来举例,@RequestMapping 是 Spring MVC 框架中的一个注解,它用于指示具体的 Controller 方法怎样响应某个特定的哀求。它可以用于将哀求URL映射到控制器上,并可以指定不同的参数设置。
  1. @RestController
  2. @RequestMapping("/study")
  3. public class StudyController {
  4.     @Resource
  5.     private StudyService studyService;
  6.     /**
  7.      * 新增
  8.      * @param studyDTO
  9.      * @return 是否成功
  10.      */
  11.     @PostMapping("/add")
  12.     public BaseResponse<Boolean> addAwards(@RequestBody StudyDTO studyDTO) {
  13.         return ResultUtils.success(studyService.addStudy(studyDTO));
  14.     }
  15. }
复制代码
如果将这个应用部署在服务器上,你想访问到,那么需要在浏览器中输入:https://ip+port/服务名/study/add
我自己本地访问则是:http://localhost:28089/initial/study/add
4.2返回内容

那么 HTTP 返回的响应报文内容是什么?重要包括以下3个部分:
4.3返回状态码

以下是一些常见的HTTP响应状态码:
常见 HTTP 响应状态码五、文章小结

无论是前端还是后端,不论是科班还是非科班,也无论是开发、测试还是产品,了解和掌握 HTTP 哀求的一些基本知识都是非常紧张的。它是现代互联网中不可或缺的一部分,为我们提供了高效、灵活、可靠的数据传输方式,为 Web 应用步调的开发和利用提供了强有力的支持。
本日的分享就到这里,如有不足和错误,还请大家指正。或者你有别的想说的,也欢迎大家在评论区交流!
参考文档:
https://blog.csdn.net/u010804417/article/details/123638124
https://www.cnblogs.com/engeng/articles/5959335.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4