我可以控制window.open
(跨浏览器)发送的 HTTP 标头吗?
如果没有,我能否以某种方式创建window.open
一个页面,然后在其弹出窗口中使用自定义标题发出我的请求?
我需要一些狡猾的黑客。
我可以控制window.open
(跨浏览器)发送的 HTTP 标头吗?
如果没有,我能否以某种方式创建window.open
一个页面,然后在其弹出窗口中使用自定义标题发出我的请求?
我需要一些狡猾的黑客。
我可以控制 window.open(跨浏览器)发送的 HTTP 标头吗?
不
如果没有,我可以以某种方式 window.open 一个页面,然后在其弹出窗口中使用自定义标题发出我的请求吗?
我需要一些狡猾的黑客...
如果您描述问题而不是询问可能的解决方案是否可行,这可能会有所帮助。
如果您控制服务器端,是否可以在查询字符串中设置标头值并像这样发送?这样,如果在标题中找不到它,您就可以从查询字符串中解析它。
只是一个想法......你要求一个狡猾的黑客:)
遗憾的是,您在执行 window.open() 时无法控制标题
很好很简单,我是如何设法打开一个带有自定义标题的文件的:
const viewFile = async (url) => {
// Change this to use your HTTP client
fetch(url, {/*YOUR CUSTOM HEADER*/} ) // FETCH BLOB FROM IT
.then((response) => response.blob())
.then((blob) => { // RETRIEVE THE BLOB AND CREATE LOCAL URL
var _url = window.URL.createObjectURL(blob);
window.open(_url, "_blank").focus(); // window.open + focus
}).catch((err) => {
console.log(err);
});
};
作为最好的 anwser 使用XMLHttpResponse
except编写的window.open
,我将abstracts-anwser 作为一个实例。
主要的Js文件是download.js
Download-JS
// var download_url = window.BASE_URL+ "/waf/p1/download_rules";
var download_url = window.BASE_URL+ "/waf/p1/download_logs_by_dt";
function download33() {
var sender_data = {"start_time":"2018-10-9", "end_time":"2018-10-17"};
var x=new XMLHttpRequest();
x.open("POST", download_url, true);
x.setRequestHeader("Content-type","application/json");
// x.setRequestHeader("Access-Control-Allow-Origin", "*");
x.setRequestHeader("Authorization", "JWT " + localStorage.token );
x.responseType = 'blob';
x.onload=function(e){download(x.response, "test211.zip", "application/zip" ); }
x.send( JSON.stringify(sender_data) ); // post-data
}
您不能在弹出窗口中使用window.open()直接添加自定义标题,但我们有两种可能的解决方案
- 编写 Ajax 方法以在单独的 HTML 文件中调用带有标题的特定 URL,并在
<i>window.open()</i>
此处使用该 HTML 作为 url是abc.html
$.ajax({
url: "ORIGIONAL_URL",
type: 'GET',
dataType: 'json',
headers: {
Authorization : 'Bearer ' + data.id_token,
AuthorizationCheck : 'AccessCode ' +data.checkSum ,
ContentType :'application/json'
},
success: function (result) {
console.log(result);
},
error: function (error) {
} });
调用html
window.open('*\abc.html')
如果请求的 URL 中未启用 CORS,则这里 CORS 策略可以阻止请求。
- 您可以请求触发服务器端程序的 URL,该程序使用自定义标头发出请求,然后返回重定向到该特定 url 的响应。
假设在 Java Servlet(/requestURL) 中我们会发出这个请求
`
String[] responseHeader= new String[2];
responseHeader[0] = "Bearer " + id_token;
responseHeader[1] = "AccessCode " + checkSum;
String url = "ORIGIONAL_URL";
URL obj = new URL(url);
HttpURLConnection urlConnection = (HttpURLConnection) obj.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.setRequestProperty("Content-Type", "application/json");
urlConnection.setRequestProperty("Accept", "application/json");
urlConnection.setRequestProperty("Authorization", responseHeader[0]);
urlConnection.setRequestProperty("AuthorizationCheck", responseHeader[1]);
int responseCode = urlConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new
InputStreamReader(urlConnection.getInputStream()));
String inputLine;
StringBuffer response1 = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response1.append(inputLine);
}
in.close();
response.sendRedirect(response1.toString());
// print result
System.out.println(response1.toString());
} else {
System.out.println("GET request not worked");
}
`
调用servlet window.open('/requestURL')