@@ -2,30 +2,49 @@ window.lastRequestId = null;
22window . proxyConfig = { } ;
33window . urls = new Array ( 200 ) ; // for cache
44window . isString = string => ( { } . toString . call ( string ) === '[object String]' ) ;
5+ window . originRequestId = null ;
6+ window . originValue = null ;
57
68//Breaking the CORS Limitation
79window . onHeadersReceivedCallback = details => {
10+
811 if ( window . proxyDisabled == 'disabled' ) {
912 return { } ;
1013 }
1114
1215 let resHeaders = [ ] ;
13- if ( details . responseHeaders && details . responseHeaders . filter ) {
14- resHeaders = details . responseHeaders . filter ( ( responseHeader ) => {
15- return ! ~ responseHeader . name . toLowerCase ( ) . indexOf ( 'access-control-allow' ) ;
16- } )
16+ if ( details . responseHeaders && details . responseHeaders . filter ) {
17+ resHeaders = details . responseHeaders . filter ( responseHeader => {
18+ if (
19+ [
20+ 'access-control-allow-origin' ,
21+ 'access-control-allow-credentials' ,
22+ 'access-control-allow-methods'
23+ ] . indexOf ( responseHeader . name . toLowerCase ( ) ) < 0
24+ ) {
25+ return true ;
26+ }
27+ return false ;
28+ } ) ;
1729 }
18-
19- resHeaders . push ( { name : 'Access-Control-Allow-Origin' , value : details . initiator || '*' } ) ;
30+
31+ resHeaders . push ( {
32+ name : 'Access-Control-Allow-Origin' ,
33+ // when Origin has value null, CORS header must be null.
34+ value : ( window . originRequestId === details . requestId ? window . originValue : details . initiator ) || '*'
35+ } ) ;
2036 resHeaders . push ( { name : 'Access-Control-Allow-Credentials' , value : 'true' } ) ;
21- resHeaders . push ( { name : 'Access-Control-Allow-Headers' , value : 'x-requested-with,Content-Type' } ) ;
37+ resHeaders . push ( {
38+ name : 'Access-Control-Allow-Methods' ,
39+ value : '*'
40+ } ) ;
2241
2342 return {
2443 responseHeaders : resHeaders
2544 } ;
2645} ;
2746
28- window . redirectToMatchingRule = ( details ) => {
47+ window . redirectToMatchingRule = details => {
2948 const rules = window . proxyConfig . proxy ;
3049 let redirectUrl = details . url ;
3150
@@ -66,8 +85,22 @@ window.redirectToMatchingRule = (details) => {
6685 } catch ( e ) {
6786 console . error ( 'rule match error' , e ) ;
6887 }
88+
6989 window . lastRequestId = details . requestId ;
7090 return redirectUrl === details . url ? { } : { redirectUrl } ;
7191} ;
7292
93+ window . onBeforeSendHeadersCallback = function ( details ) {
94+ for ( var i = 0 ; i < details . requestHeaders . length ; ++ i ) {
95+
96+ if ( details . requestHeaders [ i ] . name === 'Origin' ) {
97+ window . originRequestId = details . requestId ;
98+ window . originValue = details . requestHeaders [ i ] . value ;
99+ break ;
100+ }
101+ }
102+
103+ return { requestHeaders : details . requestHeaders } ;
104+ }
105+
73106window . onBeforeRequestCallback = details => redirectToMatchingRule ( details ) ;
0 commit comments