【问题标题】:How to send headers while using jsonp proxy?使用 jsonp 代理时如何发送标头?
【发布时间】:2012-11-20 19:28:00
【问题描述】:

我正在尝试从我的应用程序的 Web 服务获取数据以加载列表并使用拉刷新和 ListPaging 插件在滚动时加载更多内容。我使用 flickr API 进行了尝试,它工作正常,但是当我尝试访问我们自己的服务时出现问题,因为他们期望带有 Base64 编码数据的“授权”标头和“接受”标头来决定响应的格式。

这就是我定义我的商店的方式:

Ext.define('myshop.store.CatalogListStore',{
    extend:'Ext.data.Store',
    requires: [
        'myshop.model.CatalogListItem'
    ],
    config:{
        model:'myshop.model.CatalogListItem',
        autoLoad :true,
        proxy: {
            type: 'jsonp',
            url: 'http://192.168.23.89:7003/xxx-service/test/catalog/list',
            useDefaultXhrHeader : false,
            withCredentials:true,
            method : 'GET',
            headers: {
                'Accept': 'application/json',
                'Authorization': 'Basic YX5iOmM='
            },
            extraParams: {
                format : 'json',
                pagesize : 10
            },
            reader: {
                type: 'json',
                rootProperty: 'categories.data'
            }
        }
    }
}

这是我在 Chrome 的网络控制台中看到的:

Request URL:http://192.168.23.89:7003/xxx-service/test/catalog/list?_dc=1354529083930&format=json&pagesize=10&page=1&start=0&limit=25&callback=Ext.data.JsonP.callback2
Request Method:GET
Status Code:403 Forbidden
**Request Headers**
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:192.168.23.89:7003
Referer:http://localhost/myshop/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.11 (KHTML, like Gecko) Ubuntu/12.04 Chromium/20.0.1132.47 Chrome/20.0.1132.47 Safari/536.11
**Query String Parameters**
_dc:1354529083930
format:json
pagesize:10
page:1
start:0
limit:25
callback:Ext.data.JsonP.callback2
Response Headersview source
Content-Length:0
Content-Type:text/xml
Date:Mon, 03 Dec 2012 10:04:40 GMT
Server:Apache-Coyote/1.1

如果我使用 Poster 访问这些带有 Authorization 标头的服务,我可以看到响应,但由于标头未在请求中传递,我将获得“403 禁止”状态。

如果我使用这样的标题,它会起作用:

Ext.Ajax.request({
        url: 'resources/data/templates.json',
        headers: {
            'Accept': 'application/json',
            'Authorization': 'Basic T3JkZXJSZWxlYXNlUmVmcmVzaGVyfk9yZGVyUmVsZWFzZVJlZnJlc2hlcjpPcmRlclJlbGVhc2VSZWZyZXNoZXI='
        },
        success: function(rsp){
        }
});

但我不能这样做,因为我想使用 listPaging 插件。

【问题讨论】:

  • headers 显然仅适用于 Ajax 请求和代理,但不适用于 JSONP。

标签: http-headers sencha-touch sencha-touch-2 jsonp


【解决方案1】:

JSONP Works 购买在页面标题中插入请求 URL,如果您需要对请求进行身份验证,则必须将其放入 URL 中,例如:

'http://192.168.23.89:7003/xxx-service/test/catalog/list?auth=1223456'

您确定需要使用 JSONP 吗?

查看answer了解更多信息

【讨论】:

  • 我也有同样的想法,但我不想在 url 中发送身份验证凭据。除了身份验证之外,我还想使用 cookie、“accept”和“content-type”标头发送一些上下文信息,以告知响应(xml/json)应该是什么,但不确定这是否可行。
  • > 你确定你需要使用 JSONP 吗?我的服务将在云中的某些服务器上运行,而我的应用程序将在手机或其他可能/可能不在同一云和域中的服务器上运行,那么除了 jsonp 之外我还有哪些选择?
  • 手机安全模型与浏览器的跨域策略不同,尤其是如果 html/JavaScript 捆绑在“本机”构建中,那么您也应该检查一下。
  • 能否详细说明区别?你的意思是说,如果我要将它打包为 phonegap 构建,那么我可以使用 JSON 代理而不是 JSONP?在开发过程中如何测试它,因为我使用笔记本电脑的浏览器(它提供了很多调试工具),一旦 phonegap 构建完成,我也必须使用手机进行调试。
  • 好的,这里是关于 JSON 代理在移动设备上工作但在桌面上不工作的线程 stackoverflow.com/questions/7440725/…。所以这意味着现在我必须弄清楚如何使用 JSON 代理在我的桌面上进行开发。
猜你喜欢
  • 2011-02-11
  • 2017-02-07
  • 1970-01-01
  • 1970-01-01
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2019-05-23
相关资源
最近更新 更多