jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

jquery ajax 请求中多出现一次OPTIONS请求及其解决办法

http://www.tangshuang.net/2271.html

在上一篇《服务端php解决jquery ajax跨域请求restful api问题及实践》中,我简单介绍了如何通过服务端解决jquery ajax的跨域请求问题,但是,在这个过程中,我们会发现,在很多post,put,delete等请求之前,会有一次options请求。本文主要是来讨论一下这是什么原因引起的。

根本原因就是,W3C规范这样要求了!在跨域请求中,分为简单请求(get和部分post,post时content-type属于application/x-www-form-urlencoded,multipart/form-data,text/plain中的一种)和复杂请求。而复杂请求发出之前,就会出现一次options请求。

什么是options请求呢?它是一种探测性的请求,通过这个方法,客户端可以在采取具体资源请求之前,决定对该资源采取何种必要措施,或者了解服务器的性能。

在ajax中出现options请求,也是一种提前探测的情况,ajax跨域请求时,如果请求的是json,就属于复杂请求,因此需要提前发出一次options请求,用以检查请求是否是可靠安全的,如果options获得的回应是拒绝性质的,比如404\403\500等http状态,就会停止post、put等请求的发出。

虽然在下面的参考文献中有人提出可以取消options请求,但是实测后发现是不行的,jquery封装之后,更不能轻易取消。因此,靠javascript客户端取消options请求是不可能的,只能通过服务端对options请求做出正确的回应,这样才能保证options请求之后,post、put等请求可以被发出。但是,我们不能允许所有的options请求,而应该是有条件的,所以最好是通过一个特殊的机制,去验证客户端发出的options请求数据是否是符合服务端的条件的,如果不满足,返回403,则客户端会取消原有的post计划。

参考文献:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113674.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 基于Spring MVC + Spring + MyBatis的【医院就诊挂号系统】[通俗易懂]

    基于Spring MVC + Spring + MyBatis的【医院就诊挂号系统】[通俗易懂]一、语言和环境1.实现语言:JAVA语言。2.环境要求:MyEclipse/Eclipse+Tomcat+MySQL。3.使用技术:SpringMVC+Spring+MyBatis或JSP+Servlet+JavaBean+JDBC。二、实现效果实现能够对患者姓名,医师类别、科室的模糊查询,用户点击核销以后状态变为已就诊。点击挂号实现基本信息的添加三、实现代码数据库:SETFOREIGN_KEY_CHECKS=0;———-

    2022年10月6日
    5
  • 使用 UpdatePanel

    使用 UpdatePanel1概述ASP.NETUpdatePanel控件能让你创建丰富的、以客户为中心的Web应用程序。使用UpdatePanel控件,可以刷新选择的页面部分而不是使用回发来刷新整个页面,这就像是执行了一个局部页面更新一样。包含一个ScriptManager和一个或多个UpdatePanel的Web页面会自动加入局部页面更新,而不需要定制客户端代码。1.1场景…

    2022年7月23日
    14
  • 转 -如何改变*.sln文件的路径「建议收藏」

    转 -如何改变*.sln文件的路径「建议收藏」工具-》选项—》项目和解决方案,可以设置项目和解决方案的目录。选中解决方案,点击文件,可以出现,*.sln另存为的选项转载于:https://www.cnblogs.com/9421/archive/2010/02/01/1660764.html…

    2022年5月18日
    76
  • java请求webservice_java service

    java请求webservice_java service展开全部java返回list这你应该会吧,然后转换成json格式给其它语言.json(javascriptObjectNotation的缩写)是一个基于文本的,人类可读32313133353236313431303231363533e4b893e5b19e31333361313936的,开放标准的轻量级数据交换格式。它继承了javascript中的简单数据结构和相关数组对象,称为对象。不管…

    2022年10月16日
    3
  • python logging模块

    python logging模块

    2022年3月8日
    43
  • django-redis_redis缓存使用场景

    django-redis_redis缓存使用场景前言动态网站的基本权衡是,它们是动态的。每次用户请求页面时,Web服务器都会进行各种计算-从数据库查询到模板呈现再到业务逻辑-以创建站点访问者看到的页面。从处理开销的角度来看,这比标准的文件

    2022年7月30日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号