开发者社区> 问答> 正文

knative 如何配置跨域资源共享 (CORS)

在阿里的knative上部署一个function后,访问提示错误: Access to XMLHttpRequest at 'http://functions-huisheng.functions-49-production.example.com/' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

该如何配置跨域资源共享 (CORS)?

展开
收起
游客bjcjgpfeywikc 2020-11-30 22:22:56 958 0
1 条回答
写回答
取消 提交回答
  • 下一站是幸福

    nginx兼容跨域上传

    兼容情况:

    各种新版本的ie10,firefox,opera,safari,chrome以及移动版safari和android浏览器 ie9及一下版本请使用flash方式来兼容

    通过OPTIONS请求握手一次的方式实现跨根域发送请求,需要服务端配置

    nginx增加类似如下配置:

    server {
        location / {
            if ($request_method = 'OPTIONS') {
              add_header 'Access-Control-Allow-Origin' '*';
              add_header 'Access-Control-Allow-Credentials' 'true';
              add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
              add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
             # add_header 'Access-Control-Max-Age' 1728000;
              add_header 'Content-Type' 'text/plain charset=UTF-8';
              add_header 'Content-Length' 0;
              return 200;
            }
    }
    

    如果没有nginx转发,java需要如下代码:

    rundata.getResponse().addHeader("Access-Control-Allow-Origin", "*");
    rundata.getResponse().addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
    rundata.getResponse().addHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With");
    

    tomcat下CORS(跨域资源共享) 的配置

    CORS介绍 它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。 它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。 而W3C的官方文档目前还是工作草案,但是正在朝着W3C推荐的方向前进。 简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。

    Tomcat下的配置 下载cors-filter-1.7.jar,java-property-utils-1.9.jar这两个库文件,放到lib目录下。(可在 http://search.maven.org上查询并下载。)工程项目中web.xml中的配置如下:

    <filter>
        <filter-name>CORS</filter-name>
        <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
        <init-param>
         <param-name>cors.allowOrigin</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
         <param-name>cors.supportedMethods</param-name>
            <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
        </init-param>
        <init-param>
         <param-name>cors.supportedHeaders</param-name>
            <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
        </init-param>
        <init-param>
            <param-name>cors.exposedHeaders</param-name>
            <param-value>Set-Cookie</param-value>
        </init-param>
        <init-param>
            <param-name>cors.supportsCredentials</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CORS</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    2021-04-02 22:02:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载