HTTP —— HTTP 响应详解, 构造 HTTP 请求

news2024/11/20 13:45:21
JavaEE传送门

JavaEE

【前端】JavaScript —— WebAPI

HTTP —— HTTP 协议中的细节(超详细!!)


目录

  • HTTP 响应详解
    • 认识 "状态码"
      • 状态码小结
    • 认识响应 "报头" header
      • Content-Type
    • 认识响应 "正文" body
  • 构造 HTTP 请求
    • form 表单
    • ajax
    • postman


HTTP 响应详解

认识 “状态码”

是一个数字, 这个数字描述了当前这次请求的 “状态” (成功还是失败, 失败的原因)

HTTP 的状态码是有明确的规定的, 状态码是有很多的, 本篇文章主要介绍常见的状态码.

状态码状态
200表示访问成功
404Not found (问题的原因: 请求路径写错了)
403Forbidden 访问被拒绝 (没有权限)
500internal Server Error 服务器内部错误
504Gateway Timeout 访问超时
302重定向, 访问一个旧的 URL 自动的转移到新的 URL 上.

200

表示访问成功, 日常打开一个网站, 状态码基本都是 200

我们打开 fiddler 可以可以看到, 许多网站此处的状态码都是 200

404

Not found, 学习后端开发经常见到的一个错误.

问题的原因: 请求路径写错了

请求里 -> url -> 路径(表示你要访问的服务器上的资源)

如果你想访问的资源, 服务器上没有, 此时就会返回 404.

比如: 我们打开 bing , 在上方网址后面输入 gujiu.html (我们的服务器是没有 gujiu.html 的)

刷新页面, 我们就会看到如下这样的页面

对应的响应也是 404:

403

Forbidden 访问被拒绝 (没有权限)

比如: 我的 gitee 有私有仓库, 我们登录 gitee 是可以正常访问的

现在我们退出登录, 直接访问该网址

500

Internal Server Error 服务器内部错误 (服务器代码执行过程中, 出异常了)

在现有的网站中, 找一个 “500” 是比较困难的.

500 意味着服务器出 bug 了.

504

Gateway Timeout 访问超时了

一般就是服务器请求量很大的时候, 对于服务器的负荷就比较重.

302

重定向, 访问一个旧的 URL 自动的转移到新的 URL 上.

类似呼叫转移, 当有人给旧的号码打电话, 自动的转接到新号码上

典型场景:

  1. 服务器的地址迁移.
  2. 搜索引擎中的点击跳转.

状态码小结

类别原因短语
1xxInformational (信息性状态码)接收的请求正在处理
2xxSuccess (成功状态码)请求正常处理完毕
3xxRedirection (重定向状态码)需要进行附加操作以完成请求
4xxClient Error (客户端错误代码)服务器无法处理请求
5xxServer Error (服务器错误状态码)服务器处理请求出错

小知识

状态码中的彩蛋: 418 I’m a teapot

这个状态码是明确的写在 HTTP 对应的 RFC 标准文档中的.


认识响应 “报头” header

响应报头的基本格式和请求报头的格式基本一致.

类似于 Content-Type , Content-Length 等属性的含义也和请求中的含义一致.

Content-Type

响应中的 Content-Type 常见取值有以下几种:

  • text/html : body 数据格式是 HTML
  • text/css : body 数据格式是 CSS
  • application/javascript : body 数据格式是 JavaScript
  • application/json : body 数据格式是 JSON

认识响应 “正文” body

正文的具体格式取决于 Content-Type.

1) text/html

2) text/css

3) application/javascript

4) application/json


构造 HTTP 请求

  1. 浏览器自己构造的 (地址栏里写 URL, 构造出 GET 请求)
    • 点击 a 标签, 会构造 GET 请求
    • img, link, script 也会构造请求
  2. form 表单 (只支持 Get 和 Post)
  3. ajax 各种 HTTP 方法都能构造

form 表单

form 最关键的作用, 就是给服务器传键值对. (只支持 Get 和 Post)

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>
    <form action="https://blog.csdn.net/m0_58592142?spm=1000.2115.3001.5343" method="get">
        <input type="text" name="a">
        <input type="text" name="b">
        <input type="submit" value="提交">
    </form>
</body>
</html>

我们来打开这个 .html , 输入并点击提交

就会跳转到

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>
    <form action="https://blog.csdn.net/m0_58592142?spm=1000.2115.3001.5343" method="post">
        <input type="text" name="a">
        <input type="text" name="b">
        <input type="submit" value="提交">
    </form>
</body>
</html>

这时的键值对不在 query string 中了

我们打开 fiddler, 我们看到键值对 在 body 中.


ajax

ajax 各种 HTTP 方法都能构造

form 构造的 HTTP 请求一定会触发, 页面跳转

ajax 默认发起的请求不会引起跳转. 当然, 也可以手动控制跳转

页面跳转, 不是一个好事, 开销大, 时间慢,

使用 ajax 不去触发跳转, 就可以达到 “局部刷新” 这样的效果

ajax 全称 Asynchronous Javascript And XML

使用 ajax 构造 http 请求

ajax API 是属于浏览器原生自带的, 但是原生的 API 不太好用. 因此我们就可以使用第三方库 (jquery), 封装好的 API 代替原生 API.

<!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>Document</title>
</head>
<body>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
        $.ajax({
            type: 'post',
            url: 'https://blog.csdn.net/m0_58592142?spm=1000.2115.3001.5343',
            data: 'http 请求的 body',
            contentType: 'x-www-form-urlencoded',
            success: function(body) {
                console.log("ok");
            },
            error: function() {
                console.log("error");
            }
        })
    </script>
</body>
</html>

# 注意事项 #

这样的的代码直接执行是会报错的, 这里涉及到了 “跨域” 的问题

跨域: 一个页面在域名 a 之下, 尝试通过 ajax 访问域名 b 中的资源.

这种情况, 浏览器是默认禁止的. 除非 b 网站返回的响应, 明确告诉浏览器, 允许跨域访问.

市面上看到的大部分网站. 服务器 基本都是不允许跨域的.

最好的解决办法

自己写个服务器, 页面放到自己的服务器上, 页面访问自己的服务器


postman

但凡是某个编程语言, 可以操作网络 (能够进行 socket 编程) 就一定可以构造 HTTP 请求 (往一个 tcp socket 中写一个符合 http 协议格式的字符串).

postman 就是属于专门用来构造 HTTP 请求的第三方工具.

主要用来帮助我们进行 接口测试.

  1. 后端写好了服务器之后, 需要提供一些 HTTP 的接口(可以接收一些 HTTP 请求, 返回不同的响应)
  2. 程序员就需要验证一下, 接口对不对, 就可以使用前面说的这些办法来发 (浏览器地址栏, a 标签, form, ajax. 但是这些要么比较麻烦, 要么功能有限)
  3. postman 就是一个更方便的构造 http 请求的工具

🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!
在这里插入图片描述
在这里插入图片描述

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

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

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

相关文章

API接口怎么使用(教你使用api接口获取数据)

API是应用程序的开发接口&#xff0c;在开发程序的时候&#xff0c;我们有些功能可能不需要从到到位去研发&#xff0c;我们可以拿现有的开发出来的功能模块来使用&#xff0c;而这个功能模块&#xff0c;就叫做库(libary)。比如说&#xff1a;要实现数据传输的安全&#xff0c…

【Linux】常见指令汇总

每个优秀的人&#xff0c;都有一段沉默的时光。 那段时光&#xff0c;是付出了很多努力&#xff0c;却得不到结果的日子&#xff0c;我们把它叫做扎根。 文章目录一、xshell的介绍操作系统1.1 xshell1.2 操作系统二、Linux下基本指令2.1 ls(显示当前目录下的文件列表&#xff…

【IVIF:引入注意力机制:GAN:双鉴别器】

AttentionFGAN: Infrared and Visible Image Fusion Using Attention-Based Generative Adversarial Networks &#xff08; AttentionFGAN&#xff1a;使用基于注意的生成对抗网络进行红外和可见光图像融合&#xff09; 在本论文中&#xff0c;我们将多尺度注意机制集成到GAN…

redis优化与一些问题

文章目录优化采用SSD硬盘-提升磁盘读写的速度控制 redis 的内存在10G以内&#xff0c;防止fork耗时太长fork 注意事项设置内存淘汰策略vm.overcommit_memory1尽可能地使用 hash 哈希存储参数调优swapinessulimitTCP backlog客户端缓冲优化碎片优化问题缓存与数据库数据不一致将…

换个地方写helloworld

1、Linux中I/O讲解 今天&#xff0c;我们重新学习C语言的基础&#xff0c;特别是I/O口的讲解。 所谓标准 I/O 库则是标准 C 库中用于文件 I/O 操作&#xff08;譬如读文件、写文件等&#xff09;相关的一系列库函数的集合&#xff0c;通常标准 I/O 库函数相关的函数定义都在头…

实时输出Java8 HashMap数据结构

看过 Java 8 HashMap 源码的知道底层数据结构是数组、链表和红黑树实现的&#xff0c;从Debug调试或者序列化输出的都是K,V值&#xff0c;没法直观的看到上述的数据结构&#xff0c;为了直观的看到数据结构存储方面的变化&#xff0c;本文通过动图演示HashMap的结构变化。 为了…

【6 - 完结】Sql Server - 郝斌(identity、视图、事务、索引、存储过程、触发器、游标、TL_SQL)

课程地址&#xff1a;数据库 SQLServer 视频教程全集&#xff08;99P&#xff09;| 22 小时从入门到精通_哔哩哔哩_bilibili ​ 目录 identity&#xff08;主键自动增长&#xff0c;用户不需要为identity修饰的主键赋值&#xff09; 用法 如何重新设置identity字段的值 如…

从React源码来学hooks是不是更香呢

本文将讲解 hooks 的执行过程以及常用的 hooks 的源码。 hooks 相关数据结构 要理解 hooks 的执行过程&#xff0c;首先想要大家对 hooks 相关的数据结构有所了解&#xff0c;便于后面大家顺畅地阅读代码。 Hook 每一个 hooks 方法都会生成一个类型为 Hook 的对象&#xff…

wpf布局学习二 wpf xaml 与android xml界面对比, C++图片旋转与缩放好复杂放弃

弄不明白的事&#xff0c;还是不要去做。 没懂清楚原理&#xff0c;不要尝试去修改。浪费时间。 wpf布局学习二 <Window x:Class"WpfM20UpdateFW.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://sch…

使用adb shell 命令接收串口发送过来的16进制数据 或者 发送16进制数据

首先执行 adb root Adb shell 找到你要发送或者接收串口数据的设备 如果我们再android设备上调试串口的时候&#xff0c;有时我们需要使用adb shell命令&#xff0c;假设我们使用串口发送的数据是16进制&#xff0c;那么使用cat 这个设备节点&#xff0c;有可能显示的是乱码例…

第6章 循环神经网络

系列文章目录 第1章 绪论 第2章 机器学习概述 第3章 线性模型 第4章 前馈神经网络 第5章 卷积神经网络 第6章 循环神经网络 第7章 网络优化与正则化 第8章 注意力机制与外部记忆 第9章 无监督学习 第10章 模型独立的学习方式 第11章 概率图模型 第12章 深度信念网络 第13章 深…

新相微在科创板过会:计划募资约15亿元,2022年业绩开始下滑

11月22日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;上海新相微电子股份有限公司&#xff08;下称“新相微”&#xff09;获得上市委会议通过。据贝多财经了解&#xff0c;新相微于2022年6月28日在科创板递交招股书。 本次冲刺科创板上市&#xff0c;新相微计…

企业架构LB-服务器的负载均衡之LVS实现

01_学习目标和内容 02_LVS介绍和ipvsadm管理工具安装 03_LVS常见工作方式和调度算法介绍 04_需要知道的几个概念名词 05_LVS-NAT方式实现的流程原理 06_配置NAT模式准备工作 在centos中建立网卡配置信息 07_NAT模型RS真实服务器的网关配置 08_NAT模型DR调度服务器规则和转发配…

2010年数学二真题复盘

高数部分 选择题 第一题 思路分析:本要主要考察间断点的概念与极限运算. ☆首先无穷间断点属于第二类间断点,则至少有一个点不存在,要么没定义,要么就是在某个点的左极限或者右极限上趋于无穷,可以先化简,找一些分母趋于0的,那么就是无穷间断点了。 第二题 思路分…

设计模式之美——多组合少继承

组合优于继承&#xff0c;多用组合少用继承。 继承举例 假设我们要设计一个关于鸟的类。我们将“鸟类”这样一个抽象的事物概念&#xff0c;定义为一个抽象类 AbstractBird。所有更细分的鸟&#xff0c;比如麻雀、鸽子、乌鸦等&#xff0c;都继承这个抽象类。 我们知道&…

web前端期末大作业——贵州山地旅游介绍网页1页 HTML旅游网站设计与实现

&#x1f468;‍&#x1f393;学生HTML静态网页基础水平制作&#x1f469;‍&#x1f393;&#xff0c;页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码&#xff0c;这是一个不错的旅游网页制作&#xff0c;画面精明&#xff0c;排版整洁&#xff0c;内容…

Qt+Win10使用QAxWidget控件实现远程桌面控制

Windows开始菜单-运行-输入mstsc&#xff0c;可以打开自带的远程桌面连接工具。如果想使用Qt来实现这个工具&#xff0c;怎么弄&#xff1f; 一、Win10环境的配置 1、Win10-我的电脑-属性-远程桌面-开启 2、打开控制面板-管理工具&#xff08;Win11是【Windows工具】&#xff…

Ubuntu16.4安装搜狗拼音输入法

Ubuntu16.04安装搜狗输入法&#xff0c;总结可以分为5步&#xff1a; 1.下载搜狗输入法的安装包 2.安装fcitx输入法框架 3.安装搜狗输入法 4.重启Ubuntu 5.配置搜狗输入法 1.下载搜狗输入法的安装包 百度搜索“搜狗输入法 linux” https://pinyin.sogou.com/linux. ​​​​…

CY3/CY5/CY7标记牛血清白蛋白/人血清白蛋白,CY3/CY5/CY7-BSA/HSA

产品名称&#xff1a;CY3/CY5/CY7标记牛血清白蛋白/人血清白蛋白 英文名称&#xff1a;CY3/CY5/CY7-BSA/HSA 血清白蛋白一般指人血白蛋白&#xff0c;是由580个氨基酸残基单链组成的蛋白质&#xff0c;由肝脏分泌&#xff0c;在血浆中含量最高&#xff0c;约占52%-68%左右。血…

Flink之ProcessFunction

ProcessFunction基本处理函数处理函数的功能和使用ProcessFunction 解析处理函数的分类按键分区处理函数&#xff08;KeyedProcessFunction&#xff09;定时器&#xff08;Timer&#xff09;和定时服务&#xff08;TimerService&#xff09;KeyedProcessFunction 的使用窗口处理…