ajax post - 我想更改 Accept-Encoding 标头值
Posted
技术标签:
【中文标题】ajax post - 我想更改 Accept-Encoding 标头值【英文标题】:ajax post - I want to change the Accept-Encoding header value 【发布时间】:2011-12-20 19:07:18 【问题描述】:我正在使用 jQuery ajax 通过 HTTP POST 调用我的 WCF 服务。响应是 GZIP 编码的,这会导致我的环境出现问题。 (见this question)。如果响应不是 GZIP 编码的,一切都很好。
所以在 Fiddler 中查看,我看到 jQuery 生成的查询具有以下标题:
Accept-Encoding: gzip,deflate,sdch
如果我通过 fiddler 将此值更改为 None
,则响应不会被压缩,这正是我想要的。我需要做的就是更改“Accept-Encoding”标头中的值。
似乎无法通过.ajax
命令更改此标头值。 (见this forum post)。
谁能告诉我有哪些选项可以更改此标头值。
这是我目前的尝试。我的headers
参数似乎被忽略了。
$telerik.$.ajaxSetup(
accepts: 'application/json, text/javascript, */*'
);
var parameters =
"playerId": args.playerId
;
var dataInJsonFormat = ' "playerId": ' + args.playerId + '';
var ajaxCallParameters =
accepts: 'application/json, text/javascript, */*',
async: true,
cache: false,
contentType: "application/json; charset=utf-8",
url: "../Services/CmsWebService.svc/SendUpdateRequestToPlayer",
headers: "Accept-Encoding" : "None" ,
type: "POST",
data: dataInJsonFormat,
dataType: 'json',
error: function (jqXHR, textStatus, errorThrown)
var errorString = 'Error thrown from ajax call: ' + textStatus + 'Error: ' + errorThrown;
var displayPanel = document.getElementById('requestStatusUpdateResults');
$telerik.$(displayPanel).text(errorString);
,
success: function (data, textStatus, jqXHR)
var displayPanel = document.getElementById('requestStatusUpdateResults');
$telerik.$(displayPanel).text(data.d);
;
$telerik.$.ajax(ajaxCallParameters);
【问题讨论】:
这个答案有帮助吗:***.com/questions/5771878/… 【参考方案1】:此值可能会在此过程的后期被覆盖。
参考:http://api.jquery.com/jQuery.ajax/ 标头(默认值:)描述 类型:PlainObject 与请求一起发送的附加标头键/值对的对象。 此设置在调用 beforeSend 函数之前设置;因此,headers 设置中的任何值都可以在 beforeSend 函数中被覆盖。
尝试实现beforeSend
,如下面的演示代码所示,标头值现在应该到达最终请求(手指交叉)。
var ajaxParams =
accepts: 'text/html',
async: true,
cache: false,
contentType: 'text/html',
url: 'http://www.google.com',
type: 'GET',
beforeSend: function (jqXHR)
// set request headers here rather than in the ajax 'headers' object
jqXHR.setRequestHeader('Accept-Encoding', 'deflate');
,
success: function (data, textStatus, jqXHR)
console.log('Yay!');
,
error: function (jqXHR, textStatus, errorThrown)
console.log('Oh no!');
,
complete: function (jqXHR, textStatus)
console.log(textStatus);
console.log(jqXHR.status);
console.log(jqXHR.responseText);
;
$.ajax(ajaxParams);
【讨论】:
【参考方案2】:这是不可能的,因为浏览器选择了正确的编码类型。 如果你这样做
var ajaxParams =
accepts: 'text/html',
async: true,
cache: false,
contentType: 'text/html',
url: 'http://www.google.com',
type: 'GET',
beforeSend: function (jqXHR)
// set request headers here rather than in the ajax 'headers' object
jqXHR.setRequestHeader('Accept-Encoding', 'deflate');
,......
你会看到这个错误:
Refused to set unsafe header "Accept-Encoding"
参考:App Engine Accept-Encoding
【讨论】:
【参考方案3】:我不确定“无”是否是一个有效的选项。我相信如果您将标头设置为接受编码“放气”而不是“无”,那应该可以解决您的问题。
例如
headers: 'Accept-Encoding' : 'deflate'
【讨论】:
感谢您的回答,但这实际上不是问题所在。问题是我无法将“Accept-Encoding”值更改为任何值,既不是“none”也不是“deflate”。 啊,我明白了。我更长的答案应该会有所帮助。以上是关于ajax post - 我想更改 Accept-Encoding 标头值的主要内容,如果未能解决你的问题,请参考以下文章
使用 ajax 通过 post-ID 更改 wordpress 中 div 内的 the_content() 内容
通过 Ajax Post 使用模型更改更新视图 - MVC3
Laravel AJAX Request Post 错误代码:使用 laravel auth 登录时会话 ID 更改后的 419