在本文中,我们将为您详细介绍无法从AjaxgetAllResponseHeaders获得自定义HTTP标头响应的相关知识,并且为您解答关于无法从该url加载脚本的疑问,此外,我们还会提供一些关于aja
在本文中,我们将为您详细介绍无法从Ajax getAllResponseHeaders获得自定义HTTP标头响应的相关知识,并且为您解答关于无法从该url加载脚本的疑问,此外,我们还会提供一些关于ajax – jqXHR.getAllResponseHeaders()不会返回所有标题、ajax – 使用JsonRest Store(dojo)自定义http标头、angularjs – transformResponse headers参数($resource)中缺少自定义响应的标头、asp.net – HttpWebRequestError:服务器提交协议冲突. Section = ResponseHeader Detail = CR必须跟随LF的有用信息。
本文目录一览:- 无法从Ajax getAllResponseHeaders获得自定义HTTP标头响应(无法从该url加载脚本)
- ajax – jqXHR.getAllResponseHeaders()不会返回所有标题
- ajax – 使用JsonRest Store(dojo)自定义http标头
- angularjs – transformResponse headers参数($resource)中缺少自定义响应的标头
- asp.net – HttpWebRequestError:服务器提交协议冲突. Section = ResponseHeader Detail = CR必须跟随LF
无法从Ajax getAllResponseHeaders获得自定义HTTP标头响应(无法从该url加载脚本)
我确实获得了响应数据,但是无法获得自定义HTTP标头数据。
是的,这是一个跨域请求。我正在用Javascript执行Ajax请求。我已经尝试过XMLHttpRequest和jQuery $
.ajax。我已经完成了服务器设置,在发送数据时已进行了以下设置:
Access-Control-Allow-Origin: *Access-Control-Allow-Methods: POST, GET
我 确实 得到了想要的响应数据。但是我无法获得完整的HTTP标头响应。
使用PHP,我在发送文本响应之前设置了以下内容。因此,我假设我应该使用getAllResponseHeaders()获得它。
header(''Expires: 0'');header(''Cache-Control: must-revalidate, post-check=0, pre-check=0'');header(''My-Own-Test: nodatahere'');
但是,这就是我得到的。
Content-Type: text/plain; charset=x-user-definedCache-Control: must-revalidate, post-check=0, pre-check=0Expires: 0
它缺少My-Own-Test
。仅供参考,这是我的Javascript:
var formData = new FormData();formData.append(''username'', ''my_username'');formData.append(''book_id'', ''test password'');var xhr = new XMLHttpRequest();xhr.open(''POST'', ''https://mydomain.com/proc.php'', true);xhr.overrideMimeType("text/plain; charset=x-user-defined");xhr.onload = function(e) { console.log(this.getAllResponseHeaders());};xhr.send(formData);
我什至用jQuery尝试过…同样的结果。
var data_to_send = { username: ''my_username'', password: ''test_password''};var ajaxObj;ajaxObj = $.ajax({ url: "https://mydomain.com/proc.php", data: data_to_send, type: "POST", beforeSend: function ( xhr ) { xhr.overrideMimeType("text/plain; charset=x-user-defined"); }}).done(function ( data ) { console.log( ajaxObj.getAllResponseHeaders() );});
仍然…没有运气。
但是,如果我去通过萤火虫或Chrome的开发者工具,我可以看到,这些工具做回完整的HTTP头信息,包括Content-Length
,Content-Encoding
,Vary
,X-Powered-By
,Set-Cookie
,Server
,当然My-Own-Test
。
答案1
小编典典我要感谢jbl向我指出正确的问题。我现在知道了…
好吧,答案。如果您想设置自己的HTTP标头信息,然后使用跨域Ajax或类似的方法来获取它,则在发送响应文本之前,应在服务器端设置一些额外的HTTP标头。
header(''Access-Control-Allow-Origin: *'');header("Access-Control-Allow-Methods: POST, GET"); header(''Custom-Header: Own-Data'');header(''Access-Control-Expose-Headers: Custom-Header'');
上面的示例使用PHP。但是,请使用您自己的语言来设置它们。
当我问这个问题时,除了,我都拥有了其他所有内容Access-Control-Expose-Headers
。放入后,我的JavascriptAjax可以读取HTTP标头Custom-Header的内容。
ajax – jqXHR.getAllResponseHeaders()不会返回所有标题
Connection: keep-alive Content-Length: 64 Content-Type: application/json X-My-CustomHeader: whatever
getAllResponseHeaders()仅返回:
Content-Type: application/json
我究竟做错了什么?
例
var request = { 'url': 'http://api.someExternalDomain.com/resource/','type': someMethod,'success': function(data,textStatus,jqXHR) { console.log(jqXHR.getAllResponseHeaders()); } }; $.ajax(request);
At present,due to a bug in Firefox where .getAllResponseHeaders()
returns the empty string although .getResponseHeader(‘Content-Type’)
returns a non-empty string,automatically decoding JSON CORS responses
in Firefox with jQuery is not supported.
http://api.jquery.com/jQuery.ajax/
ajax – 使用JsonRest Store(dojo)自定义http标头
有一个相关的主题,但没有一个很好的解决方案:
Dojo Data grid with custom HTTP headers
我已经在’dojo.store.JsonRest’中看到了包含构造函数的JsonRest实现,如果我们能够做到或不做(我不这么认为),这一点并不明显.正在使用的JsonRest存储示例:
var store = new JsonRestStore({target: "/Table/" });
解决方法
A.子类dojo.store.JsonRest:
var MyJsonRest = declare(JsonRest,{ get: function(id,options) { return this.inherited( arguments,[id,lang.mixin(this.defaultGetHeaders,options)] ); } });
所以你重写get方法调用超类’get,但第二个参数选项(即.headers)现在也包含this.defaultGetHeaders的属性.
B.在构造函数中定义defaultGetHeaders:
var myJsonRest = MyJsonRest({ target: "/echo/json/",defaultGetHeaders: { userId: "xyz",requestedBy: "abc",requestedFrom: "123" } });
C.调用myJsonRest.get()方法,您也可以覆盖默认标头:
myJsonRest.get("someId",{ requestedFrom: "321"}).then(function(result) { console.log(result); });
D.检查请求标头:
angularjs – transformResponse headers参数($resource)中缺少自定义响应的标头
transformResponse
配置函数中,headersGetter函数参数中缺少大多数头.
我该如何解决?
API的响应标头
HTTP/1.1 201 Created Server: Apache-Coyote/1.1 x-content-type-options: nosniff x-xss-protection: 1; mode=block Cache-Control: no-cache,no-store,max-age=0,must-revalidate Pragma: no-cache Expires: 0 x-frame-options: DENY Access-Control-Allow-Origin: http://localhost:9000 access-control-allow-methods: POST,PUT,GET,DELETE,OPTIONS access-control-allow-headers: Content-Type Access-Control-Allow-Credentials: true Content-disposition: attachment; filename="testCall.pcap" FileName: testCall.pcap Content-Type: application/pcap
transformResponse的标题
Pragma: no-cache Content-Type: application/pcap Cache-Control: no-cache,must-revalidate Expires: 0
app.factory("MyService",function ($resource,ENV,_) { return { testCall: $resource(ENV.apiEndpoint + "/test-call",{},{ launch: { method: 'POST',isArray: false,headers:{'Accept':'application/octet-stream'},responseType: 'blob',cache: false,transformResponse: function(data,headers){ var filename = headers('Content-disposition'); //headers('FileName') var contentType = headers('Content-Type'); var file = new Blob([data],{ type: contentType }); var fileURL = URL.createObjectURL(file); var a = document.createElement('a'); a.href = fileURL; a.target = '_blank'; a.download = filename; document.body.appendChild(a); a.click(); } } }),searchOptions: $resource(ENV.apiEndpoint + "//search-options") }; });
例如要使用CORS调用读取名为“X-MY-HEADER1”和“X-MY-HEADER2”的自定义响应标头,请添加标头
访问控制 – 暴露 – 标题:“X-MY-HEADER1,X-MY-HEADER2”
请参阅@nancoder在https://stackoverflow.com/a/23726352/4684232的答案
asp.net – HttpWebRequestError:服务器提交协议冲突. Section = ResponseHeader Detail = CR必须跟随LF
这个属性有’UNSAFE’的字,所以我太担心这个,我不能添加这是在我的网站配置.有什么其他选项来阅读我的scrape URL的回复,请让我知道如何可能没有“< httpWebRequest useUnsafeHeaderParsing =”true“/>”
提前致谢,
Laxmilal Menaria
解决方法
因此,如您在Google中发现的那样,解决问题的方法是应用以下配置更改:
<configuration> <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net> </configuration>
关于无法从Ajax getAllResponseHeaders获得自定义HTTP标头响应和无法从该url加载脚本的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于ajax – jqXHR.getAllResponseHeaders()不会返回所有标题、ajax – 使用JsonRest Store(dojo)自定义http标头、angularjs – transformResponse headers参数($resource)中缺少自定义响应的标头、asp.net – HttpWebRequestError:服务器提交协议冲突. Section = ResponseHeader Detail = CR必须跟随LF等相关知识的信息别忘了在本站进行查找喔。
本文标签: