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 = jenkinsallData_name = zhangsangroupName = jenkinsuserName = 
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传输的数据进行加密。

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

HTTP 请求方法 GET/POST/PUT/DELETE相关推荐

  1. 解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别

    转载自  解析HTTP协议六种请求方法,get,head,put,delete,post有什么区别 标准Http协议支持六种请求方法,即: 1.GET 2.POST 3.PUT 4.Delete 5. ...

  2. 网络:HTTP的请求方法

    http请求方式 如何发送http有很多种方式,但是最常用的就是POST和GET. 其他的有些出于安全性的考虑一般都不建议使用.那么POST与GET有什么区别呢? 1 使用目标不同: POST与GET ...

  3. HTTP请求报文结构和请求方法(通俗易懂)!!

    HTTP请求报文结构和请求方法(通俗易懂)!! 一.HTTP请求报文 1.请求行 2.请求头部 3.空行 4.请求数据 二.HTTP请求的方法 一.HTTP请求报文 一个HTTP请求报文由四个部分组成 ...

  4. 关于HTTP的8种请求方法

    关于HTTP请求方法中的8种请求方法(简单介绍) HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范.HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口是动态分 ...

  5. HTTP请求方式中8种请求方法(简单介绍)

    HTTP请求方式中8种请求方法(简单介绍) 简单介绍 HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范.HTTP默认使用80端口,这个端口指的是服务端的端口,而客户端使用的端口是动 ...

  6. 请求方法 GET 和 POST 的区别

    1.HTTP请求方法都有哪些 HTTP/1.1协议中共有八种方法,也可以叫做"动作",来表明Request-URL对指定资源的不同操作方式 在HTTP1.0中,有三种方法:GET, ...

  7. Http请求方法的区别

    HttpRequest Method 一.HttpRequest 请求方法 二.POST和PUT请求的区别 1.POST请求非幂等性操作 2.根据幂等性区分POST与PUT的使用 三.GET和POST ...

  8. http的请求方法 GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE 说明

    2019独角兽企业重金招聘Python工程师标准>>> 超文本传输协议(HTTP, HyperText Transfer Protocol)是一种无状态的协议,它位于OSI七层模型的 ...

  9. postman delete 请求传递数组_Postman请求方法

    有头发且有趣的码农万里挑一~ 43 有料叔 | 一位有故事的程序猿 常见的请求方法GET:获取资源 POST:创建资源 UP:修改或更新一个请求/资源 PATCH:修改或更新一个请求/资源 DELET ...

最新文章

  1. BZOJ 1070 拆点 费用流
  2. 全网爆红!全新洗脑神曲:程序员Disco
  3. CCF CSP 201403-1 相反数(C++)
  4. C字节对齐与C++类对象内存布局
  5. alc236黑苹果驱动_台式机黑苹果独显驱动
  6. JAVA中的内部类(二)成员内部类
  7. 【专题报道】Google I/O开发者大会
  8. qiniu rs.php,七牛API操作类 - suconghou的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. 相机靶面大小和显微镜FN的匹配关系
  10. Error opening Velodyne socket dump file 的一种可能解决方法
  11. 解决npm install 报错,亲测有效
  12. php计算器源码,php 简单计算器
  13. 查理芒格思维模型 —— 费马帕斯卡系统
  14. 第一批冯·诺依曼计算机
  15. SonarQube8.6 使用说明
  16. 如何用代码实现抖音的图片旋转
  17. 用Pandas揭秘美国选民的总统喜好
  18. 矩阵论 内积空间几何表示图解
  19. 将火狐浏览器鼠标滚轮滚动速度调到接近edge浏览器的效果
  20. Cookie跨域以及Cookie共享问题

热门文章

  1. 学习 Go 语言 0x04:《Go 语言之旅》中切片的练习题代码
  2. 云计算机是什么原理,云电脑的运行原理是什么?
  3. KEIL,#ifdef宏定义下失效代码差异性显示
  4. Synology群晖 DS920 +,DS420 +,DS720 +,DS220 + NAS横向对比 群晖20plus系列怎么选
  5. 判断IE浏览器的文档模式以及浏览器模式
  6. c# Dispose实现 MSDN官方教程
  7. 2018年总结与2019的计划
  8. 深挖用户需求,教你4招搞定精准营销
  9. 【Solidswork】Solidswork如何画真实螺纹
  10. Portraiture2023最新版本下载及PS磨皮的方法教程