从Chrome版本37开始,即使所有CORS标头都设置正确,如果服务器启用了身份验证,预先发布的跨域请求也会失败(再次).这是localhost
(我的开发PC).
你们中的一些人可能知道Chrome/CORS/auth错误的历史,特别是涉及HTTPS时.我的问题并没有涉及HTTPS:我有一个AngularJS应用从供应localhost:8383
交谈一个Java(码头)的服务器上localhost:8081
有HTTP基本身份验证激活.GET工作正常,但POST失败了401:
XMLHttpRequest cannot load http://localhost:8081/cellnostics/rest/patient.
Invalid HTTP status code 401
Run Code Online (Sandbox Code Playgroud)
我之前编写了一个自定义(Java)CORS过滤器,它设置了正确的CORS头,直到第36版.它在v37和最新的v38(38.0.2125.101 m)中失败.它仍然可以按预期使用Internet Explorer 11(11.0.9600)和Opera 12.17(build 1863).
GET请求成功,但POST失败.由于内容类型:"application/json",Chrome看起来像是在推出我的所有POST,并且它是预先发布的OPTIONS请求失败.
在Angular应用程序中,我明确设置了以下请求标头.AFAIK此设置withCredentials
应确保即使对于OPTIONS请求也会发送凭据:
//Enable cross domain calls
$httpProvider.defaults.useXDomain = true;
//Send all requests, even OPTIONS, with credentials
$httpProvider.defaults.withCredentials = true;
Run Code Online (Sandbox Code Playgroud)
以下是请求/响应.您可以看到Access-Control-Allow-Methods
标题中启用了OPTIONS方法.您还可以看到Javascript应用程序的来源已明确启用:Access-Control-Allow-Origin: http://localhost:8383
.
Remote Address:[::1]:8081
Request URL:http://localhost:8081/cellnostics/rest/medicaltest
Request Method:OPTIONS
Status Code:401 Full authentication is required to access this resource
Request headers:
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,af;q=0.6
Access-Control-Request-Headers:accept, content-type …
Run Code Online (Sandbox Code Playgroud) 这是我对"Maven build中的多个工件"问题的变化:
我正从Ant搬到Maven.我的应用程序是一个打包为EAR的EJB服务器,但它也公开了一个客户端JAR供其他客户端应用程序使用.这个jar包含EJB接口,facade类和一些帮助器.
我知道Maven的方法是每个项目有一个工件(POM); 但是,两个工件(服务器EAR和客户端JAR)都需要从相同的源树构建 - 服务器和客户端共享,例如EJB和"home"接口.
我怎么在Maven这样做?
我有一个包含两个POM的项目,比如server-pom.xml和client-pom.xml吗?我以为我也可以有一个父POM(pom.xml)可以用来构建客户端和服务器一次犯规?但是,生命周期在'包'阶段之后出现分歧,因为服务器必须经过汇编(tar/gzip),而客户端在'package'之后完成,并且可以简单地安装到存储库中.
有关最佳方法的任何建议/经验吗?
这不是一个大问题,但作为一种风格问题,我想知道指示可选函数参数的最佳方法......
在类型提示之前,参数是这样的b
:
def my_func(a, b = None)
Run Code Online (Sandbox Code Playgroud)
在 Python 3.10 之前,使用类型提示:
def my_func(a, b: Optional[str])
Run Code Online (Sandbox Code Playgroud)
使用 Python 3.10 可爱的管道类型表示法(参见PEP 604):
def my_func(a, b: str | None)
Run Code Online (Sandbox Code Playgroud)
后者似乎是三个选项中显而易见的选择,但我想知道这是否完全消除了指定默认 值的需要None
,默认值是:
def my_func(a, b: str | None = None)
Run Code Online (Sandbox Code Playgroud)
编辑:感谢@deceze和@jonrsharpe指出,def my_func(a, b: str | None)
仍然需要您将值传递给b
:如果您想要的话,您将明确必须传递None
。
因此,确保其b
可选(即调用者根本不必传递值)的最简洁的方法是:
def my_func(a, b: str = None)
Run Code Online (Sandbox Code Playgroud)
从风格上来说,合并显式类型(def my_func(a, b: str | None = None)
即显式可选类型加上默认None …