HTTP 请求方法 GET/POST/PUT/DELETE

2023-05-16

Web HTTP基础知识


HTTP请求是什么?

HTTP超文本传输协议,是确保服务器(Server)和客户端(Client)之间的正确通信。

一个请求和响应的过程:

  • Request 用户通过浏览器向我们的服务端发起请求。
  • Response服务端将客户端请求的资源数据进行响应。

调用接口的方法

请求类型:

  • GET 向指定的URL请求资源,可携带参数(明文)
  • POST 向指定的URL提交资源,表单数据提交,数据进行封装(比Get方法安全)。
  • PUT 与POST类似,通常用于对资源数据的更新修改。
  • DELETE 删除指定的资源。

演示:以baidu为例,用Postman调用一个接口的过程。并结合使用Curl操作。

HTTP常见的错误码


  • 1xx : 服务已收到请求,请求者继续执行操作。
  • 2xx:请求成功,常见(201)
  • 3xx:请求成功,页面发生重定向(301)

4xx:客户端发生了错误

  • 常见的是资源找不到了(404)
  • 资源请求需要认证认证失败(401)(有些时候需要登入,那么就要传入认证信息,认证信息也就是账号和密码,出现401说明认证有问题,说明账号密码有问题)
  • 认证成功但是权限不够(403)

5xx: 服务端发生了错误(客户端请求的参数都是正确的,但是服务端在解析处理的时候发生了错误)

  • 网关超时(504)
  • 内部错误(500)
  • 网关错误(502)
  • 服务不可用(503)

 

请求定位资源  请求方法 GET


http协议使用uri来定位互联网上的资源,这就使得互联网上任意位置资源都能够得到访问。

如果不是访问具体资源,而是对服务器进行请求时,可以使用*星号代替请求的uri。

GET

GET 1.jpg HTTP/1.1

1.jpg就是我们说的uri,1.1是协议版本,前面的GET描述了如何去获取文档资源的一种方式。

http的请求方法不单单时get一种,get只是请求方式当中的一种。

get是用来请求uri描述文档资源,get的报文被服务器解析完之后会返回它想要的响应内容,如果请求的是图片,就会将图片返回。如果访问的是网关程序,会返回执行后的输出结果。(具体资源原样返回,网关程序返回执行结果),这就是get作用,在使用频率上是比较高的。

虽然get也能够传输实体信息,但是和post相比还是弱一些。

域名?a=1&b=2

问号后面的信息使用get方式传输的,那么信息都在url上,如果是重要信息,容易泄漏。其次信息量是有限的,还有二进制文件无法传输,比如要上传图片,视频,音频,不能将其放在url上面。

就算可以放到上面,也是通过另外一种算法,折中的去实现,比如将小的图片进行base64格式的转换,然后放到url上作为参数传给服务器,而且都是小文件,一个二进制文件进行base64格式转换的时候,它的体积要比原样更加大。

上面就是使用get传输实体的不足。

Jenkins作业配置触发器 通过参数触发

Query parameter /invoke?token=TOKEN_HERE   参数 

使用插件就生成了这样一个接口,通过这个接口就可以去触发Jenkins 

http://139.198.170.122:8080/generic-webhook-trigger/invoke?token=generic-webhook-trigger

{
    "jobs": {
        "Gitlab-Generic-Webhook-Trigger": {
            "regexpFilterExpression": "",
            "triggered": true,     #这里为true说明触发了
            "resolvedVariables": {},
            "regexpFilterText": "",
            "id": 493,
            "url": "queue/item/493/"
        }
    },
    "message": "Triggered jobs."
}

 如果要传入第二个参数,第一个参数是跟在?号后面,第二个参数会用&符号

http://139.198.170.122:8080/generic-webhook-trigger/invoke?token=generic-webhook-trigger&user=lulei

POST


post:用来传输实体信息的,可以改善上面get不足。

它的信息是放在请求体当中,相对来说不会直观的泄漏,同时信息量要比get大的多,最重要的一点是很方便二进制的传输。get传输实体信息大概4k,而使用post传输实体信息最大的4m。

get和post本质区别是,post虽然传输实体信息,但是不获取读取内容,这点是区别get post请求的关键。

 

 

 

解析POST数据


$:表示所有的body数据

  • Jenkins 配置触发器来获取Post参数。

获取所有数据

获取username字段

获取groupname字段

  • 客户端发送POST请求, 参数存储在body体中(参考POSTMAN中的样例

在使用post请求时候,Jenkins里面定义的变量名字可以与json格式里面的变量名字不同,这个变量名字就相当于在Jenkins里面定义的变量,变量的值使用jsonpath语法。

Contributing variables:

    allData = {
    "name": "zhangsan",
    "group": {
        "name" : "jenkins"
    }
}
    allData_group_name = jenkins
    allData_name = zhangsan
    groupName = jenkins
    userName = 
curl --location --request POST 'http://139.198.170.122:8080/generic-webhook-trigger/invoke?token=generic-webhook-trigger' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "zhangsan",
    "group": {
        "name" : "jenkins"
    }
}'
  • Jenkinsfile中使用参数
println("所有body数据 --> ${allData}")
println('最外层name ---> $.name' + "${userName}")
println('第二层name ---> $.group1.name' + "${group1Name}")

首先在客户端发起请求,里面包含了数据,Jenkins要想拿到数据和上面两种get,header不一样得使用$符号,$符号代表着整体,通过$.的方式获取里面的值。

 



说下 GET 和 POST 的区别?


GET 和 POST 本质都是 HTTP 请求,只不过对它们的作用做了界定和适配,并且让他们适应各自的场景。

本质区别:GET 只是一次 HTTP请求,POST 先发请求头再发请求体,实际上是两次请求。

1. 从功能上讲,GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资源。

2. 从 REST 服务角度上说,GET 是幂等的,即读取同一个资源,总是得到相同的数据,而 POST 不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET 不会改变服务器上的资源,而 POST 会对服务器资源进行改变。

3. 从请求参数形式上看,GET 请求的数据会附在 URL 之后,即将请求数据放置在 HTTP 报文的 请求头 中,以 ? 分割 URL 和传输数据,参数之间以 & 相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用 BASE64 加密,得出如:%E4%BD%A0%E5%A5%BD,其中 %XX 中的 XX 为该符号以 16 进制表示的 ASCII);而 POST 请求会把提交的数据则放置在是 HTTP 请求报文的 请求体 中;

4. 就安全性而言,POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而且 POST 请求参数则被包装到请求体中,相对更安全。

5. 从请求的大小看,GET 请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发送的数据量比较小,而 POST 请求则是没有大小限制的。
 

 

还有其他的请求方式

put 它是用来传输文件的,它会将文件内容包含在请求报文的主体当中,然后将内容保存到指定的uri指定的位置上,不带自身验证的功能,任何人都可以通过put上传文件,这样就会导致不安全的因素,所以很多网站都会禁止使用该方法。

如果你想用put方法的话,中间放置一个程序去验证账号主体信息,如果验证通过了,然后再将链接跳转到put上。而且put方式一般在内网使用,不会对外网公开。

header方法:只获取报文的头部,header方式是get方式的阉割版,因为它不获取报文的主体。

而它的作用主要是验证uri的有效性,以及更新时间。

比如在前端当中经常说,要缓存外部资源文件,这样我们就需要知道外部资源文件是否在有效期内,如果有效期内就继续使用,过期就需要重新请求。head方法就能够判断该资源文件是否有效。

delete:删除文件,和put大致一样,同样不具备验证功能,如果想要使用要建立中间桥接机制进行验证,验证之后在进行delete操作。

options:主要是询问服务器所支持的方法。对于网站来说我们经常会禁止put方式和delete方式,在与网站进行交互的时候,就需要提前去询问一下服务器支持什么样的请求方式。如果只支持get那么就会用get和你通信,哪怕是post请求我也尽量转化为get方式。

trace:用于跟踪请求路径,让web服务器端将之前的请求通信完完整整的返回给客户端。

比如说它经常性会使用请求头的一个Max-Forwards =2,每当经历过服务器之后就会将该数字进行-1,直到减为0,那么请求不再转发。会将请求的路径发送给客户端。

就是trace方法,它是用来确定连接过程中发生的一系列操作。也正是这个原因,经常会使用trace方法,进行调试。

connect方法:提供了与代理服务器之间的安全连接,比如说它会使用一个隧道TCP,在TCP之上使用安全套接字SSL,TLS。使用这两种方式将TCP传输的数据进行加密。

它是防止数据经过代理服务器时候,防止代理服务器去劫持数据,起到防止中间人攻击的一种策略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTP 请求方法 GET/POST/PUT/DELETE 的相关文章

  • 如何从 jquery .load 获取 php 响应

    例如我给出另一个代码 这是我的 some3 php 代码 第一个文件
  • 如何确定服务器是否支持 Range 标头?

    我一直在尝试使用 Range 标头值从特定点流式传输音频 但我总是从一开始就得到歌曲 我正在通过程序执行此操作 因此不确定问题是否出在我的代码中或服务器上 如何确定服务器是否支持 Range 标头参数 Thanks 方式HTTP规范 htt
  • 如何禁用 HTTP 的 HSTS 标头?

    我已将以下内容插入到我网站的 htaccess 中 以便能够访问HSTS预加载列表 https hstspreload appspot com
  • 如何使用批处理脚本调用的curl 获取http post 请求的响应代码?

    我正在努力为从我们的工具之一发送 http post 请求提供支持 该工具基本上通过 http 请求执行作业 实现此目的的方法是该工具使用多个参数调用 RunScript bat 该脚本解析这些参数并在验证后发出curl post 请求 P
  • ASP.NET 中 HTTP 缓存相关标头的有效含义

    我正在 ASP NET 2 0 中开发一个 Web 应用程序 其中涉及通过资源处理程序 ashx 提供图像 我刚刚实现了处理缓存标头和条件 GET 请求 这样我就不必为每个请求提供所有图像 但我不确定我是否完全理解浏览器缓存发生了什么 图像
  • Android - API 请求

    我开发了一个应用程序 它也在 iPhone 上 问题出在 api 请求上 我为所有请求设置了超时 有时会出现 30 60 秒的中断 看起来这个应用程序执行了几个请求 然后就中断了 一直超时 大约 45 秒后一切正常 不知道是服务器问题还是安
  • 在java中轮询Http服务器(重复发送http get请求)

    当对其进行 REST 调用时 我的 Web 服务器会发送一些信息 我想不断轮询该服务器 间隔5秒后重复发送HTTP GET请求 以检查返回的信息是否有任何变化 做到这一点最有效的方法是什么 您能提供一些代码示例吗 请注意 我只想开发客户端代
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • WCF WebHttp 混合身份验证(基本和匿名)

    所有这些都与 WebHttp 绑定有关 托管在自定义服务主机中 IIS 目前不是一个选项 我已经实现了自定义 UserNamePasswordValidator 和自定义 IAuthorizationPolicy 当我将端点的绑定配置为使用
  • 从 PCAP 嗅探重建数据

    我试图通过 libpcap 嗅探 HTTP 数据 并在处理 TCP 有效负载后获取所有 http 内容 标头 有效负载 根据我的讨论编写 http 嗅探器 或任何其他应用程序级嗅探器 https stackoverflow com ques
  • 最适合“正在进行的作业”的 HTTP 状态代码

    向客户端提供的最合适的 HTTP 状态代码是什么 表示 您的请求很好 但仍在进行中 请稍后在完全相同的位置回来查看 例如 假设客户端提交初始请求以启动繁重的查询 服务器立即返回一个 URL 客户端可以定期轮询该 URL 以获取结果 如果客户
  • Flutter http请求上传mp3文件

    我使用这个 api 上传 mp3 文件 使用这种方法 Future
  • 使用python将json和文件发送到flask

    我遇到这个问题 我试图在单个函数中向 Flask API 发送 接收一些文件和 JSON 在我的客户端 发件人 上我有 my json to be sent datas var1 var1 var2 var2 my file to be s
  • 使用 python requests 模块时出现 HTTP 503 错误

    我正在尝试发出 HTTP 请求 但当前可以从 Firefox 浏览器访问的网站响应 503 错误 代码本身非常简单 在网上搜索一番后我添加了user Agent请求参数 但也没有帮助 有人能解释一下如何消除这个 503 错误吗 顺便说一句
  • 使用 WCF 支持“application/x-www-form-urlencoded”发布数据的最佳方式?

    我正在基于 W3C 规范构建 WCF 服务 该规范定义了接受 application x www form urlencoded 发布数据的 RESTful Web 服务端点 默认情况下 WCF 不支持这种类型的消息编码 我发现了许多创建如
  • 注册期间现有电子邮件的 422 或 409 状态代码

    我正在构建 RESTful API 遇到了一种情况 在用户注册期间 如果电子邮件已存在 则在422 and 409哪个http响应代码有意义 我浏览过类似的one https stackoverflow com questions 9269
  • 自定义 HTTP 标头:命名约定

    我们的一些用户要求我们将与其帐户相关的数据包含在HTTP 标头我们向他们发送的请求 甚至是他们从我们的 API 获得的响应 添加自定义 HTTP 标头的一般约定是什么 naming format etc 另外 请随意发布您在网络上偶然发现的
  • 如何将文件透明地传输到浏览器?

    受控环境 IE8 IIS 7 ColdFusion 当从 IE 发出指向媒体文件 例如 mp3 mpeg 等 的 GET 请求时 浏览器将启动关联的应用程序 Window Media Player 我猜测 IIS 提供文件的方式允许应用程序
  • 如何通过 Ruby 中的代理获取带有用户代理和超时的 URL?

    如果我需要通过某些方式获取 URL 我该如何获取 URLproxy 它必须有一个timeout最大 n 秒 和一个用户代理 require nokogiri require net http require rexml document d
  • 如何从 Retrofit2 获取字符串响应?

    我正在做 android 正在寻找一种方法来执行超级基本的 http GET POST 请求 我不断收到错误 java lang IllegalArgumentException Unable to create converter for

随机推荐

  • 示波器解析串口数据

    文章目录 前言一 示波器准备二 硬件介绍三 软件四 串口TTL数据协议1 波特率2 数据起始和停止信号3 数据有效位4 数据校验位 五 示波器探头连接五 串口数据波形捕获 方式1 xff1a 示波器自带的decode进行解码方式2 xff1
  • UART波形分析

    1 逻辑分析仪解码配置 波特率 xff1a 9600 2 逻辑分析仪结果 3 波特率计算 1除以9600 xff0c 结果如下 xff08 e 4表示10的负4次方 xff09 表示 0 00010416秒 61 104 16 微秒 找到发
  • snprintf()函数使用方法

    众所周知 sprintf不能检查目标字符串的长度 xff0c 可能造成众多安全问题 所以都会推荐使用snprintf 自从snprintf代替了sprintf xff0c 相信大家对snprintf的使用都不会少 xff0c 函数定义如下
  • vlc通过udp读取h264码流

    vlc通过udp读取h264码流 在使用gstreamer过程中 xff0c 遇到需要在服务端推送码流 xff0c 客户端接受的情况 xff0c 而有些主机并未安装gstreamer xff0c 但是可以采用vlc读取视频 xff0c 方法
  • ubuntu20.04回退系统内核

    ubuntu20 04回退系统内核 有时候开机之后突然发现nvidia smi检查不到驱动了 分辨率不对 xff0c 第二个屏幕检测不到等等 xff0c 一般来说是因为内核自动更新导致的 xff0c 这里介绍一下内核回退的方法 第一步 查看
  • Unity 重置项目资源的guid

    有时需要将多个项目的资源合并到一个项目中 xff0c 但有可能有些资源是共用的 xff0c 它的guid是一样的 xff0c 这样合并到一个项目时 xff0c 可能会超成冲突 如果要让每个资源的guid都不相同 xff0c 就需要重新生成g
  • zotero+logseq联合阅读文献具体设置

    title zotero 43 logseq联合阅读文献具体设置 date 2022 05 16 16 10 41 tags literature research logseq zotero zotero 43 logseq联合阅读文献具
  • hexo博客同时发布到github和gitee, 并使用gitee page action更新gitee page

    hexo博客同时发布到github和gitee xff0c 并使用gitee page action更新gitee page 发布博客到github page和gitee page 首先在github和gitee中各自建立一个公开仓库 xf
  • 在git bash中使用oh my zsh

    在git bash中使用oh my zsh 安装zsh 首先从官网下载git bash 进入MSYS2 Packages点击File下载 zst压缩包 xff0c 如图所示 xff1a 直接解压至Git根目录下 可通过git bash的快捷
  • 如何编写CMakeLists.txt,并且使用pkg-config

    这里记录一下如何编写CMakeLists txt 本篇blog记录如何在CMakeLists txt中使用pkg config 首先确定cmake版本 cmake minimum required VERSION 3 16 项目名称 pro
  • 解决WSL上不了网以及不能通过wsl网络ping通主机

    解决WSL上不了网以及不能通过wsl网络ping通主机 WSL上不了网 在更换电脑无线网络之后 xff0c 发现wsl上不了网 xff0c ssh显示no route xff0c ping baidu com ping不通 xff0c 但是
  • WIndows下cmd报错退出进程,代码为1

    WIndows下cmd报错退出进程 xff0c 代码为1 不知道什么原因出现了这种情况 参考微软官方回答 xff08 https answers microsoft com zh hans windows forum all cmd E6
  • docker使用load加载tar镜像时报错no such file or directory

    docker使用load加载tar镜像时报错no such file or directory 解决docker在使用load加载tar镜像时报错open var lib docker tmp docker import xxxxxxxxx
  • sudo启动的程序找不到动态库文件

    sudo启动的程序找不到动态库文件 在 bashrc中添加的LD LIBRARY PATH xff0c 并sudo ldconfig后 xff0c sudo启动的程序还是找不到依赖库 原因分析 sudo启动的程序不会用到bashrc中的配置
  • Pycharm显示cannot find declaration to go to,设置子目录为根目录

    Pycharm显示cannot find declartion to go to xff0c 设置子目录为根目录 使用Pycharm用ctrl跳转函数时显示cannot find declaration to go to 原因可能有很多 x
  • pycharm 2021.2.2 版本之前试用期过了怎么办

    pycharm 2021 2 2 版本之前试用期过了怎么办 虽然 jetbrains 的产品是商业收费 xff0c 而且价格不菲 xff0c 但官方还是为免费使用留下的空间 xff0c 实在良心 收费版可以免费试用30天 xff0c 问题是
  • layabox Native 自己下载资源并缓存

    我们在开发中 xff0c 不管是打的网络版还是本地版 xff0c 或多或少都有可能加载一些网络上的资源 xff0c 并且这些资源不想用dcc方式 xff0c 毕竟现在苹果对热更新管得比较严 xff0c 那如果不用dcc方式 xff0c 我们
  • Flutter 浅析之 自定义view 六 CircleProgressBar

    技术无止境 xff0c 只怕不学习啊 xff0c Flutter 我们开始吧 CircleProgressBar原型进度条 自定义view结合动画来完成进度条效果 CustomPainter 先来想想使用canvas的哪个方法来完成绘制 首
  • RoboMaster机甲大师:裁判系统服务器搭建(完全版)

    RoboMaster机甲大师 xff1a 裁判系统服务器搭建 xff08 完全版 xff09 更新 2022 03 28更新 2022 03 23前言准备搭建步骤MySQL安装配置环境组建局域网路由器端 Router 服务器端 Server
  • HTTP 请求方法 GET/POST/PUT/DELETE

    Web HTTP基础知识 HTTP请求是什么 xff1f HTTP超文本传输协议 xff0c 是确保服务器 xff08 Server xff09 和客户端 xff08 Client xff09 之间的正确通信 一个请求和响应的过程 xff1