在我的用例中,我在前端javascript中使用了一些api。这些api端点使用除端口80之外的不同端口号。
我的应用程序文件夹结构如下所示
app/
view-events.js
view.html
有两台服务器分别在端口80和8081上运行。 domain.com/view/
api将从80返回。view-events.js
使用类似http://domain.com:8081/api/services/featured-data/
的api。
因此,当我调用http://www.domain.com/view/
时,页面会加载,但http://domain.com:8081/api/services/featured-data/
中的组件未加载。这只发生在少数网络[主要是公司网络]。因为某些公司网络中不允许使用80以外的端口。
我该怎样摆脱这个问题?
有人可以帮我吗?感谢
答案 0 :(得分:1)
执行此操作的常用方法是在端口80上运行某种反向代理(通常为Apache或nginx或HAProxy),并将请求路由到相应的api(因为只有一个服务可以在端口上运行,所以你的apis将运行例如8081,8082等...)。 (这是常见的设置,即使一个服务没有在端口80上运行,例如,您经常可以在8080上运行的Tomcat前面找到运行的Apache)。
Apache的示例.conf可以是:
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_dialog);
dialog.show();
TextView tv_message = (TextView) dialog .findViewById(R.id.textViewMessage);
tv_message.setText(message);
Button bt_yes = (Button)dialog.findViewById(R.id.buttonYes);
Button bt_no = (Button)dialog.findViewById(R.id.buttonNo);
bt_yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CheckYes();
}
});
bt_no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
以下是app和api [两台服务器]的示例nginx conf:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html/static-html-for-example.com-if-needed
<Directory /var/www/html/static-html-for-example.com-if-needed>
Options +Indexes
Order allow,deny
Allow from all
</Directory>
#LogLevel debug
ErrorLog logs/error_log
CustomLog logs/access_log common
ProxyPass /api1 http://127.0.0.1:8081/api1
ProxyPassReverse /api1 http://127.0.0.1:8081/api1
ProxyPass /api2 http://127.0.0.1:8082/api2
ProxyPassReverse /api2 http://127.0.0.1:8082/api2
# backend api even does not have to be on the same server, it just has to be reachable from Apache
ProxyPass /api3 http://10.10.101.16:18009/api3
ProxyPassReverse /api3 http://10.10.101.16:18009/api3
</VirtualHost>
答案 1 :(得分:0)
最佳解决方案是更改端口80中的api,只是为了安全起见。
如果没有,你可以通过jsonp解决这个问题。当您拨打8081 api时,您只需从网页进行跨域调用。
如果你决定使用jsonp,这里是详细解决方案。
How to make a JSONP request from Javascript without JQuery?
这很乏味,不建议你这样做。