jsonp

HTTP访问控制(CORS)踩坑小记

﹥>﹥吖頭↗ 提交于 2021-02-20 11:53:02
前几天在帮后端排查一个cors的问题的时候发现的一些小坑特此记录 ** cors的本质是出于安全原因,浏览器限制从脚本内发起的跨源HTTP请求。 例如,XMLHttpRequest和Fetch API遵循同源策略。 这意味着使用这些API的Web应用程序只能从加载应用程序的同一个域请求HTTP资源,除非使用CORS头文件。 跨域并非一定是浏览器限制了跨站请求,也有可能是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是 CSRF 跨站攻击原理,请求是发送到了后端服务器无论是否跨域!注意:有些浏览器不允许从 HTTPS 的域跨域访问 HTTP,比如 Chrome 和 Firefox,这些浏览器在请求还未发出的时候就会拦截请求。 ** 本case场景描述如下: 用户在a.com域名下跨域访问b.com域名下的api接口,使用了XMLHttpRequest的跨域头请求。域名b.com也允许了可以跨域 Access-Control-Allow-Origin 但是很奇怪在访问b.com的接口时有些api能访问成功,有些api访问失败。排查发现访问失败的api都是需要用户的登录态的。但是用户已经在b.com登录过了。把XMLHttpRequest请求换成jsonp请求则都可以请求成功(这好像是废话)。。。由此推测XMLHttpRequest 添加cors头的时候没有把b.com的

前端跨域之nginx配置跨域问题

无人久伴 提交于 2021-02-20 05:42:06
一、前端跨域问题    前端跨域出现在前端得同源策略上,只有满足:协议、域名、端口相同得情况下才是同源,即可以调用对方资源,否则,浏览器端,F12的console会报错:Access_Control_Allow_Origin的问题; 前端地址:http://www.baidu.com 是否跨域 原因 http://www.baidu.com/home 否 域名、协议、端口都相同 https://www.baidu.com/home 是 协议不同 http://www.jd.com/ 是 域名不同 https://www.jd.com 是 协议、域名都不同 二、跨域解决的方法   1、后端授权:CORS;   2、jsonp:利用html标签的中src等不受同源策略影响的漏洞   3、nginx代理配置; 三 、利用nginx配置,解决前端跨域问题    //打开nginx的配置文件 vim nginx.conf //在指定的代理位置进行设置如下代码 location ^/ home { add_headeer ‘Access_Control_Allow_Origin’ ’ *.huawei.com‘ // 控制的域名范围 add_header ' Access_Control_Allow_Credentials ' ' true ' add_headeer ‘Access

php跨域问题记录

岁酱吖の 提交于 2021-02-19 10:49:02
记录跨域问题 一、问题 在控制层加了如下代码: header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN'] ); header('Access-Control-Allow-Credentials: true'); header('Access-Control-Allow-Headers: X-Requested-With,Content-Type,Accept'); 打开chrome的network里的response,没有这几个值~ 但是同样的代码我在本地另一个项目里是OK的,项目环境是Nginx做了层代理,实际用的是PHP当Apache模块的方式,就开始怀疑: 输出时框架限制了 Nginx/Apache限制了header(ps:我们项目是用Nginx当了反向代理,PHP当Apache模块) 灵魂拷问:PHP输出时这些header是怎么返回的? 二、解决 1.框架 用xdebug跟了下,没看到框架里有任何限制不能更改header 2.web服务器 看到response每次返回的都一样,以为是运维控制了返回的选项,不能随意添加,和运维同事沟通了下,发现确实是不能随意添加header头,窃喜以为找到了原因。然而另一个同事说加的跨域允许是OK的;Nginx的conf里加的proxy

Jquery 跨域请求JSON数据问题

余生颓废 提交于 2021-02-18 02:27:11
制作网站时,我们有时候为了方便快捷会调用别人写好的API接口,或者是调用一些免费的API接口获得JSON数据。比如天气,农历,网站备案信息查询等。 但是,这些API接口都是别人自己服务器上的,我们要调用就得涉及到一个跨越问题。在我们请求的时候会出现错误。 下面是我AJAX请求获得的数据错误信息: "Uncaught SyntaxError: Unexpected token :" 这个是数据也请求到了,但是还是报错,那是因为 请求到数据是一个纯Json格式的话,是不能用Jsonp方式调用的, 支持Jsonp方式的url返回的一定是js脚本,一般是一句函数调用, 请注意第二种方法中报的错是callback=,=号后面的就是你得到的, callback是客户端页面定义的函数名,JSONP方式会在返回的 Javascript代码里面调用这个函数,JSON数据是当做参数传入方法的 而不是直接返回一个json。 这个地址不支持jsonp,请求来的数据是json,浏览器要把当做Javascript 来解析,遇到 ":" 就报错了。 如果这个地址支持JSONP,应该返回Javascript代码,在代码里面调用 callback函数才对。 下面以获取API接口的服务器时间为例: < html > < head > < title > 获取API接口中的时间跨域获得 </ title > <

谷歌浏览器解决ajax跨域问题

血红的双手。 提交于 2021-02-13 09:39:49
在用mui和H5+做混合开发,会利用HBuildx去真机调试,可真机调试总有问题所在,懂得人自然懂,而我们直接打开页面显示的只有一个静态的页面,是获取不到数据的在这里我想说的不是代码中利用jsonp,反向代理等去解决跨域问题,而是利用我们做常用的调试工具谷歌浏览器去解决ajax跨域问题。    1.找到谷歌浏览器的快捷图标,右击鼠标选择属性,    2.打开属性窗口后,选择快捷方式选项卡,    3.在目标路径的后面添加【 --disable -web -security --user -data -dir =C: \chromedata 】,注意chrome.exe与--disable之间有一个空格    4、点击应用,然后点击确定关闭窗口。如下图所示: 然后我们打开设置好了的浏览器查看一下,如果出现了以下显示则设置成功,然后可以调试ajax请求了。如下图: 注意:你需要新建一个快捷方式,因为当你设置完成后,所有的插件记录都会清空。 来源: oschina 链接: https://my.oschina.net/u/4347039/blog/3346460

Python爬取王者荣耀全套皮肤

人走茶凉 提交于 2021-02-11 20:50:23
一、分析需要爬取的网站 ①、打开官方王者荣耀壁纸网站 网站地址:https://pvp.qq.com/web201605/wallpaper.shtml ②、快捷键F12,调出控制台进行抓包 ③、找到正确的链接并分析 ④、查看返回数据格式 ⑤、解析url链接 ⑥、查看url内容是否是所需图片,发现其实是缩略图 ⑦、那就去分析网站,随便点开一张壁纸,查看指定格式的链接 ⑧、找到目标地址 ⑨、分析目标链接和缩略图的链接区别 缩略图:http://shp.qpic.cn/ishow/2735090714/1599460171_84828260_8311_sProdImgNo_6.jpg/200 目标图:http://shp.qpic.cn/ishow/2735090714/1599460171_84828260_8311_sProdImgNo_6.jpg/0 可以知道,将指定格式的缩略图地址后面200替换成0就是目标真实图片 二、爬虫代码 ①、至此,爬虫分析完成,爬虫完整代码如下 #!/usr/bin/env python # encoding: utf-8 ''' #------------------------------------------------------------------- # CONFIDENTIAL --- CUSTOM STUDIOS #--------

用nodejs搭建代理服务器

邮差的信 提交于 2021-02-11 20:34:35
题图 From 极客时间 From Clm 前端开发者在工作中常常遇到跨域的问题,一般我们遇到跨域问题主要使用以下办法来解决: 1、jsonp 2、cors 3、配置代理服务器。 jsonp不是很灵活,只能发送get请求,不能发送psot请求,而cors虽然可以支持多种请求格式,但是如果请求携带cookie的话,还需要服务端和客户端分别配置一下,个人感觉也很麻烦。 相对于前两种,使用代理服务器解决跨域问题就简单了好多。 浏览器由于同源策略的原因,不同域名之间发送ajax请求,响应的数据不会被浏览器加载。而服务器向服务器发送请求则没有同源策略的限制。 下图便是代理服务器的原理了: 代理服务器只是起一个中转作用,配置代理服务器的方法有很多种,比如利用apache、nginx、tomcat等等,今天给大家介绍的是用nodejs配置代理服务器,用nodejs配置代理服务器,我们需要借助两个npm包,一个是web开发框架 express ,一个是express中间件 http-proxy-middleware 。 首先第一步我们先用express搭建两个服务器,一个静态资源服务器端口号为3000,一个接口服务器端口号为5000,静态资源服务器代码如下: var express = require ( 'express' ); var app = express(); app.use

Getting JSON data using JSONP from Flickr api

我与影子孤独终老i 提交于 2021-02-11 13:50:28
问题 I'm facing a new issue - Jsonp. I've read about and watched videos but couldn't get to the solution to fix my problem. First I'm using Angular 6. I'm trying to get a json response from an api which uses JSONP, but when I try to use it in my app I got CORS error. So I want to fix it without having to install chrome's CORS plugin. The response on the browser is like this: jsonFlickrFeed({ "title": "Uploads from everyone", "link": "https:\/\/www.flickr.com\/photos\/", "description": "",

PHP 面试知识点整理归纳

我的未来我决定 提交于 2021-02-11 13:10:04
这里是我精选出来的内容,原文地址: https://blog.csdn.net/l269798518/article/details/82428601 isset 和 empty isset 用来判断变量是否存在; empty 用来判断变量是否有值 。 $a 不存在和 $a = null 两种情况在 isset 看来为 true ,其余为 false (包括 $a = ‘’ ; ) $a = null, 0, false, ‘ ’ , 或不存在时在 empty 看来为 true ,其余为 false 。 private 、 protected 、 public 、 final 区别 public: 权限是最大的,可以内部调用,实例调用等。 protected: 受保护类型,用于本类和继承此类的子类调用。 private: 私有类型,只有在本类中使用。 static :静态资源,可以被子类继承。 abstract :修饰抽象方法,没有方法体,由继承该类的子类来实现。 final :表示该变量、该方法已经 “ 完成 ” ,不可被覆盖。修饰类时该类不能被继承。 (因此 final 和 abstract 不能同时出现) 抽象类、接口 接口通常是为了抽象一种行为,接口是一种规范,在设计上的意义是为了功能模块间的解耦,方便后面的功能扩展、维护,接口不能有具体的方法 ; 抽象类可以有具体的方法

跨域请求的三种解决办法

回眸只為那壹抹淺笑 提交于 2021-02-07 22:56:37
第一种:jsonp的方式 <? php header( ' Content-type: application/json ' ); // 获取回调函数名 $jsoncallback = $_GET [ ' jsoncallback ' ]; // json数据 $json_data = ' {"data":[{"did":"29","deptName":"\u8f6f\u4ef6\u90e8"}, {"did":"30","deptName":"\u8f6f\u4ef6\u90e8"}, {"did":"31","deptName":"\u6d4b\u8bd5\u90e8"}, {"did":"32","deptName":"\u786c\u4ef6\u90e8"}, {"did":"33","deptName":"\u54c1\u8d28\u90e8"}, {"did":"34","deptName":"\u786c\u4ef6\u90e8"}, {"did":"35","deptName":"\u5236\u9020\u4e2d\u5fc3"}, {"did":"36","deptName":"\u91c7\u8d2d\u90e8"}, {"did":"37","deptName":"\u751f\u4ea7\u90e8"}, {"did":"38","deptName":"