HTTP协议【面试高频考点】

news2024/12/23 15:21:20

       

目录

一、HTTP 响应

1.首行

2.状态码(经典面试题,必考)

2.1 200 OK

2.2 404 Not Found

2.3 403 Forbidden

2.4 500 Internal Server Error

2.5 504 Gateway Timeout

2.6 302 Move temporarily

2.7 301 Moved Permanently

2.8 状态码小结

二、如何构造 HTTP 请求

1. 直接通过浏览器地址栏,输入一个 url

2. html中特殊标签也会触发 GET 请求

3. form 表单可以触发 GET 和 POST 请求

3.1 form 发送 GET 请求

3.2 form 代码和 HTTP 请求之间的关系 

3.3 form 发送 POST 请求

3.4 form 代码和 HTTP 请求之间的关系 

4.通过 ajax 构造 HTTP 请求(重要)

4.1 ajax 的基本语法

5.通过 postman 构造 HTTP 请求


 

🌈上节课讲解了HTTP协议的概念,工作原理以及HTTP协议格式;并且详细介绍了HTTP请求,包含:首行、请求头HEADER、空行、正文,在这里有一道经典面试题HTTP方法中 GET方法 和 POST方法的区别,如果大家还没掌握,我建议大家先一下上节课的内容(很重要),在这里我分享一下上节课的文章,对大家非常有帮助。传送门: HTTP 协议_奋斗小温的博客-CSDN博客

        🔥这节课我们继续学习 HTTP 协议中的 HTTP响应,其中也包含非常经典的面试题


一、HTTP 响应

HTTP响应也是由四个部分组成:首行、请求头 header、空行、正文(和HTTP相似)

1.首行

        首行包含 版本号(和请求一样)、状态码(数字,数字表示这次请求执行成功还是失败,失败的原因)、状态码描述(通过一个或者一组单词描述状态码的含义)

        那么接下来我们介绍有哪些状态码,大家要牢记,这也是一道经典面试题

2.状态码(经典面试题,必考)

状态码的种类有很多,在这里我们介绍一些主要常见的状态码

2.1 200 OK

200 OK 表示请求成功

我们打开fiddler,随便抓包都是 200;

b26a94b837cd42c7820817654f10cca7.png

2.2 404 Not Found

404 Not Found 表示要访问的资源不存在

例如,在浏览器中输入 www.sogou.com/123.html,此时就尝试访问 sogou 上的 /123.html 这个资源;如果输入正确, 则可以正确访问到. 但是如果输入错误, 比如 www.sogou.com/abc.html , 就会看到 404 这样的响应.

02317313db7d42829956d610c4748da0.png

再例如,在浏览器中输入 www.bilibili.com/123.html,此时就尝试访问 bilibili 上的 /123.html 这个资源,显然是没有的,因此会看到 404;

59057a57e9614ee4a29f1e2de552ebfd.png

2.3 403 Forbidden

403 Forbidden 表示访问被拒绝(没有权限):有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.

2.4 500 Internal Server Error

500 Internal Server Error 表示服务器内部错误:一般是服务器的代码执行过程中遇到了一些特殊情况(服务器异常崩溃)会产生这个状态码;互联网上不容易碰到,但是在自己写代码的时候很常见,例如服务器出 bug 了,跑出来异常没有 catch 到,就会 500

2.5 504 Gateway Timeout

504 Gateway Timeout 表示服务器访问超时:浏览器给服务器发送请求,服务器要返回响应,结果服务器迟迟没有响应,会导致出现超时的情况.

2.6 302 Move temporarily

302 Move temporarily 表示临时重定向

❓❓什么是重定向

相当于手机号码中的“呼叫转移”功能;例如我本来的手机号是 186-1234-5678, 后来换了个新号码 135-1234-5678, 那么不需要让我的朋友知道新号码,

只要我去办理一个呼叫转移业务,其他人拨打 186-1234-5678 , 就会自动转移到 135-1234-5678上.

那么重定向就是访问旧的地址被自动引导到新的地址上;临时重定向就是这次已经重定向,下次要不要据重定向?不确定

2.7 301 Moved Permanently

301 Moved Permanently 表示永久重定向:这次已经重定向,以后都重定向了

2.8 状态码小结

常见的状态码就是以上介绍的,其他的要用到的时候去查找即可;状态码虽然有很多,但是可以分为一下几大类

76bf663e251849c9bb1edfd36086f25f.png

HTTP标准文档中还有一个特殊的状态码:418(彩蛋)

例如打开“百度”网址,搜索输入框输入“黑洞”,就会看到一个黑洞的彩蛋

70d2e1c068a245f483974cf27f4dc226.png

二、如何构造 HTTP 请求

1. 直接通过浏览器地址栏,输入一个 url

这种操作会构造出一个 GET 请求

de635fad238a4cedb583683efa570986.png

2. html中特殊标签也会触发 GET 请求

目前我们学过的标签触发 GET 请求:

  • link
  • script
  • img
  • a

比如有一个页面中有一个 img 标签,此时页面加载好之后,浏览器就会根据 img 标签的 src 属性给服务器触发一个 GET 请求来获取到图片的内容(访问的是一个网络资源才会触发 GET 请求

3. form 表单可以触发 GET 和 POST 请求

3.1 form 发送 GET 请求

对于一个 form 表单有几个重要的参数:

  • action: 构造的 HTTP 请求的 URL 是什么
  • method: 构造的 HTTP 请求的 方法 是 GET 还是 POST (form 只支持 GET 和 POST)

input 的重要参数:

  • type: 表示输入框的类型. text 表示文本, password 表示密码, submit 表示提交按钮
  • name: 表示构造出的 HTTP 请求的 query string 的 key. query string 的 value 就是输入框的用户输入的内容.
  • value: input 标签的值. 对于 type 为 submit 类型来说, value 就对应了按钮上显示的文本

发送 GET 请求:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form 表单的使用</title>
</head>
<body>
    <!-- action 里表示要访问的URL -->
    <form action="https://www.sogou.com/abc/def" method="get">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" value="提交">
    </form>
</body>
</html>

48dafe65e15a41b5960c3e3d9804a030.png

我们利用 fiddler 进行抓包,去查看它的请求:

35ff7358334943a7b91284691c881d1f.png

结果可以看出这是一个 GET 请求

3.2 form 代码和 HTTP 请求之间的关系 

6ca8563e37d8450ba7b594d6a85466fa.png

d455e127a30e458b9459fb8af91df26a.png

3.3 form 发送 POST 请求

修改上面的代码, 把 form 的 method 修改为 POST

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form 表单的使用</title>
</head>
<body>
    <!-- action 里表示要访问的URL -->
    <form action="https://www.sogou.com/abc/def" method="post">
        <input type="text" name="aaa">
        <input type="text" name="bbb">
        <input type="submit" value="提交">
    </form>
</body>
</html>

746d5a53215343669589d630192d725a.png

 我们利用 fiddler 进行抓包,去查看它的请求:

c3740b6aa8984bd497659930c6bb2a54.png

 结果可以看出这是一个 POST 请求

3.4 form 代码和 HTTP 请求之间的关系 

1863a9bdf9c945dba196c76b7313546c.png

 form 只支持 get 和 post;对于 put、delete、options 等其他的 http 方法,form都无能为力

4.通过 ajax 构造 HTTP 请求(重要)

ajax 全称 Asynchronous Javascript And XML;现在最主流的前后端交互方法之一

  • xml是一个数据格式,html 和 xml 都是由标签构成的;对html来说,支持哪些标签,标签是啥含义,都是标准委员会规定的;对 xml 来说,标签都是自定义的
  • Asynchronous:异步(对比同步 synchronous)

❓❓同步与异步是什么?


对于同步有两个场景:1️⃣同步和互斥(加锁的场景)2️⃣同步和异步(IO的场景)

同步:请求的发起者自行获取响应         异步:请求的发起者不关心结果,而是由被请求的乙方计算出结果之后,把结果推送给发起者

例如对于同步和异步:我来到饭馆对老板说来一份蛋炒饭,接下来我在出餐口等着,一直等到老板把饭做好,然后我就把饭端走了,这个过程就叫做同步;我来到饭馆对老板说来一份蛋炒饭,接下来我找个地方坐下玩手机,该干啥干啥,等到老板把饭做好了,老板直接给我把饭端上来,这个过程就叫做异步

 JS 提供了原生的 ajpa 的 api(但是我不打算用这个),准备使用 jquery 里面提供的 ajax api

4.1 ajax 的基本语法

1️⃣发送 GET 请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ajax</title>
    <!-- 引入jquery -->
    <script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
</head>
<body>
    <script>
        // $ 在 jquery 中的各种 api 都是 $ 的方法
        $.ajax ({
            //ajxa 中的属性
            url: "https://www.sogou.com",//发给谁
            type: "post",  //方法,可以写作 post、delete、put等等
            data: "这是 body",
            contentType:"text/plain",
            //如果请求成功之后通过回调函数处理响应
            success: function(body) {
                //处理响应的代码
            }
        });
     </script>
</body>
</html>

function(body) :回调函数:会在浏览器返回一个正确的响应的时候,被浏览器自动执行,这个执行过程就是“异步”的;在我们页面的 js 中,把请求发送出去就不管了,继续执行后续代码,直到响应回来之后,浏览器就会把这个响应给代码(浏览器调用上述的这个 success 回调函数,执行处理响应的逻辑)

2️⃣发送 POST 请求

<body>
    <script>
        // $ 在 jquery 中的各种 api 都是 $ 的方法
        $.ajax ({
            //ajxa 中的属性
            url: "https://www.sogou.com",//发给谁
            type: "post",  //方法,可以写作 post、delete、put等等
            data: "这是 body",
            contentType:"text/plain",
            //如果请求成功之后通过回调函数处理响应
            success: function(body) {
                //处理响应的代码
            }
        });
     </script>
</body>

相比之下,ajax 的功能比 form 更丰富,更灵活;但是 ajax 虽然有很多优势,但是有一个非常重要的问题

运行上边的代码,我们看到的效果:

ca6e5cc098ae4ea4aa03e41e1e2f9da3.png

 这个代码就会报错,是因为 这个问题是属于 ajax 的一个非常典型的跨域问题(现在运行 ajax 代码的页面的域名 abc.com,但是 ajax 里的请求,访问的是域名 def.com,这两个域名不一致的话,哪怕服务器给你响应了数据,浏览器还是不能处理,还是要报错),这个不是 bug,而是浏览器为了限制安全问题引入的保护机制

🌈构造 HTTP 请求,不仅仅是 js 可以构造,java、C++也可以构造,任何一个可以操作网络的语言都可以构造 http 请求

5.通过 postman 构造 HTTP 请求

下载 postman:Postman API Platform | Sign Up for Frshou

1️⃣首先进行一个注册登录,这样就会有一个使用的记录,方便后续进行查看

2️⃣切入到 workspace,并且创建一个新的 workspace

3️⃣点击+,创建一个标签页

f6e2ef8a1dd34980939b7615cef32285.png

5090ab03d74643609671d7e83b9c0c40.png

 4️⃣这是时候点击 send 就会发送 HTTP 请求,并且从服务器获取响应:

b8607de0ca6044569568f68133c87a76.png

 postman 自身使用非常简单,前提是对 HTTP 博文格式非常熟悉;postman还有一个特别好用的功能,可以自动生成代码:

5️⃣利用 postman 自动生成请求:

2c47c59897fb40e9a159e8620f4f2ecb.png

 把代码复制在响应的使用软件里就可以使用了,但是也有前提,在代码中会有说明


上述 HTTP 已经讲解完毕,结合上节 HTTP,我们已经学会了 HTTP请求了,在HTTP请求中有非常多的经典面试题,希望大家牢牢掌握,根据上一篇文章:HTTP 协议_奋斗小温的博客-CSDN博客和这篇文章结合看❗❗❗

最主要的就是下边这张图,围绕这张图我们进行了详细的讲解:

2d13c03524c8474794e1aa94332f01bd.png

那么下节课 我们讲解 HTTPS,它是基于 HTTP,只是比 HTTP 多了一个“加密层”;并且在 HTTPS 也是一个很重要的面试题,希望大家可以好好掌握

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

clearmymac4.13.5专业的Mac系统清理优化工具

CleanMyMac X是一款功能强大的Mac清理工具&#xff0c;它可以扫描您的Mac电脑&#xff0c;清除垃圾文件&#xff0c;卸载无用的应用程序&#xff0c;并优化系统性能。此外&#xff0c;CleanMyMac X还可以找到和修复Mac电脑上的许多其他问题&#xff0c;即使您不是技术专家也可以…

chatgpt赋能Python-pythona__a

Python中的aa 介绍 Python是一种流行的编程语言&#xff0c;具有简单易学和可读性强的特点。在Python中&#xff0c;常常使用aa这样的表达式&#xff0c;它表示将变量a的原始值加上它自己的值&#xff0c;然后将结果赋值给变量a。这种语法看起来很简单&#xff0c;但实际上有…

C语言函数大全-- _w 开头的函数(5)

C语言函数大全 本篇介绍C语言函数大全-- _w 开头的函数 1. _wspawnl 1.1 函数说明 函数声明函数功能int _wspawnl(int mode, const wchar_t* cmdname, const wchar_t* arglist, ...);启动一个新的进程并运行指定的可执行文件 参数&#xff1a; mode &#xff1a; 启动命令的…

【008】C++数据类型之重要关键字详解

C数据类型之重要关键字详解 引言一、const修饰普通变量重点说明 二、register修饰寄存器变量三、volatile强制访问内存四、sizeof测试类型的大小五、typedef关键字总结 引言 &#x1f4a1; 作者简介&#xff1a;专注于C/C高性能程序设计和开发&#xff0c;理论与代码实践结合&a…

搭建go web 框架

思想base部分day1:封装gee封装context上下文封装前缀tree路由树分组封装group与中间件封装文件解析封装封装错误处理测试 思想 web框架服务主要围绕着请求与响应来展开的 搭建一个web框架的核心思想 1 便捷添加响应路径与响应函数(base) 2 能够接收多种数据类型传入(上下文cont…

第二章 表操作

一、数据表的设计理念 数据表是包括数据库所有数据的数据库对象&#xff0c;数据在表中的组织方式与在电子表格中相似&#xff0c;都是按行和列的格式组织的&#xff0c;其中每一行代表一条唯一的记录&#xff0c;每一列代表记录中的字段&#xff0c;表中的数据库对象包含列、…

Godot4节点树右键菜单添加自定义选项

前言 查看godot的源码推荐使用在线版vscode直接从github上看。&#xff08;直接把网址的com改成dev即可&#xff09; 重点查看以下源码 scene_tree_dock.h scene_tree_dock.cpp 开始 tool extends EditorPluginvar window var scene_menustatic func find_child_by_class(no…

OneDrive同步角标消失 - 解决方案

问题 在电脑端使用OneDrive时&#xff0c;文件管理器OneDrive文件夹内的文件会在左下角显示同步状态&#xff0c;如下图。若没有显示同步角标&#xff0c;则此功能出现异常&#xff0c;下文介绍如何显示同步角标。 值得一提的是&#xff0c;同步角标只起到显示作用&#xff0…

secure CRT 颜色主题 系统间拷贝

文章目录 颜色主题如何切换 SecureCRT 颜色主题如何新建SecureCRT 颜色 主题如何拷贝我的颜色主题,主题名为pic VIM系统间拷贝vim中 ubuntu 拷贝 到 win1. 确保 ubuntu 上的 vim 支持 clipboard 特性2. 在 ~/.vim/vimrc 中添加设置3. vim中 win拷贝到ubuntu SecureCRT 关键字高…

STM32实现基于RS485的简单的Modbus协议

背景 我这里用STM32实现&#xff0c;其实可以搬移到其他MCU&#xff0c;之前有项目使用STM32实现Modbus协议 这个场景比较正常&#xff0c;很多时候都能碰到 这里主要是Modbus和变频器通信 最常见的是使用Modbus实现传感器数据的采集&#xff0c;我记得之前用过一些传感器都…

pg事务:隔离级别历史与SSI

事务隔离级别的历史 ANSI SQL-92定义的隔离级别和异常现象确实对数据库行业影响深远&#xff0c;甚至30年后的今天&#xff0c;绝大部分工程师对事务隔离级别的概念还停留在此&#xff0c;甚至很多真实的数据库隔离级别实现也停留在此。但后ANSI92时代对事物隔离有许多讨论甚至…

队列的实现(附含两道经典例题)

&#x1f349;文章主页&#xff1a;阿博历练记 &#x1f4d6;文章专栏&#xff1a;数据结构与算法 &#x1f68d;代码仓库&#xff1a;阿博编程日记 &#x1f365;欢迎关注&#xff1a;欢迎友友们点赞收藏关注哦&#x1f339; 文章目录 &#x1f33e;前言&#x1f3ac;队列&…

探索Windows CMD命令的经典应用:实用技巧大揭秘,值得收藏

文章目录 导语&#xff1a;第一部分&#xff1a;CMD命令基础1. ipconfig&#xff1a;获取网络配置信息2. ping&#xff1a;测试网络连接3. dir&#xff1a;查看目录内容4. telnet&#xff1a;远程登录和测试网络服务 第二部分&#xff1a;进程管理5. tasklist&#xff1a;查看正…

10-Docker发布微服务

文章目录 搭建SpringBoot项目发布微服务项目到Docker容器 搭建SpringBoot项目 搭建一个简单的SpringBoot项目&#xff1a; 创建maven工程&#xff0c;pom为&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://m…

【Java多线程案例】单例模式

本期讲解单例模式的饿汉模式与懒汉模式&#xff0c;以及如何解决懒汉模式造成线程的不安全问题。 目录 什么是单例模式&#xff1f; 1. 饿汉模式 2. 懒汉模式 2.1 懒汉模式单线程版 2.2 懒汉模式多线程版 3. 解决懒汉模式不安全问题 3.1 保证原子性 3.2 防止指令重排序…

MAC移动硬盘无法识别解决方案(超详细图文教程)

目录 步骤1&#xff1a;先找到外接移动硬盘&#xff0c;在 Mac “终端”执行命令 步骤2&#xff1a;加载移动硬盘&#xff0c;可以在终端执行以下两个命令之一 步骤3&#xff1a;终止后台自动执行的“磁盘修复进程” 步骤4&#xff1a;手动执行磁盘修复命令 步骤5&#xf…

lwIP更新记01:全局互斥锁替代消息机制

从 lwIP-2.0.0 开始&#xff0c;在 opt.h 中多了一个宏开关 LWIP_TCPIP_CORE_LOCKING&#xff0c;默认使能。这个宏用于启用 内核锁定 功能&#xff0c;使用 全局互斥锁 实现。在之前&#xff0c;lwIP 使用 消息机制 解决 lwIP 内核线程安全问题。消息机制易于实现&#xff0c;…

基于Linux安装Docker

Docker官网&#xff1a;Docker Docs: How to build, share, and run applications | Docker Documentation 学习任何技术&#xff0c;一定要参考相应的官网学习&#xff0c;一定要参考官网学习&#xff01;&#xff01;&#xff01; 目录 一、环境准备 1.1 配置源 1.1.1 下载…

Vue+uniapp桃源婚恋交友APP 安卓小程序 nodejs java python

小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 开发模式&#xff1a;混合开发本文先提出了开发基于小程序的桃源婚恋交友APP系统的背景意义&#xff0c;然后通过功能性和非功能性分析阐述本系统的需求&#xff0c;然后进行系统设计。技术实现部分选择Jav…

c++ 11标准模板(STL) std::set(九)

定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…