• HTTP 请求方法


     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

    1. {
    2. "jobs": {
    3. "Gitlab-Generic-Webhook-Trigger": {
    4. "regexpFilterExpression": "",
    5. "triggered": true, #这里为true说明触发了
    6. "resolvedVariables": {},
    7. "regexpFilterText": "",
    8. "id": 493,
    9. "url": "queue/item/493/"
    10. }
    11. },
    12. "message": "Triggered jobs."
    13. }

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

    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语法。

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

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

    还有其他的请求方式

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

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

  • 相关阅读:
    渗透测试漏洞原理之---【业务安全】
    前端实现Base64图片压缩(可直接复制使用)
    【Vue】v-if和v-show的区别
    计算机组成原理知识总结(二)运算方法和运算器
    Java 注解与反射
    【obs】windows版本号判断
    MOOC——信号报告(5分)
    ECMAScript 6 新特性详解
    k3s+traefik+cert-manager+letsencrypt实现web服务全https
    需求评审时如何平衡团队成员间意见?
  • 原文地址:https://blog.csdn.net/qq_34556414/article/details/125912552