首页 > 其他分享 >AJAX POST&跨域 解决方案 - CORS

AJAX POST&跨域 解决方案 - CORS

时间:2023-05-05 23:09:35浏览次数:50  
标签:www http 跨域 AJAX CORS 浏览器 POST


跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内容),因为我们在日常的项目开发时会不可避免的需要进行跨域操作,所以跨域能力也算是前端工程师 的基本功之一。



  和大多数跨域的解决方案一样,JSONP也是我的选择,可是某天PM的需求变了,某功能需要改成支持POST,因为传输的数据量比较大,GET形式搞不定。所以折腾了下闻名已久的 CORS(跨域资源共享,Cross-Origin Resource Sharing ,这边文章也就是折腾期间的小记与总结。



    

AJAX POST&跨域 解决方案 - CORS_面试


     




 


概述


  • CORS能做什么:


     正常使用AJAX会需要正常考虑跨域问题,所以伟大的程序员们又折腾出了一系列跨域问题的解决方案,如JSONP、flash、ifame、xhr2等等。


     本文介绍的CORS就是一套AJAX跨域问题的解决方案。


 


  •  CORS的原理:


     CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问。CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求。实现此功能非常简单,只需由服务器发送一个响应标头即可。


 


  • CORS浏览器支持情况如下图:


      

AJAX POST&跨域 解决方案 - CORS_ViewUI_02


    

AJAX POST&跨域 解决方案 - CORS_面试_03


  喜闻乐见、普大喜奔的支持情况,尤其是在 移动终端上,除了opera Mini;


  PC上的现代浏览器都能友好的支持,除了IE9-,不过前端工程师对这种情况早应该习惯了...


    

AJAX POST&跨域 解决方案 - CORS_javascript_04


 


CORS启航


 


http://www.test1.com 上了,而我们打算从   http://www.test2.com 请求提取数据。一般情况下,如果我们直接使用 AJAX 来请求将会失败,浏览器也会返回“源不匹配”的错误," 跨域"也就以此由来。


http://www.test2.com 只需添加一个标头,就可以允许来自  http://www.test1.com 的请求,下图是我在PHP中的 hander() 设置, “*”号表示允许任何域向我们的服务端提交请求


    

AJAX POST&跨域 解决方案 - CORS_面试_05


  也可以设置指定的域名,如域名 http://www.test2.com


    

AJAX POST&跨域 解决方案 - CORS_ViewUI_06


     


Access-Control-Allow-Origin:*

PS:由于demo都在我厂的两台测试机间完成,外网也不能访问,所以在这就不提供demo了,见谅

AJAX POST&跨域 解决方案 - CORS_javascript_07


    

AJAX POST&跨域 解决方案 - CORS_跨域_08


   简单的一个header设置,一个支持跨域&POST请求的server就完成了:)


 


  当然,如果没有开启CORS必定失败的啦,如下图:


  

AJAX POST&跨域 解决方案 - CORS_javascript_09


问题&小结

  • 刚刚说到的兼容性。CORS是W3C中一项较新的方案,所以部分浏览器还没有对其进行支持或者完美支持,详情可移至 http://www.w3.org/TR/cors/
  • 安全问题。CORS提供了一种跨域请求方案,但没有为安全访问提供足够的保障机制,如果你需要信息的绝对安全,不要依赖CORS当中的权限制度,应当使用更多其它的措施来保障,比如OAuth2。

 


  自认为的cors使用场景:


  • cors在移动终端支持的不错,可以考虑在移动端全面尝试;PC上有不兼容和没有完美支持,所以小心踩坑。当然浏览器兼容就是个伪命题,说不准某个浏览器的某个版本就完美兼容了,说不准就有点小坑,尼玛伤不起!~
  • jsonp是get形式,承载的信息量有限,所以信息量较大时CORS是不二选择;
  • 配合新的JSAPI(fileapi、xhr2等)一起使用,实现强大的新体验功能。

标签:www,http,跨域,AJAX,CORS,浏览器,POST
From: https://blog.51cto.com/iwtxokhtd/6247994

相关文章

  • 一文弄懂CORS跨域原理
    1.前言由于同源策略的存在,导致我们在跨域请求数据的时候非常麻烦,首先阻挡我们的所谓同源到底是什么呢?所谓同源就是浏览器的一个安全机制,不同源的客户端脚本没有在明确授权的情况下,不能读写对方额资源。由于存在同源策略的限制,而又有需要跨域的业务,所以就有了CORS的出现。我们都......
  • jQuery AJAX之异步访问和加载片段
    HTML文件<!DOCTYPEhtml><html><head><metacharset="utf-8"/><title></title><scriptsrc="../../Scripts/jquery-3.4.1.min.js"></script><scriptsrc="ajaxindex.js&......
  • Django框架——ajax补充、多对多三种创建、序列化组件、批量操作数据、分页器
    ajax补充说明主要是针对回调函数args接收到的响应数据1.后端request.is_ajax() 用于判断当前请求是否由ajax发出2.后端返回的三板斧都会被args接收不再影响整个浏览器页面3.选择使用ajax做前后端交互的时候后端一般返回的都是字典数据 user_dict={'code':10000,'usernam......
  • Django——基于forms组件和ajax的注册功能
    Django——基于forms组件和ajax的注册功能path('register/',views.register)#注册的form表单fromdjangoimportformsfromdjango.formsimportwidgetsclassRegForm(forms.Form):user=forms.CharField(max_length=32,widget=widgets.TextInput(attrs={'class&......
  • 谷歌浏览器chrome安装postman插件
    1获取postman插件压缩包链接:https://pan.baidu.com/s/1pCNJxrM4gCvODa9tIbteDg?pwd=waje提取码:waje  2安装2.1下载压缩包,并且解压,然后打开浏览器2.2点击浏览器右上角三个点,更多工具,扩展程序2.3打开开发者模式2.4点击加载扩展程序,选择解压后的文件po......
  • post请求application/x-www-form-urlencoded
    importorg.springframework.http.HttpHeaders;importorg.springframework.http.MediaType;importorg.springframework.web.client.RestTemplateimportorg.springframework.util.MultiValueMap;importorg.springframework.util.LinkedMultiValueMap;importorg.springfra......
  • build、dev、generate、preview和postinstall的区别?
    这些指令是在package.json文件中定义的Nuxt.js命令。nuxtbuild:用于构建Nuxt.js应用程序生成静态文件和服务器端渲染的bundle文件。运行该命令后,将在.nuxt目录中生成生成的文件。nuxtdev:用于启动Nuxt.js应用程序的开发模式,该模式支持热更新和实时重新加载。运......
  • apipost利用预执行脚本生成不同的测试数据
    apipost利用预执行脚本生成随机的测试数据完整流程使用JavaScript编写预执行脚本进入自动化测试功能界面新建自动化测试,添加接口进去配置执行次数和间隔完成简单介绍apipost提供了强大的接口测试功能,方便我们进行接口测试的各种操作具体步骤1.使用JavaScript编写预......
  • PostgreSQL 12 文档: PostgreSQL 客户端工具
    PostgreSQL客户端应用这部份包含PostgreSQL客户端应用和工具的参考信息。不是所有这些命令都是通用工具,某些需要特殊权限。这些应用的共同特征是它们可以被运行在任何主机上,而不管数据库服务器在哪里。当在命令行上指定用户和数据库名时,它们的大小写会被保留—空格或特殊字......
  • PostgreSQL 12 文档: PostgreSQL 服务端程序
    PostgreSQL服务器应用这一部分包含PostgreSQL服务器应用和支持工具的参考信息。这些命令只在数据库服务器所在的主机上运行才有用。其他工具程序在PostgreSQL客户端应用中列出。目录initdb —创建一个新的PostgreSQL数据库集簇pg_archivecleanup —清理PostgreSQL WAL......