简体   繁体   English

Angular2 IE11缓存问题

[英]Angular2 IE11 caching issue

I have an caching problem every time I do simple CORS get request on IE. 每当我在IE上执行简单的CORS获取请求时,都会遇到缓存问题。 This is not happening on Chrome. 在Chrome上不会发生这种情况。 So i had to add options on get request: 所以我不得不在获取请求时添加选项:

            let options = new RequestOptions({
                url: this.elementsUrl,
                method: RequestMethod.Get,
                headers: this.getHeaders
            });
            return this.http.get(this.elementsUrl, options)
                .map(response => response.json())
                .catch(error => {
                        console.error('Error', error);
                        return Promise.reject(error.message || error);
                    }
                );

And I set headers to disable cache. 我设置头以禁用缓存。

    private _getHeaders = new Headers({
    'If-Modified-Since': 'Mon, 26 Jul 1997 05:00:00 GMT',
    'Cache-Control': 'no-cache',
    'Pragma': 'no-cache'
});

And now I am getting info required CORS preflight and XMLHttpRequest: Network Error 0x80070005, Access is denied. 现在,我正在获取所需的信息:CORS预检和XMLHttpRequest:网络错误0x80070005,访问被拒绝。 Can I avoid triggering preflight options? 我可以避免触发飞行前选项吗? Am I setting options correctly? 我是否正确设置选项?

It's only related to IE that do caching of GET request. 它仅与IE缓存GET请求有关。 CORS is working OK on chrome. CORS在chrome上运行正常。 On server side is set: Access-Control-Allow-Origin: * 在服务器端设置:Access-Control-Allow-Origin:*

On server side in case of JAVA I have created a filter as below 在服务器端,如果是JAVA,我创建了一个过滤器,如下所示

@PreMatching
@Provider
public class GwsApiCorsFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
            throws IOException {
        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, PATCH");
        responseContext.getHeaders().add("Access-Control-Allow-Headers", getAllowedHeaders());
        responseContext.getHeaders().add("Access-Control-Expose-Headers", getAllowedHeaders());

    }

    private String getAllowedHeaders() {
        StringBuilder sb = new StringBuilder();
        sb.append(HttpHeaders.ACCEPT).append(", ")
        .append(HttpHeaders.CONTENT_TYPE).append(", ")
        .append(HttpHeaders.AUTHORIZATION).append(", ")
        .append(HEADER_IF_MODIFIED_SINCE).append(", ")
        .append(HEADER_CACHE_CONTROL).append(", ")
        .append(HEADER_PRAGMA).append(", ")
        .append(HEADER_CONTENT_DISPOSITION).append(", ");
        return sb.toString();
    }
}

And on client in angular implement http interceptor using following tutorial 并在客户端使用以下教程在角度工具http拦截器中

https://scotch.io/@kashyapmukkamala/using-http-interceptor-with-angular2 https://scotch.io/@kashyapmukkamala/using-http-interceptor-with-angular2

Add all the headers in request in the private getRequestOptionArgs(options?: RequestOptionsArgs) : RequestOptionsArgs {} function 将请求中的所有标头添加到私有getRequestOptionArgs(options?: RequestOptionsArgs) : RequestOptionsArgs {}函数

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM