Angular2 http模块

2023-11-18

1. Http简介

互联网是构建在网络通讯协议的基础上。所有的信息,不管是音频、视频、图片、声音还是文本,都是通过网络进行传输。网站开发过程不可避免的会接触位于应用层的http/https协议。这两种协议是构建与TCP/IP的基础之上。

RFC 2616 - IETF中定义的8中http请求方式为:GET、POST、HEAD、DELETE、PUT、TRACE、REQUEST、CONNECT.

2. Angular 模块http

angular2将http进行了封装,统一位于核心模块的http模块,使用时需要手动引入调用。
import Http from "@angular/http";

http协议标准规定的的http请求方法传入的参数包含三个部分:url(请求地址)、Request Header(请求头信息)、Request Body(请求体);Angular2在RFC2616的基础上封装了8种http请求.每种请求都会传入arguments参数即以上所说请求参数,其长度为2(或3);请求方法的响应结果为Observable类型。

POST方法 其源代码为:
post(url: string, body: any, options?: RequestOptionsArgs): Observable<Response>;

1. 先来看看请求使用方法:
  1. post、put、patch三种方法都参数顺序不可调整,url、body是必须参数,options为可选参数;
  2. get、delete、head、request、options这五种方法传递参数为1(或2)个,options为可选参数;

举几个例子:现在需要用cros跨域方式维护一个用户列表信息;
1. 需要请求用户信息列表;
2. 需要将修改后的用户信息发送至后台;

// user.service.ts
// 1. 请求用户列表
loadUserInfo(url:string):Observable<[]>{
    let  api=this.baseURL+url;
    let headers=this.makeHeaders();
    return this.http.get(
        api,{headers:headers}
        ).map(res=>res.json());
}
// 2. 提交用户信息
updateUserinfo(url:string,userInfo:Object):Observable<[]>{
    let  api=this.baseURL+url;
    let headers=this.makeHeaders();
    return this.http.post(
        api,userInfo,{headers:headers}
        ).map(res=>res.json());
}

如果上面post请求的body参数为空,即不需要传递请求体部分,不能省略,需传入一个空对象,如:
return this.http.post(api,{},{headers:headers}).map(res=>res.json());

若省略空请求体,http模块会将options部分当做请求体传递;

2. 再来看看每个请求参数:

angular封装的http请求模块部分,传入的参数url、body与其他http请求基本无差异;主要对请求头信息options进行了部分约定;

  1. url: http请求发送的地址,类型为string;
  2. body: http请求的请求主体信息,类型为任意类型any;
  3. options: http请求的请求头信息,类型为RequestOptionsArgs;

关于options,继续看源代码:
主要包含以下8个属性:

export interface RequestOptionsArgs {
  url?: string|null;                                                // ①请求url
  method?: string|RequestMethod|null;                               // ②请求方法
  /** @deprecated from 4.0.0. Use params instead. */                       
  search?: string|URLSearchParams|{[key: string]: any | any[]}|null;// ③url查询字符串
  params?: string|URLSearchParams|{[key: string]: any | any[]}|null;// ④url查询字符串
  headers?: Headers|null;                                           // ⑤请求头信息
  body?: any;                                                       // ⑥请求体
  withCredentials?: boolean|null;                                   // ⑦跨域请求标志位
  responseType?: ResponseContentType|null;                          // ⑧请求响应的类型
}

这里主要说明一下⑤、⑦、⑧三个属性

  • withCredentials:启用认证方式跨域请求标识位;
    指示了是否使用类似资格证书(cookies、authorization、headers/头部授权)的方式来创建一个跨域站点的访问控制请求,同一个站点下使用该属性无任何效果;angular封装的该属性默认值为true;

    XMLHttpRequest默认情况下,跨源请求不提供凭据(cookie、HTTP认证及客户端SSL证明等)。通过将withCredentials属性设置为true,可以指定某个请求应该发送凭据。如果服务器接收带凭据的请求,会用Access-Control-Allow-Credentials: true的HTTP头部来响应。如果发送的是带凭证的请求,但服务器响应中没有包含这个头部信息,那么浏览器不会吧响应返回给Javascript进行处理(即:响应内容responseText中是空字符串,响应状态status=0,同时调用onerror()事件处理程序);目前支持withCredentials属性的浏览器有FireFox3.5+、Safari4+、Chrome;IE10及更早版本均不支持。

  • headers:请求头信息;用于对http请求的头信息进行操作;

    • 其主要包括一下10个方法:
    序号 方法名 作用 参数说明
    1 append(name,value) 添加指定字段头信息
    2 set(name,value) 添加、更新指定字段头信息
    3 delete(name) 删除指定字段头信息
    4 get(name) 获取指定字段头信息
    5 has(name) 判断是否包含指定字段头信息
    6 keys() 返回头信息的所有键值名
    7 values() 返回头信息的所有键值
    8 toJSON() 以字符串形式返回所有头信息
    9 getAll(name) 以数组形式返回指定字段的头信息
    10 forEach(fn(values,name,headers){})
  • responseType :设置可接受的响应类型;即Request Headers.Accept值,默认接受所有类型;

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

Angular2 http模块 的相关文章

随机推荐

  • linux中安装mysql时报错解决方案

    转载于http www cnblogs com xiaolang8762400 p 6950920 html 找了很久才找到 谢谢大神 本人需要找的问题主要是安装时出错的解决方法 本人的文件版本跟原创的版本有点不一样 需要哪个版本自行选择
  • 实战:从Mysql数据库frm文件中,提取表结构创建SQL语句

    需求 在某些特殊的场景下 例如你的mysql数据库无法启动 需要你将表的ibd文件拷贝到另一个数据库中 恢复业务数据库 恢复业务数据的前提 是你需要在另一个数据库中 创建好一模一样的表结构 这时你就需要从Mysql数据库的frm文件中 提取
  • Mysql查询日期timestamp格式的数据

    在Navicat中 时间戳 timestamp 格式的数据表现为 查询某一天的数据 SELECT FROM my table WHERE update time LIKE 2022 10 06 或是 SELECT FROM my table
  • 如何成功开展网络营销?

    企业如要将网上营销开展成功 则必须注意以下方面 1 准确 客观的市场定位 网上营销同传统的营销相比 其前期工作也包括准确客观的市场定位 网上营销与一般营销有较大的区别 因此其市场定位也有其独特的特点 如何准确客观地进行网上营销的市场定位 必
  • CentOS8更换阿里源及解决yum update报错问题

    CentOS更换阿里源 yum makecache提示错误 为 repo base 下载元数据失败 Cannot download repomd xml Cannot download repodata repomd xml All mir
  • GitHub的使用

    文章目录 一 通过实际操作学习Git 1 Git基本操作 2 分支操作 3 更改提交操作 4 推送至远程仓库 5 从远程仓库获取 6 帮助大家深入理解Git资料 二 工具栏 1 键盘快捷键 2 工具栏 3 控制面板 4 仓库 三 与GitH
  • vite插件介绍 - vite-plugin-meta-env

    vite插件介绍 vite plugin meta env a vite plugin define dynamic env variables in import meta env npm github 可以基于本仓库去开发自己的vite
  • 微信小程序怎么设置单个页面颜色/顶部栏颜色/tabBar颜色

    微信小程序怎么设置单个页面的背景颜色 这个其实很简单 看看酱茄小编是怎么操作的 在对应的json里面写入以下代码即可 单页页面的背景颜色设置方法 navigationBarBackgroundColor FFFFFF 小程序tabBar 底
  • 数据清洗---数据整合

    数据整合可以使用Pandas库中merge 函数合并数据集 import pandas as pd 建两个数据集 df1 DataFrame lkey b b a c data1 range 4 df2 DataFrame rkey a b
  • 写selenium常用到的js代码

    selenium可以运行JavaScript代码 可以用一些JavaScript来辅助编写Selelnium代码 1 scrollIntoView 向下拉滚动条 使得某元素可见 IWebElement element driver Find
  • tensorflow NameError: name ‘layers‘ is not defined解决办法

    错误代码 import tensorflow as tf net layers Dense 10 net build 4 10 net kernel NameError name layers is not defined 错误原因 ten
  • 如何使用jquery通过id值修改指定的input的value值

    如何使用jquery通过id值修改指定的input的value值 定义和用法 示例代码 改变动态id的input值 定义和用法 val 方法返回或设置被选元素的值 元素的值是通过 value 属性设置的 该方法大多用于 input 元素 如
  • ant design pro v5 动态路由

    ant design pro v5 动态菜单 1 添加模拟数据 2 添加request请求 3 修改app tsx文件 a 第一步修改getInitialState b 第二步修改layout 4 app tsx 完整代码 5 解决icon
  • qt : day 3

    1 完成登录框的按钮操作 并在登录成功后进行界面跳转 pro QT core gui texttospeech greaterThan QT MAJOR VERSION 4 QT widgets CONFIG c 11 The follow
  • python研究生专业_用Python爬取了考研吧1000条帖子,原来他们都在讨论这些!

    写在前面 考研在即 想多了解考研er的想法 就是去找学长学姐或者去网上搜索 贴吧就是一个好地方 而借助强大的工具可以快速从网络鱼龙混杂的信息中得到有价值的信息 虽然网上有很多爬取百度贴吧的教程和例子 但是贴吧规则更新快 目的不一样 爬取的内
  • 移动Web开发入门(四) -- 移动端调试

    文章目录 移动端调试 浏览器调试 进入控制台 进入浏览器模拟器 切换测试机型 添加测试机型 改变屏幕尺寸 改变DPR 改变网络情况 改变屏幕显示大小 横 竖屏切换 真机测试 扩展 远程调试工具 vorlon js 多终端调试工具 brows
  • sql注入之报错注入

    报错注入 报错注入在没法用union联合查询时用 但前提还是不能过滤一些关键的函数 报错注入就是利用了数据库的某些机制 人为地制造错误条件 使得查询结果能够出现在错误信息中 这里主要记录一下xpath语法错误和concat rand gro
  • JVM三大子系统之类加载子系统(二)

    前置说明 由于个人能力有限 下面文章会大量整理 引用其他人的文章 我个人主要把这篇文章当成是自己的学习笔记 通过前面的文章 我们知道了 一段java代码是如何运行的 1 编译 程序员编写的java文件 编译成 class文件 2 加载 JV
  • 2027 转换字符串的最少操作次数

    题目描述 给你一个字符串 s 由 n 个字符组成 每个字符不是 X 就是 O 一次 操作 定义为从 s 中选出 三个连续字符 并将选中的每个字符都转换为 O 注意 如果字符已经是 O 只需要保持 不变 返回将 s 中所有字符均转换为 O 需
  • Angular2 http模块

    1 Http简介 互联网是构建在网络通讯协议的基础上 所有的信息 不管是音频 视频 图片 声音还是文本 都是通过网络进行传输 网站开发过程不可避免的会接触位于应用层的http https协议 这两种协议是构建与TCP IP的基础之上 RFC