【剧前爆米花--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中的逻辑。

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

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

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

相关文章

TCP的窗口控制和重发控制【TCP原理(笔记三)】

文章目录 利用窗口控制提高速度窗口控制与重发控制确认应答未能返回的情况某个报文段丢失的情况 控制流 利用窗口控制提高速度 TCP以1个段为单位&#xff0c;每发一个段进行一次确认应答的处理&#xff0c;如图。这样的传输方式有一个缺点。那就是&#xff0c;包的往返时间越长…

【Spring】Spring AOP入门及实现原理剖析

文章目录 1 初探Aop1.1 何为AOP&#xff1f;1.2 AOP的组成1.2.1 切面(Aspect)1.2.2 连接点(Join Point)1.2.3 切点(Pointcut)1.2.4 通知(Advice) 1.3 AOP的使用场景 2 Spring AOP入门2.1 添加 Spring AOP 框架⽀持2.2 定义切面和切点2.3 定义相关通知 3 Spring AOP实现原理3.1 …

Fofa搜索技巧(理论加实践的整理)

目录 题记技巧&#xff08;我一般找国内的&#xff0c;所以下边一直加cn&#xff09;1、搜索HTTP响应头中含有"thinkphp"关键词的网站和IP。2、加上标题带有后台的。3、加上时间&#xff0c;现在新网站有thinkphp日志泄露的有很多。4、搜索html正文中含有"管理…

http-server 的安装与使用

文章目录 问题背景http-server简介安装nodejs安装http-server开启http服务http-server参数 问题背景 打开一个文档默认使用file协议打开&#xff0c;不能发送ajax请求&#xff0c;只能使用http协议才能请求资源&#xff0c;所以此时我们需要在本地建立一个http服务&#xff0c…

list最常用的遍历五种方式以及使用场景

目录 遍历方式的适用场景对比 迭代器遍历 列表迭代器 增强for遍历 Lambda表达式 lambda表达式简介 普通for遍历 集合中通用的并且常用的六种方法 遍历方式的适用场景对比 迭代器遍历 &#xff1a;在遍历过程中需要删除元素&#xff0c;请使用迭代器 列表迭代器&#xff1…

Segment Tree 线段树算法(java)

线段树算法 Segment Tree 线段树算法代码演示 蓄水池算法 Segment Tree 线段树算法 什么是线段树算法&#xff1a; 线段树&#xff08;Segment Tree&#xff09;是一种基于树结构的数据结构&#xff0c;用于解决区间查询问题&#xff0c;例如区间最大值、最小值、区间和等。线段…

在阿里云linux上安装MySql数据库

我们先远程连接服务器 然后输入 sudo yum update重新运行一下 然后 sudo yum install mysql-server安装 mysql 服务 其中有两次 y n 选择 都选y就好了 然后 运行 sudo service mysqld start启动MySql 然后 我们查看一下MySql sudo service mysqld status

git rebase 合并提交

一. 合并提交步骤 git log --oneline 查看当前提交记录 git rebase -i HEAD~2 选择最后提交的2条记录进行合并进入编辑界面,将c865404的pick改为f, 表示向前合并也就是向cc5a54合并 编辑完之后:wq 保存并退出git rebase --continuegit push --force origin feature/v1.2 推送…

opencv -11 图像运算之按位逻辑运算(图像融合图像修复和去除)

按位逻辑运算是一种对图像进行像素级别的逻辑操作的方法&#xff0c;使用OpenCV的按位逻辑运算函数可以对图像进行位与&#xff08;AND&#xff09;、位或&#xff08;OR&#xff09;、位非&#xff08;NOT&#xff09;和位异或&#xff08;XOR&#xff09;等操作。 通俗点就是…

docker-compose搭建prometheus+grafana+钉钉告警

前言&#xff1a; 本文将介绍使用docker-compose部署搭建promtheus监控容器、主机、服务等相关状态&#xff1b; 配合granfana面板构建监控大屏&#xff1b; 由于grafana的报警不是很友好&#xff0c;使用dingtalk&#xff0c;配合altermanager&#xff0c;实现钉钉报警。 …

认识Spring(1)

hi,大家好,今天继续为大家带来Spring的相关内容 文章目录 &#x1f9c1;1.理解Spring和IOC&#x1f9c1;2.DI和DF&#x1f378;2.1什么是DI&#x1f378;2.2什么是DF&#x1f378;2.3DI和DF的区别 &#x1f9c1;3 Spring创建和使用&#x1f378;3.1创建Spring项目&#x1f361…

【机器人模拟-02】 模拟移动机器人设置里程计

一、说明 在本教程中,我将向您展示如何设置移动机器人的测程。本教程是“机器人模拟”指南中的第二个教程。测量位移是仿真中的重要内容,设置测程的官方教程在此页面上,但我将逐步引导您完成整个过程。 您可以在此处获取此项目的完整代码。让我们开始吧! 二、ROS 2 中的里程…

密码学学习笔记(十五):ECDSA - 椭圆曲线数字签名算法

椭圆曲线数字签名算法是DSA的一种椭圆曲线变体&#xff0c;它发明的初衷只是避免使用Schnorr签名的专利。椭圆曲线数字签名算法依赖于验证器中的私钥和主机用于验证验证器的公钥。它的缺点和DSA一样&#xff0c;它也没有提供安全性证明。 椭圆曲线算法 DSS&#xff08;数字签…

torch分布式通信基础

torch分布式通信基础 1. 点到点通信2. 集群通信 官网文档&#xff1a;WRITING DISTRIBUTED APPLICATIONS WITH PYTORCH 1. 点到点通信 # 同步&#xff0c;peer-2-peer数据传递 import os import torch import torch.distributed as dist import torch.multiprocessing as mpdef…

php 开发微信 h5 支付 APIv3 接入超详细流程

✨ 目录 &#x1f388; 申请商户号&#x1f388; 申请商户证书&#x1f388; 设置V3密钥&#x1f388; 开通H5支付&#x1f388; 设置支付域名&#x1f388; SDK 下载&#x1f388; 第一次下载平台证书&#x1f388;非第一次下载平台证书&#x1f388; H5下单 &#x1f388; 申…

【前端知识】React 基础巩固(二十八)——StrictMode

React 基础巩固(二十八)——StrictMode StrictMode StrictMode 是一个用来突出显示应用程序中潜在问题的工具 与 Fragment 一样&#xff0c;StrictMode 不会渲染任何可见的 UI为后代出发额外的检测和警告严格模式检查仅在开发模式下运行&#xff0c;不影响生产构建 严格模式检…

【DBA课程-笔记】第 3 章:MongoDB数据库核心知识

内容 一、MongoDB 数据库架构 A. MongoDB数据库体系架构 1. 存储引擎&#xff08;MongoDB Storage Engines&#xff09;&#xff1a; 2. MongoDB 数据逻辑架构 二、MongoDB 存储引擎 A. 查看mongodb服务器的状态 B. 查看引擎信息&#xff08;4.2.1 没有这个命令&#xf…

搭载下一代人工智能技术,微软推出Power Automate流程挖掘产品

在近日的Microsoft Inspire大会中&#xff0c;微软揭晓了他们即将推出的Power Automate流程挖掘产品&#xff0c;并计划在8月1日正式对外开放。 试用地址&#xff1a;https://powerautomate.microsoft.com/zh-cn/#home-signup 这款产品搭载了下一代人工智能技术&#xff0c;有…

基于 Fedora 38 的预期版本 Nobara 38 发布

导读基于 Fedora 38 的预期版本 Nobara 38 终于发布了&#xff0c;它带来了一系列用户友好的修复和功能增强。Nobara 是 Fedora Linux 的修改版本&#xff0c;旨在解决用户面临的常见问题&#xff0c;并提供开箱即用的顺滑的游戏、流媒体和内容创建体验。凭借一系列附加软件包和…

深度学习ai学习方向如何规划,算法竞赛,机器学习,搭建环境等答疑

目录 1了解人工智能的背景知识 2 补充数学或编程知识 3 熟悉机器学习工具库 4 系统的学习人工智能 5 动手去做一些AI应用 1了解人工智能的背景知识 一些虽然存在但是在研究或者工业上不常用的知识&#xff0c;为自己腾出更多的时间来去学习&#xff0c;研究。 人工智能里…