【剧前爆米花--web】HTTP协议格式详解以及构造

作者:困了电视剧

专栏:《JavaEE初阶》

文章分布:这是一篇关于HTTP协议的文章,在这篇文章中我会说明HTTP协议格式以及相关的构造,希望对你有所帮助!

 

目录

HTTP协议

HTTP协议格式 

HTTP请求

HTTP响应详情

HTTP请求的构造

通过form表单构造HTTP请求

通过ajax构造HTTP请求


HTTP协议

HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。

 

应用层协议,经常是需要进行“自定义协议”的。但是很多时候也不一定非得是从零开始设定,也可以基于一些大佬们设计好的协议,在这个基础上进行定制。

HTTP协议之所以应用非常广,主要原因就是HTTP可定制性非常强。     

 HTTP是一个“一问一答”这种形式的协议,通常是一个请求对应一个响应。

 注:HTTP是一个应用层协议,HTTP请求发送出去之后,就需要从应用层到物理层进行层层封装,接收方收到之后,再从物理层到应用层层层分用,最终才能完成传输。

HTTP协议格式 

HTTP 是一个文本格式的协议. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节,这里我们用fiddler来进行举例。

这就是打开百度所发送的HTTP请求。

一个HTTP请求数据由4个部分组成。

首行:

header:

空行:

空行是header结束的标记 

正文(body)

正文是空行后面的内容,有的时候可以没有。

=========================================================================

接着我们再来看一下这个请求所对应的响应。

首行:

响应报头(header)

空行

正文(此处的正文是一个html代码)

HTTP响应,就是这个要显示的html的本体,浏览器拿到这个http响应也就拿到了里面的html,然后就可以显示了。

更直接的可以参考这张图:

HTTP请求

首行:

这里的GET是一个HTTP方法,描述了这个HTTP请求想干什么,HTTP协议有很多种方法,不同的方法表示不同的“语义”。

GET的语义是“从服务器这里拿个东西”。

POST的语义是“往服务器提交个东西”。

除此之外,还有很多HTTP方法,比如:

但是在日常的使用当中,GET和POST方法运用的最多,其他的方法很少用。

注:

GET和POST表示的是不同的语义,但是实际上并非严格遵守。

对于body有没有的问题也不是绝对的,GET也可能有body,POST也可能没有body。

GET和POST这两个方法没有本质区别,在大多数场景下,他们可以相互替换,他们的最大区别是在使用习惯上:

1.GET在习惯上用来表示“获取一个数据”,POST用来表示“提交一个数据”。

2.GET一般没有body,需要携带数据放到URL中,POST一般有body。

3.GET请求通常会设计成幂等的,POST则无要求(即如果输入一定,得到的输出也一定)

4.GET可缓存的(前提是幂等),POST则不能。

5.GET请求可以被浏览器收藏,POST不能。

URL:唯一资源定位符,描述了网络上的唯一的一个资源。

这个概念严格的说,并非是HTTP里的概念,很多协议都会用到URL,就比如数据库,只是当时用的协议不是HTTP而是jdbc。

注:服务器端口号可以省略,省略不是没有,而是浏览器会自动加上默认的端口号,对于http来说,默认的端口号是80,对于https来说,默认的端口号是443. 

header:

Content-Type:描述了body的数据格式。

Content-Length:描述了body的长度(字节)

Referer:描述了当前这个页面是从哪个页面跳转过来的(如果直接在地址栏输入url,则此时 请求中没有referer)

Cookie:Cookie的值,也是键值对,Cookie的本质,是浏览器在本地存储用户自定义数据的一种关键机制。

Cookie详解:浏览器本身也是需要存储一些数据的,比如最典型的用户身份信息。这些数据存储在哪地方,能存储在硬盘中吗?

不行,如果存储到硬盘上,则意味着网页有权限操作电脑的文件系统,那么,如果遇到一些恶意的网站,就会很容易将你的个人信息盗走,所以为了保证用户上网比较安全,浏览器会做出限制,禁止网页能够直接访问硬盘。

所以这些数据会通过浏览器提供的api写入特定的文件中。

HTTP响应详情

HTTP响应,首行:

首先版本号和请求相同,其次后面要跟一个状态码,HTTP中提供的状态码非常繁多,毕竟HTTP中可能遇到的情况太复杂了,如图:

但是我们常用的状态码就几个:

200 OK:表示的是请求成功。

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

403 Forbidden:表示访问被拒绝(没有权限)。

500 Internal Server Errior:服务器内部错误。比如:抛了异常没有catch到就会500。

504 Gateway Timeout:服务器访问超时。浏览器给服务器发送请求后,服务器迟迟没有响应。

302 Move temporarily 临时重定向(下次是否继续重定向?不确定)

301 Moved Permanently 永久重定向

(重定向:访问旧的网址会被自动引导到新的网址上)

状态码可以大致分为几个大类:

HTTP请求的构造

1.直接通过浏览器地址栏,输入一个url,可以构造出一个GET请求。

2.html中,一些特殊标签,也会触发GET请求,比如:link,script,img,a

常用且复杂一点的使用form和ajax构造请求

通过form表单构造HTTP请求

 这是用form发送请求

<form action="https://www.baidu.com/?tn=15007414_13_dg" method="get">
    <input type="text" name="aaa">
    <input type="text" name="bbb">
    <input type="submit" value="提交">
</form>

这是用form发送响应: 

<form action="https://www.baidu.com/?tn=15007414_13_dg" method="post">
    <input type="text" name="aaa">
    <input type="text" name="bbb">
    <input type="submit" value="提交">
</form>

他的Content-Type是 application/x-www-form-urlencoded。

通过ajax构造HTTP请求

ajax是现在最主流的前后端交互方式之一。

其中这个success:function(body)部分是回调函数,即会在服务器返回一个正确的响应的时候,被浏览器自动执行,这个执行过程就是“异步”的。

这里的异步就是,当我们把请求发出去后就不管了,就继续执行后续的代码,直到响应回来了之后,浏览器就会把这个响应喂给咱们的代码,即执行success中的逻辑。

以上就是本篇博客的全部内容,如有疏漏欢迎指正!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端基本功 用 React Hooks + Antd 实现一个 Todo-List

背景 使用 React Hooks 以及组件库 Antd 来实现一个可以 增删 标记是否完成 的 todo-list 思路 要实现一个 todo-list 首先想到用 useState 维护一个状态数组来保存当前 list &#xff0c;还要用一个状态维护添加框中的内容 const [todos, setTodos] useState(initialValu…

如何用双指针法解决力扣“反转单词前缀”问题

本篇博客会讲解力扣“2000. 反转单词前缀”的解题思路&#xff0c;这是题目链接。 本题的思路是&#xff1a;先调用strchr函数&#xff0c;在字符串word中查找字符ch&#xff0c;若找到了&#xff0c;则会返回一个非空指针p&#xff0c;指向ch在word中的位置。为了反转从word到…

【UE4 塔防游戏系列】10-防御塔升级

目录 效果 步骤 一、根据防御塔等级修改子弹伤害 二、根据防御塔等级修改子弹速度 三、根据防御塔等级修改检测半径 四、根据防御塔等级修改子弹颜色 五、根据防御塔等级修改换弹时间 效果 步骤 一、根据防御塔等级修改子弹伤害 1. 打开“TowerBaseBullet_Child”&…

搭建Redis分片集群

说明&#xff1a;单体Redis有许多问题&#xff0c;可通过Redis数据持久化、搭建主从集群、哨兵和Redis分片集群解决单体Redis数据丢失、高并发、数据恢复和海量数据存储的问题。前三个参考http://t.csdn.cn/6pp2F、http://t.csdn.cn/o9u0S&#xff0c;本问介绍如何创建Redis分片…

http连接处理(下)(四)

1.结合代码分析请求报文响应 下面我们将介绍服务器如何响应请求报文&#xff0c;并将该报文发送给浏览器端。首先介绍一些基础API&#xff0c;然后结合流程图和代码对服务器响应请求报文进行详解。 基础API部分&#xff0c;介绍stat、mmap、iovec、writev。 流程图部分&…

数据结构--时间复杂度与空间复杂度

数据结构–时间复杂度与空间复杂度 文章目录 数据结构--时间复杂度与空间复杂度时间复杂度一、什么是时间复杂度二、具体实例1.大O的渐进表示法2.二分查找的时间复杂度 空间复杂度一、什么是空间复杂度二、具体实例总结 时间复杂度 一、什么是时间复杂度 在计算机科学中&…

微信小程序-地图上的图标计算旋转值朝向经纬度计算

废话不多说&#xff0c;开整 // 参数为寄件人经纬度和收件人经纬度 // 根据寄收件人经纬度弧度π进行rotate旋转计算 const getRotate (po1, po2) > {if (!(po1 && po2)) return 0const lng_a po1.longitudeconst lat_a po1.latitudeconst lng_b po2.longitud…

238. 除自身以外数组的乘积

题目描述&#xff1a; 主要思路&#xff1a; 正逆各扫一遍&#xff0c;利用数组存储当前数左边和右边的乘积。 class Solution { public:vector<int> productExceptSelf(vector<int>& nums) {int nnums.size();vector<int> ans;int l[n1],r[n1];l[0]1,…

Stable Diffusion - 图像反推 (Interrogate) 提示词算法 (BLIP DeepBooru)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/131817599 图像反推 (Interrogate) 功能&#xff0c;是指根据给定的图像生成一个或多个文本提示&#xff0c;这些提示可以描述图像的内容、风格、…

【C++杂货铺】构造函数和析构函数

文章目录 一、类的六个默认成员函数二、构造函数三、析构函数 一、类的六个默认成员函数 &#x1f4d6;默认成员函数 用户没有显式实现&#xff0c;编译器会自动生成的成员函数&#xff0c;称为默认成员函数。 构造函数&#xff1a;完成对象的初始化工作。析构函数&#xff…

前端笔记_OAuth规则机制下实现个人站点接入qq三方登录

文章目录 ⭐前言⭐qq三方登录流程&#x1f496;qq互联中心创建网页应用&#x1f496;配置回调地址redirect_uri&#x1f496;流程分析 ⭐思路分解⭐技术选型实现&#x1f496;技术选型&#xff1a;&#x1f496;实现 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本…

Vue2计算属性如何传参

Vue2官网并没解释计算属性应该怎么传值&#xff0c;但是呢&#xff0c;通过闭包的方式(使用箭头表达式)实际上是可以给计算属性传参的&#xff08;当然&#xff0c;多个参数也是可行的&#xff09;。 以下是本人项目开发使用自己基于ElementUI封装的集信息采集与文件上传功能的…

微信小程序基于Promise封装发起网络请求

1.创建一个request.js // 相当于域名 const baseURL ***************; // 暴露一个request函数 export function request(parms) {// 路径拼接const url baseURL parms.url;// 请求体&#xff0c;默认为{}const data parms.data || {};// 请求方式&#xff0c;默认为GETco…

攻防世界-web-easytornado

题目描述&#xff1a;Tornado 框架。打开链接是一个简单的界面 1. 思路分析 看到有个/flag.txt&#xff0c;我们点击进去看下 发现传入了两个参数&#xff0c;一个是filename&#xff0c;还有一个是filehash 看到里面的内容&#xff0c;提示我们真正的flag在 /flllllllllllla…

curl操作

下载路径&#xff1a;https://curl.se/windows/ 参考&#xff1a;https://blog.csdn.net/weixin_45191386/article/details/130652821 操作&#xff1a; curl http://localhost:8085/api/v1/aaa/bbbb/?ccc 652781344055627776

docker在arm64架构ubuntu系统的安装

卸载可能存在的旧版本 sudo apt remove docker docker-engine docker-ce docker-io安装依赖使apt可通过HTTPS下载包 sudo apt update && apt install -y apt-tranport-https ca-certificates curl software-properties-commonapt-transport-https用于支持通过HTTPS协…

能源监测系统:实时监控+数据可视化

能源监测系统是应用物联网技术&#xff0c;对水、电、气、热等能源进行实时监测的系统&#xff0c;能够对各种设备数据进行智能化标准化的管理&#xff0c;从而建立起统一的管理优化平台&#xff0c;是积极响应国家节能降耗政策的典型模范&#xff0c;也是企业建设节能型工厂的…

自动化测试工具比传统测试工具的优势体现在哪里?

随着软件行业的快速发展和扩张&#xff0c;自动化测试工具在提高测试效率和质量方面起到了不可或缺的作用&#xff0c;那你知道自动化测试工具比传统测试工具的优势体现在哪里吗&#xff1f; 首先&#xff0c;自动化测试工具能够大大缩短测试周期。相比于传统手动测试&#xff…

Offset Explorer2 监视kafka的利器

kafka作为一个生产者和消费者集为一体的框架&#xff0c;消费者必须一直保持打开的状态&#xff0c;并且每隔一段时间接收一次数据&#xff0c;才能够保持生产者放入的数据及时被处理掉&#xff0c;而生产者则可以每隔一段时间发送一波数据&#xff0c;这样消费者就能够接收到了…

红队打靶:KIOPTRIX1.2打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透与CMS漏洞利用 第三步&#xff1a;敏感信息搜索 第四步&#xff1a;SSH登录与提权 总结与思考 写在开头 本篇博客根据大佬红队笔记的视频进行打靶&#xff0c;详述了打靶的每一步思路&a…