zoukankan      html  css  js  c++  java
  • 第19节课 接口实战(接口基础 http协议 cookie 、sessionid、 token)

    接口项目实战

    !接口:一定是基于某种协议的


    一、接口分类
    硬件接口:两个硬件设备之间的连接方式,例如USB接口
    软件接口:软件程序之间的数据交互的通道

    举例:用户界面是软件接口
    用户界面:user interface ------直译就是用户接口
    api:application programming interface 应用程序可编程接口,是接口的一种


    1.软件接口的分类
    程序内部接口:客户端与服务器的接口,实现客户端与服务器间的数据传递
    外部接口:例如第三方登录,第三方支付,即调用第三方的接口

    二、常见的接口协议
    接口之间的数据通信,一定是基于某种协议(数据传递的规则)
    webservice接口:soap协议通过http来传输,请求报文、响应报文都是xml格式
    用的测试用具是soapUI
    http协议接口:目前使用最广泛的是用HTTP协议来传输数据,常见的请求方法有,get,post,put,patch,delete
    常见的测试工具是postman,jmeter

    三、什么是接口测试?
    api文档==接口文档

    接口测试:本质是基于某种协议,发送一个请求给服务器,然后服务器返回一个响应数据,然后对响应数据进行分析,判断是否与我们预期的返回一致,从而验证功能是否正确

    四、HTTP协议解读
    1.http协议:超文本传输协议
    2.https:简单的来说,就是http的安全版,在http下加入了SSL层。
    SSL主要用户web的安全传输协议
    3.http的默认端口号是:80 ,默认的端口在url可以不加
    https的默认端口号是:443 ,默认的端口在url可以不加

    4.http请求的过程
    客户端:PC端的应用程序 浏览器 APP 小程序
    HTTP通信:两个部分组成--->客户端发送给服务器的请求信息
    服务器返回给客户端的响应信息

    简单来说
    客户端,前端----->主动请求。能够发起对应的请求的客户端。
    服务端,后端----->被动接受。
     
    1)http请求信息
    http请求信息一般包括4个部分:请求行、请求头部信息、空行、请求体(请求正文)

    客户端请求返回的结果就是response对象

    以访问百度为例,F12查看请求信息:

    ♥域名:dss0.bdstatic.com ,后面跟的是接口地址,后面如果有?,?表示后面携带参数

        DNS解析域名,就是其映射的IP地址(域名,IP是 一 一对应的)

    ♥remote address:180.101.38.33:443

      180.101.38.33就是上面的域名解析对应的IP,443是https默认的端口号,在URL中默认端口可以不写

    域名和 IP 地址的区别

    - 域名更好记忆;
    - 映射 IP 地址。
    - DNS 解析: 域名 --> ip

    请求头部信息,包含以下内容

     

     

    访问百度的Request Header

    1. Accept:ext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
    2. Accept-Encoding:gzip, deflate, br
    3. Accept-Language:zh-CN,zh;q=0.9
    4. Cache-Control:max-age=0
    5. Connection:keep-alive
    6. Cookie:BIDUPSID=5A6CE0FDF3B97A9BAFF3454CE4DB994D; PSTM=1588424442; BAIDUID=5A6CE0FDF3B97A9B6F9CA0963B9BEA8A:FG=1; BD_UPN=12314753; BDUSS=ERpUC1yWHJpc35MY3JZTEFCLX5qMWtnbk5ldHJUTDBwdGp1TmlPZzlRTmtBfjVlSVFBQUFBJCQAAAAAAAAAAAEAAAAISjdMwffUxriz0akAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGR21l5kdtZeN; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; COOKIE_SESSION=1_1_9_9_4_5_0_0_9_1_16_0_11423_0_42_0_1591370240_1591367866_1591370198%7C9%23184860_47_1591367863%7C9; BDRCVFR[0y2jp54_2wb]=mk3SLVN4HKm; BD_HOME=1; H_PS_PSSID=
    7. Host:www.baidu.com
    8. Upgrade-Insecure-Requests:1
    9. User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36

    user_agent:用户代理。用浏览器去作为代理,请求的头部信息中user_agent显示的就是浏览器名称,表示现在在用浏览器访问。如上面的user-agent显示mozilla、chrome

                用postman去发请求,请求的头部信息中user_agent显示的就是postmanruntime,表示是用postman在访问

    2)http响应信息

    响应信息一般也包括4个部分:状态行、响应头部信息、空行、响应正文

     

    ♥ 状态行:http/1.1 200 ok  ---表示返回的数据的状态是什么样子?--->http协议级版本  状态码 

    ♥响应头部信息

    content-Type:响应数据返回的格式

      如果返回的是json格式,content-Type:application/json

      如果返回的是Form格式, content-Type:application/x-www-form-urlencoded

      如果返回的是xml格式, content-Type:application/xml

      如果返回的是text格式, content-Type:text/plain

    格式显示如下:

    | Body参数方式 | Content-type                      |
    | ------------ | --------------------------------- |
    | Text | text/plain |
    | Form | application/x-www-form-urlencoded |
    | JSON | application/json |
    | File | 不确定 |

    面试:响应信息中查看什么值来确实数据类型?-----------content-type查看响应数据格式

    ♥响应体(响应正文)

    ♥♥♥HTTP响应状态码(面试题)

    | 状态码大类| 表示的含义                 | 客户端client要做的事                                         | 服务器端server要做的事                                           |
    | ---------| -------------------------| ----------------------------------------------------------| ------------------------------------------------------------ |
    | 1xx | Informational 信息 | 啥都不用做,知道就好 | 告诉client,信息收到了,我后续会处理 |
    | 2xx | Successful 成功 | 啥都不用做,知道就好 | 告诉client,请求已正确处理 |
    | 3xx | Redirection 重定向 | 重新请求返回的新地址 -> 才能获取真正需要的数据 | 告诉client,你需要的内容,由于一些原因,比如地址已发生变化了,然后返回该内容的新地址 |
    | 4xx | Client Error客户端的错误 | 确保用正确的参数和信息正确,重新请求 | 告诉client,请求已正确处理 |
    | 5xx | Server Error 服务器端的错误 | (一般来说)都无需啥操作 -> 往往需要服务器端改了bug后,重新发送请求| 需要服务器Server端自己找到具体出了啥错 -> 往往是服务器端的代码的bug导致了出错 |

    ##### (一),最常用的状态码及含义

    - Successful - 2xx:成功类,行为被成功地接受、理解和采纳
    - - 200 OK
    - 服务器成功返回用户请求的数据
    - 往往为了简化处理
    - POST创建成功后应该返回201的,创建
    - 404 NOT FOUND
    - 找不到资源
    - 500 INTERNAL SERVER ERROR
    - 服务器内部错误
    - 最常见的原因是:服务器内部挂了
    - 比如你传递参数中有些参数是空,而导致后台代码无法解析,出现异常而崩溃

    ##### (二),次常用的状态码及含义次常用的响应码及含义

    - Successful - 2xx:成功类,行为被成功地接受、理解和采纳
    - 201 CREATED
    - 通过POST或PUT创建资源成功
    - 204 NO CONTENT
    - 资源修改成功,但是没有返回内容
    - 常用于DELETE操作的返回

    - Redirection - 3xx:重定向类,为了完成请求,必须进一步执行的动作
    - 301 永久重定向
    - 302 临时重定向
    - 304 Not Modified

    - Client Error - 4xx:客户端错误类,请求包含语法错误或者请求无法实现
    - - 401 UNAUTHORIZED
    - - 没有权限访问该资源
    - 典型情况:用户没有登录,没有获得对应的access token而直接访问某资源
    - 403 FORBIDDEN
    - 禁止访问
    - 典型情况:虽然用户已登录,但是去更新/删除需要更高权限才能操作的资源
    - 405 METHOD NOT ALLOWED
    - 方法不允许
    - 举例:比如某个资源不允许POST请求,但是你确发起了POST请求

     ※重定向怎么理解?----if

    机制:访问一个接口,在返回的数据中,即response 头中会设置一个字段:location;这个location里面有个新的地址,对应的状态码是301/302,客户端会检查(当状态码是301/302时)是否有location字段,有的话,直接提取数据,自动的去访问这个网址。

     

     

     

     

      

      

       

     5.HTTP请求的方法

    get、post、patch、put、delete、copy、options、lock、unlock等

    常用下面5种

    1)HTTP请求常用的两种方法:get post

    区别:

     (1).应用场景不一样:

      get是从服务器获取数据(没有请求体),eg:打开百度首页

      post是向服务器提交数据,eg:登录/注册,提交用户信息(username、password)

        post应用场景有:创建新的数据、更新修改已有的资源(修改不是一定用post)

    (2).参数存放显示不一样

      get请求,参数都是显示在浏览器的URL上,即get请求的参数是URL的一部分。?表示query string--查询字符串

      post请求,参数可以放在URL中,但是通常不会这么做,而是将参数放在请求体(body)中----支持请求体。body中的参数相比于URL的参数,不能直接看到,也就是post比get的相对安全的原因。

    (3).post请求参数在请求体中,消息长度没有限制,以相对隐式的方式进行发送,通常用来向HTTP服务器提交 量比较大的数据

           get请求,由于浏览器的URL输入框的显示,只能发送数据量比较小的

    面试:get、post区别从以下4个方面回答:

    ##### (二),GET 和 POST 的区别

    - GET 表示获取资源,POST 表示创建资源;
    - GET 没有请求体,POST 有请求体;
    - GET 请求参数(query string查询字符串)放在url中以`?key1=value1&key2=value2`的形式, POST 不仅可以查询字符串,而且可以放在请求体里面。
    - 为什么说 POST 比 GET 更安全?
    - post请求参数在请求体中,消息长度没有限制

     6.鉴权、授权

    授权:相当于给一个通行证  

    鉴权:鉴定是否有权限访问(判断有没有通行证)

    问题:浏览器登录了某些网站,下次访问为什么不用登录?

    http协议是典型的无状态协议(就是说这一次的请求和上一次的请求是没有任何关系的,无法共享信息。好处就是速度快。),

             即上次登录后,下次再去登录时,依然不认识‘你',cookie 和session机制就是解决这个问题,让后一次访问无需再次登录,可以直接访问成功-------cookie 和session追踪用户。

    1) cookie、 session介绍

    原理:①客户端发送登录请求(username,pwd),服务器会校验username,pwd,该用户已经登录过的,客户端会设置一个字段session存到他的服务器端,返回响应时,响应头里面会有个set-cookie的字段(里面有session派发的sessionid),返回给客户端。这个cookie就存储再客户端的缓存里面。(cookie跟域名有内部绑定机制,这个cookie不能访问别的网址)

             ②下一次再去登录(比如网页),会自动将cookie放在请求头中一起发给服务端,服务端进行cookie校验:如果cookie中有sessionID,那么就会去服务器缓存里查找是否有该sessionID,找到了,就会返回这个session ID对应的用户 对应的网页信息。

    注:session有效期,如果cookie中没有sessionID 或 服务器缓存中没有sessionID(过期了),那就需要重新登录,不会自动登录了。

     

     cookie:存在客户端里面的

     

    2)token

    (1).什么是token

    token的意思是‘令牌’、‘门票’,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

    有的浏览器是不支持保存cookie的,那就必须去手动添加token这个‘令牌’,才能成功访问。

     

     原理:客户端发送登录请求(username,pwd),会根据这个用户信息生成一个token,

        再次访问的时候,必须要手动把token加上,才能正常访问

    session、token的区别:

    1.token不需要存到服务器,sessionID是存在服务器的缓存里

    2.登陆过的,再次访问时,session派发的sessionID存在客户端的cookie中,自动加在请求头中一起带到服务器去。

                         token则需要手动将token信息添加在uthorization字段里面,通过解密算法直接把token解密,服务端就可以拿到用户信息。

    3.资源消耗:

     token 解密,需要消耗计算资源,cpu。(不需要在服务端存储,不需要校验------》不需要消耗存储资源和查询资源)  

       session:需要消耗存储资源、查询资源

    4.token可以跨平台,跨域

       cookie后面会有绑定的域名,这个cookie就不能访问别的网址,不能跨域

     但是token,跟域名没有绑定关系。(大型公司)当服务器有多个域名,访问一个子服务器的域名,得到一个token。再去访问另一个子服务,只要带上这个token,就可以访问。

     五,cookie, session 和 token
    - cookie
    - http 是无状态的,没有记性。
    - cookie 是让服务器记住你。发会员卡,给你推荐
    - 存储在浏览器
    - session。
    - 在服务器记住用户信息状态的。验证
    - 服务器验证
    - token, 令牌。 跨平台。 只要他有这个令牌,不管他是什么身份,手机,浏览器,电视,
    - 保存在客户端本地, local_storage
    - 移动端流通。手机,平板,web, 第三方客户端
    - 口令
    - 口令是会变的。
  • 相关阅读:
    优秀大数据GitHub项目一览
    自定义组件-BreadcrumbTreeView 的使用
    IOS中的属性列表----Property List
    即时通讯之smack客户端配置
    Android studio 使用问题汇总
    触摸事件UITouch的应用
    Android界面设计之对话框——定制Toast、AlertDialog
    android_orm框架之greenDAO(一)
    火速提升Android仿真器的运行速度 ——仿真器Genymotion
    Android 中的缓存机制与实现
  • 原文地址:https://www.cnblogs.com/ananmy/p/13053043.html
Copyright © 2011-2022 走看看