最近我一直在用我的Phonegap应用程序调试一些与CORS相关的问题,并将Tomcat服务器作为后端。
我发现Client(WebView)在Origin Header中发送的值不正确:。值为" file:\" 。
为了排除Phonegap,我从零开始创建了一个Android应用程序并尝试了相同的操作。结果相似。见标题
Request URL:http://medistreet.in/auth2
Request Method:POST
Status Code:403 Forbidden
Request Headers
POST http://medistreet.in/auth2 HTTP/1.1
Accept: application/json, text/plain, */*
**Origin: file://**
User-Agent: Mozilla/5.0 (Linux; Android 4.4.2; XT1033 Build/KXB20.25-1.31) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36
Content-Type: application/json;charset=UTF-8
Android代码是:
public class MainActivity extends Activity {
private WebView webView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.webview);
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
WebView.setWebContentsDebuggingEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("file:///android_asset/www/index.html");
WebSettings settings=webView.getSettings();
settings.setAllowFileAccessFromFileURLs(true);
}
}
任何想法??
答案 0 :(得分:0)
发送Origin标头时,KitKat WebView将发送URL的主机部分。主机的概念并不真正适用于file:// scheme,这就是你获得虚假价值的原因。
我认为前KK WebView使用KURL代替GURL进行URL处理是不同的。 GURL通常比KURL更严格(也更安全),这是两个WebView版本之间不兼容的原因。
loadUrl
方法需要额外的标题,但KK WebView不允许您使用该API覆盖Origin标头。
要解决此问题,您可以尝试将loadDataWithBaseURL
与medistreet.in一起用作基本网址,或者覆盖WebViewClient.shouldOverrideUrlLoading
,以使本地资源看起来像来自服务器。