返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript网络请求与远程资源的方法
  • 527
分享到

JavaScript网络请求与远程资源的方法

2024-04-02 19:04:59 527人浏览 泡泡鱼
摘要

今天小编给大家分享一下javascript网络请求与远程资源的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面

今天小编给大家分享一下javascript网络请求与远程资源的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

JavaScript网络请求与远程资源的方法

一、ajax的诞生

2005年,Jesse James Garrett撰写了一篇文章《Ajax - A New Approach to WEB Applications》,这篇文章中描绘了一个被称为Ajax(Asynchronous JavaScript+XML,即异步JavaScript+XML)的技术。这个技术涉及发送服务器请求额外数据而不刷新页面,从而实现更好地用户体验。Garrett解释了这个技术怎样改变自Web诞生以来就一直延续的传统单击等待的模式。
把Ajax推到历史舞台上的关键技术是XMLHttpRequest(XHR)对象。在XHR出现之前,Ajax风格的通信必须通过一些黑科技实现,主要是使用隐藏的窗格或内嵌窗格。XHR为发送服务器请求和获取相应提供了合理的接口。这个接口可以实现异步从服务器获取额外数据,意味着用户不用页面刷新也可以获取数据。通过XHR对象获取数据后,可以使用DOM方法把数据插入网页。
XHR对象的api被普遍认为比较难用,而Fetch API自动诞生以后迅速成为了XHR更现代的替代标准,Fetch API支持期约promise和服务线程(service worker),已经成为及其强大的Web开发工具

二、跨源资源共享

通过XHR进行Ajax通信的一个主要限制是跨源安全策略。默认情况下,XHR只能访问与发起请求的页面在同一域内的资源。这个安全限制可以防止某些恶意行为。不过,浏览器也需要支持合法跨源访问的能力。
跨源资源共享(CORS,Cross-Origin Rerource Sharing)定义了浏览器与服务器如何实现跨源通信。CORS背后的基本思路就是使用自定义的HTTP头部允许浏览器和服务器相互了解,以确定请求或相应应该成功还是失败。
对于简单的请求,比如GET或POST请求,没有自定义头部,而且请求体是text/plain类型,这样的请求在发送时会有一个额外的头部叫Origin。Origin头部包含发送请求的页面的源(协议、域名、端口),以便服务器确定是否为其提供响应。
现代浏览器通过XMLHttpRequst对象原生支持CORS,在尝试访问不同源的资源时,这个行为会被自动触发。要向不同域的源发送请求,可以使用标准XHR对象并给open()方法传入一个绝对URL,比如:

let xhr = new XMLHttpRequest();xhr.onreadystatechange = function(){
	if(xhr.readyState == 4){
		if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
			alert(xhr.reaponseText);
		}else{
			alert("Request was unsuccessful:"+xhr.status);
		}
	}};xhr.open("get","http://www.nezha.con/page/",true);xhr.send(null);

跨域XHR对象允许访问status和statusText属性,也允许同步请求,出于安全考虑,跨域XHR对象也施加了一些额外的限制。

  • 不能使用setRequestHeader()设置自定义头部;

  • 不能发送和接收cookie;

  • getAllResponseHeaders()方法始终返回空字符串

因为无论同域还是跨域请求都是用同一个接口,所以最好在访问本地资源时使用相对URL,在访问远程资源时使用绝对URL,这样可以更明确地区分使用场景,同时避免出现访问本地资源时出现头部或cookie信息访问受限的问题。

三、预检请求

CORS通过一种叫预检请求的服务器验证机制,允许使用自定义头部、除GET和POST之外的方法,以及不同请求体内容类型。在要发送涉及上述某种高级选项的请求时,会先想服务器发送一个预检请求。这个请求使用OPTIONS方法发送并包含如下头部:

  • Origin:与简单请求相同;

  • Access-Control-Request-Method:请求希望使用的方法;

  • Access-Control-Request-Headers:(可选)要使用的逗号分隔的自定义头部列表;

四、Fetch API

Fetch API能够执行XMLHttpRequest对象的所有任务,但更容易使用,接口也更现代化,能够在Web工作线程等Web工具中使用。XMLHttpRequest可以选择异步,而Fetch API则必须是异步。
fetch()方法是暴露在全局作用域中的,包括主页面执行线程、模块和工作线程。调用这个方法,浏览器就会向给定URL发送请求。
1、分派请求
fetch()只有一个必需的参数input。多数情况下,这个参数是获取资源的URL,这个方法返回一个期约:

let r = fetch('/bar');console.log(r);//Promise<pending>

URL的格式(相对路径、绝对路径等)的解释与XHR对象一样。
请求完成、资源可用时,期约会解决一个Response对象,这个对象是API的封装,可以通过它取得相应资源。获取资源要使用这个对象的属性和方法,掌握响应的情况并将负载均衡转为有用的形式。
2、读取响应
读取响应内容的最简单方式是取得纯文本格式的内容,只要用到text()方法。这个方法返回一个期约,会解决为取得资源的完整内容。
3、处理状态码和请求失败
Fetch API 支持通过Response的status和statusText属性检查响应状态。成功获取响应的请求通常会产生值为200的状态码。
4、常见Fetch请求模式

  • 发送JSON数据

  • 在请求体中发送参数

  • 发送文件

  • 加载Blob文件

  • 发送跨域请求

  • 中断请求

五、websocket

套接字webSocket的目标是通过一个长时连接实现与服务器全双工、双向的通信。在JavaScript中创建websocket时,一个HTTP请求会发送到服务器以初始化连接。服务器响应后,连接使用HTTP中的Upgrade头部从HTTP协议切换到websocket协议,这意味着websocket不能通过标准HTTP服务器实现,而必须使用支持该协议的专有服务器。
因为websocket使用了自定义协议,所以URL方案稍有变化,不能再使用http://或https://,而要使用ws://和wss://。前者是不安全的连接,后者是安全连接。在执行websocket URL时,必须包含URL方案,因为将来有可能再支持其他方案。
使用自定义协议而非HTTP协议的好处是,客户端与服务器质检可以发送非常少的数据,不会对HTTP造成任何负担。使用更小的数据包让websocket非常适合宽带和延迟问题比较明显的移动应用。使用自定义协议的缺点是,定义协议的时间比定义JavaScript API的时间要长,websocket得到了所有主流浏览器的支持。

以上就是“JavaScript网络请求与远程资源的方法”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网JavaScript频道。

--结束END--

本文标题: JavaScript网络请求与远程资源的方法

本文链接: https://lsjlt.com/news/97421.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript网络请求与远程资源的方法
    今天小编给大家分享一下JavaScript网络请求与远程资源的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面...
    99+
    2024-04-02
  • 如何使用 Python 请求网络资源
    很长时间以来我们都在分享 Linux 系统相关的知识,所以可能会有朋友误以为我们只分享 Linux 操作相关的东西,其实不是啊,我们在平时开发过程中遇到的一些问题,感觉可以总结的,都有可能拿来分享。最近在写一个定时访问网络资源的程序,里面涉...
    99+
    2023-05-14
    Python 网络资源
  • 怎么使用Python请求网络资源
    这篇文章主要介绍了怎么使用Python请求网络资源的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Python请求网络资源文章都会有所收获,下面我们一起来看看吧。使用 python 访问网络资源要访问网络...
    99+
    2023-07-06
  • vue网络请求方案原生网络请求和js网络请求库的示例分析
    这篇文章主要介绍vue网络请求方案原生网络请求和js网络请求库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 原生网络请求1. XMLHttpRequest(w3c标准)  &nbs...
    99+
    2023-06-21
  • Android实现网络请求方法
    Android网络请求(1) ​ 安卓开发网络请求可谓是安卓开发的灵魂,如果你不会网络请求,那么你开发的应用软件就是一具没有灵魂的枯骨。 ​ 在安卓开发中进行网络请求和java中的网络请求有异曲同工之妙,但是安卓软件毕竟的安装在我们手机上的...
    99+
    2023-08-19
    android java jvm
  • 【小程序】网络请求API介绍及网络请求的封装
    文章目录 网络请求基本演练和封装网络请求基本演练网络请求配置域名网络请求的封装 网络请求基本演练和封装 网络请求基本演练 微信提供了专属的API接口,用于网络请求: wx.req...
    99+
    2023-09-04
    小程序 网络 微信小程序
  • PHP实现网络请求的方法总结
    一、分析php发送网网络请求的方法 对于php发送网络请求,我们最常用的请求就是curl,有时我们也会用到file_get_contents函数发送网络请求,但file_get_co...
    99+
    2024-04-02
  • Android使用URL读取网络资源的方法
    URL(Uniform Resource Locator)是统一资源定位器,它是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览...
    99+
    2023-05-30
    android url 网络资源
  • android 网络请求库volley方法详解
    使用volley进行网络请求:需先将volley包导入androidstudio中 File下的Project Structrue,点加号导包   volley网络请...
    99+
    2022-06-06
    volley Android
  • Java网络编程教程之设置请求超时的方法
    一、引言随着企业系统的发展,应用多采用分布式结构,严重依赖于网络的稳定性。但由于网络天生的不稳定性,系统开发过程中需要考虑网络不稳定情况下如何保证应用的鲁棒性。 设置网络超时是其中一种保证应用健壮性的手段。 设置网络超时设置后,请求在设定时...
    99+
    2023-05-30
    java 请求超时 ava
  • Android中ImageView使用网络图片资源的方法
    本文实例讲述了Android中ImageView使用网络图片资源的方法。分享给大家供大家参考。具体如下: 很多时候我们不想把东西都放在APK里面,或者是不能放进去,这时候我们就...
    99+
    2022-06-06
    网络图 方法 图片 Android
  • nginx设置资源请求目录的方式详解
    目录前言方式1:使用root案例演示方式2:使用alias案例展示root和alias的区别总结前言 开发过程中,在某些场景下,希望某些静态资源文件能够直接通过nginx来访问,比如...
    99+
    2024-04-02
  • Flutter网络请求框架Dio源码分析以及封装(一)--请求流程分析
    Flutter网络请求框架Dio源码分析以及封装--请求流程分析 前言目的请求流程-构造Dio对象请求流程-构造请求参数请求流程-构建请求流并添加拦截器请求流程-请求分发总结 前言 利用...
    99+
    2023-09-01
    flutter
  • React网络请求发起方法详细介绍
    目录1. 发起网络请求2. 开发时网络请求代理配置1. 发起网络请求 首先需要安装 axios 库: yarn add axios 发起网络请求: import React, { C...
    99+
    2024-04-02
  • Flutter网络请求Dio库的使用及封装方法
    这篇文章主要讲解了“Flutter网络请求Dio库的使用及封装方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Flutter网络请求Dio库的使用及封装方法”吧!Dart语言内置的Http...
    99+
    2023-06-30
  • VUE Axios与跨域资源共享(CORS):跨域请求的秘诀
    ...
    99+
    2024-04-02
  • 分析web前端的网络请求方式
    本篇内容介绍了“分析web前端的网络请求方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一、...
    99+
    2024-04-02
  • 解析C#网络编程中的Http请求
    本篇分享简单介绍C#中的Http请求,前几天帮朋友的项目封装ApiHelper,我粗糙的结果就如下,想想我真的是差的太远了。还有一位架构师也在封装这个Helper , 所以最后的结果...
    99+
    2024-04-02
  • Java实现网络资源的单线程下载
    目录一、题目描述二、解题思路三、代码详解一、题目描述 题目实现:在一个线程中完成网络资源的下载。 二、解题思路 创建一个类:SingleThreadDownloadFrame,继承J...
    99+
    2022-11-13
    Java资源单线程下载 Java资源下载 Java 单线程下载
  • 关于React Native使用axios进行网络请求的方法
    在前端开发中,能够完成数据请求的方式有很多,如Ajax、jQuery ajax、axios和fetch等。不过,随着技术的发展,现在能够看到的基本上也就axios和fetch两种。 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作