小编dgv*_*vid的帖子

如何禁止浏览器的身份验证对话框?

我的Web应用程序有一个登录页面,通过AJAX调用提交身份验证凭据.如果用户输入正确的用户名和密码,一切都很好,但如果没有,则会发生以下情况:

  1. Web服务器确定虽然请求包含格式良好的Authorization标头,但标头中的凭据无法成功进行身份验证.
  2. Web服务器返回401状态代码,并包含一个或多个WWW-Authenticate标头,列出支持的身份验证类型.
  3. 浏览器检测到对XMLHttpRequest对象的调用的响应是401,响应包括WWW-Authenticate头.然后它会弹出一个身份验证对话框,再次询问用户名和密码.

这一切都很好,直到第3步.我不希望弹出对话框,我想要在我的AJAX回调函数中处理401响应.(例如,通过在登录页面上显示错误消息.)我希望用户重新输入他们的用户名和密码,当然,但我希望他们看到我友好,安心的登录表单,而不是浏览器的丑陋,默认验证对话框.

顺便说一句,我无法控制服务器,所以让它返回自定义状态代码(即401以外的东西)不是一个选项.

有什么办法可以抑制身份验证对话框吗?特别是,我可以在Firefox 2或更高版本中禁止"需要验证"对话框吗?有没有办法在IE 6及更高版本中禁止连接到[主机]对话框?


编辑
作者的其他信息(9月18日):
我应该补充说,浏览器的身份验证对话框弹出的真正问题是它给用户提供的信息不足.

用户刚刚通过登录页面上的表单输入了用户名和密码,他认为他已经正确输入了这些用户名和密码,并且他点击了提交按钮或按回车键.他的期望是,他将被带到下一页,或者可能被告知他输入的信息不正确,应该再试一次.但是,他会出现一个意外的对话框.

对话是没有的,他只是一个事实确认没有输入用户名和密码.它没有明确说明存在问题,他应该再试一次.相反,该对话框向用户显示诸如"网站说:' [领域] '之类的神秘信息." 凡[境界]是,只有一个程序员可以爱很短的领域名称.

Web broswer设计师注意到:如果对话框本身更加用户友好,没有人会问如何抑制身份验证对话框.我正在登录表单的全部原因是我们的产品管理团队正确地认为浏览器的身份验证对话框太糟糕了.

javascript ajax http-authentication

79
推荐指数
4
解决办法
5万
查看次数

如何解析SSL证书服务器名称/我可以使用keytool添加备用名称吗?

为清楚起见,这些可能被表述为单独的问题,但它们都与同一问题有关.

SSL证书服务器名称是如何解析的?

为什么浏览器似乎使用证书的CN字段,但Java的机制似乎只关注"主题替代名称"?

是否可以使用keytool为SSL证书添加备用名称?如果没有,是使用openSSL而不是一个好的选择?

只是一点背景:我需要让主服务器使用HTTPS与多个服务器通信.显然,我们不想为每个服务器购买SSL证书(可能有很多),所以我想使用自签名证书(我一直使用keytool来生成它们).在操作系统中添加证书后,浏览器(IE和Chrome)很乐意接受该连接为可信任的.但是,即使将证书添加到Java的cacerts之后,Java仍然不会将该连接接受为受信任,并抛出以下异常:

引起:java.security.cert.CertificateException:在sun.security.util.HostnameChecker.match(HostnameChecker.java:75)的sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142)中没有主题备用名称. at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkIdentity(X509T rustManagerImpl.java:264)at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:250)at com. sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Clien tHandshaker.java:1185)... 14更多

我发现我可以让Java信任实现我自己的HostNameVerifier的证书,我从这里复制了:com.sun.jbi.internal.security.https.DefaultHostnameVerifier只是为了测试(顺便说一句,主机名作为参数传递给HostnameVerifier是正确的,所以我认为应该已经接受了).

我一直使用证书字段CN作为主机名(通常是IP地址).

任何人都可以告诉我,如果我做错了什么,并指出我正确的方向?

java security ssl

72
推荐指数
1
解决办法
12万
查看次数

C有字符串类型吗?

我最近开始用C编程,来自Java和Python.现在,在我的书中,我注意到要制作一个"Hello World"程序,语法是这样的:

char message[10]
strcpy(message, "Hello, world!")
printf("%s\n", message);
Run Code Online (Sandbox Code Playgroud)

现在,这个例子使用了一个char数组,我想知道 - 字符串发生了什么?为什么我不能简单地使用其中一个?也许有不同的方法来做到这一点?

c string printf char strcpy

43
推荐指数
5
解决办法
11万
查看次数

如何减少Bitbucket上的git repo大小?

我的问题总结:在我将两百个字节添加到两个现有文件之后,我在Bitbucket上的一个私有存储库的大小突然增加了一倍多.回购现在超过2GB,这使得Bitbucket将其置于只读模式.因为它处于只读模式,所以我无法推送会降低repo大小的更改.(Catch 22.)

详细信息:我公司最近开始在Bitbucket上托管git存储库.我负责的其中一个存储库大小约为973MB,这令人不安地接近1GB的软限制.为了减少repo大小,我按照Bitbucket文档文章中的说明将一个存储库分成两部分,并将大约450MB的文档和在线帮助文​​件移动到他们自己的私人仓库中.然后,我按照Bitbucket文档文章中的说明减少存储库大小维护一个git存储库,具体来说:

git count-objects -vH 给我看了一个大约973MB的大小包.

我跑去git filter-branch --index-filter 'git rm --cached --ignore-unmatch doc' HEAD删除doc目录(这是我移动到新repo的内容).

我运行以下命令使参考和修剪过期:

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --prune=now
Run Code Online (Sandbox Code Playgroud)

git count-objects -vH然后给我看了一个881.1 MiB的尺寸包,du -sh .git/objects返回882M.我感到失望的是,移动450MB以上的回购大小减少了不到90MB,但是仍然把改变推到了Bitbucket:

git push --all --force
git push --tags --force
Run Code Online (Sandbox Code Playgroud)

repo的Bitbucket副本的设置页面继续显示973MB的大小.我退出了,刷新了浏览器,重新登录,但没有帮助 - 回购大小保持在973MB.

今天早上(上述更改后三天),我对两个现有文件进行了一些小的补充,这些文件将文件大小增加了不到1KB,添加并提交给我的本地仓库,然后将更改推送到到位桶.几分钟后,我看了一下repb的Bitbucket页面,看到一条红色警告标语告诉我"这个repo超过了2 GB的限制,并且处于只读模式." 设置页面现在说repo的大小为2.3 GB.

根据Bitbucket的说法,在两个文件中添加几百个字节肯定是过去三天在远程仓库上发生的唯一活动.这种推动可能不是回购的原因,而是规模增加了一倍,但这两个事件在时间上密切相关.

git reflog show 没有回报.

将新副本克隆到备用目录,然后运行git count-objects给我一个881.29 MiB的大小包. …

git repository bitbucket

29
推荐指数
2
解决办法
2万
查看次数

使用Javascript检测桌面浏览器(不是移动设备)

我找到了以下代码来检测桌面浏览器.但该方法还会检测一些移动浏览器.如何只检测Safari,IE,Firefox,Opera等桌面浏览器?

is_desktopBrowser : function() {
    var ua = navigator.userAgent.toLowerCase();

    var rwebkit = /(webkit)[ \/]([\w.]+)/;
    var ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/;
    var rmsie = /(msie) ([\w.]+)/;
    var rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/;

    var match = rwebkit.exec(ua) ||
            ropera.exec(ua) ||
            rmsie.exec(ua) ||
            ua.indexOf("compatible") < 0 && rmozilla.exec(ua) ||
            [];

    return { browser: match[1] || "", version: match[2] || "0" };
},
Run Code Online (Sandbox Code Playgroud)

javascript mobile

25
推荐指数
5
解决办法
5万
查看次数

为什么使用printf和cout的代码没有预期的输出?

我有以下代码:

int main ()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);    

    for (int i = 0; i < 3; i++) {
        cout << i << " ";
        printf("%d ", i);
    }

    cout << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码的预期输出为:

0 0 1 1 2 2

但是,相反,它打印:

0 1 2
0 1 2
Run Code Online (Sandbox Code Playgroud)

这个问题发生在GNU G ++ 4.9.2编译器中

c++ compilation output

15
推荐指数
3
解决办法
1217
查看次数

另外登录ASP.NET站点的查询字符串

几年前,我创建了一个数据库驱动的ASP.NET站点,该站点使用单个APSX页面显示所有站点页面.因此,该网站的所有网址都采用以下格式:

/main.aspx?page=Page+Title+One

/main.aspx?page=Another+Article+Title

/main.aspx?page=Third+Page
Run Code Online (Sandbox Code Playgroud)

main.aspx页面获取查询字符串数据(例如,Page + Title + One),并将其用作从SQL Server数据库中提取相应文章内容的键.页面的实际标题存储在带空格而不是加号的数据库中(例如"Page Title One").

在URL查询字符串中使用+号作为单词分隔符的糟糕决定导致最近搜索引擎出现很多问题(重复内容等),因此我想修复它,但不更改URL.

我想要做的是当搜索引擎或访问者试图访问错误的URL时,错过+符号并改为使用空格,例如:

/main.aspx?page=Page Title One
Run Code Online (Sandbox Code Playgroud)

我想做301永久重定向到:

/main.aspx?page=Page+Title+One
Run Code Online (Sandbox Code Playgroud)

为了能够做到这一点,我需要检查查询字符串值是否有加号或空格,但是当我使用Request.QueryString ["page"]得到值时,即使实际的问题字符串已经加入,我仍然得到字符串白色空间"页面标题一".

该站点在IIS6/Win 2003上运行.

我怎样才能做到这一点?

c# special-characters request.querystring

11
推荐指数
2
解决办法
7317
查看次数

apache 2.4.6 reverseeproxy mod_proxy_wstunnel for secure websocket wss://失败

我正在尝试将apache server 2.4.6配置为支持websocket代理的最新版本.

我得到了非安全的websocket连接,按预期工作,HTTPS代理工作也正常[这将删除SSL配置作为根本原因]但我的wss://连接失败.在使用wireshark进行故障排除时,我了解到wss://连接是通过纯文本进行的.

这是我的apache配置:

<VirtualHost *:4043>

ServerName cbscclrd.ca.wm.com
LogLevel debug
ErrorLog "/apps/apache/httpd-2.4.6/logs/errorSSL_log"
TransferLog "/apps/apache/httpd-2.4.6/logs/access_log"

SSLCertificateFile "/apps/FXD1D2/SSLKeyStore/sdpssl_cert-dev.cer"
SSLCertificateKeyFile "/apps/FXD1D2/SSLKeyStore/sdp-private-key-no-password.pem"
SSLCACertificateFile "/tmp/Apache-PKG/CAchain.pem"

    SSLEngine on
    SSLProxyEngine on
    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / wss://cbscclrd.ca.wm.com:443 retry=0 keepalive=On
    ProxyPassReverse / wss://cbscclrd.ca.wm.com:443 retry=0

</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

当连接启动到wss://cbscclrd.ca.wm.com:443时它是纯文本格式,因此侦听"cbscclrd.ca.wm.com:443"的服务器拒绝连接时出现以下错误消息; javax net ssl SSLException

任何帮助将不胜感激.

apache reverse-proxy websocket proxytunnel

11
推荐指数
1
解决办法
8994
查看次数

CSS游标:mac Safari中的指针不起作用

我已将光标:指针放在td上,但在Safari中(在Mac上)它只显示默认鼠标光标,而不是更改为它在其他所有浏览器中执行的小手指针.

是否有人知道是否有解决方案或是否不可避免?

更新:代码是这样的:

HTML

<td class="someClass"><span>text here</span></td>
Run Code Online (Sandbox Code Playgroud)

CSS

td.someClass { cursor:pointer; }
Run Code Online (Sandbox Code Playgroud)

css safari cross-browser mouse-cursor

8
推荐指数
2
解决办法
1万
查看次数

CSS min-width和max-width以及灵活的布局

我需要一些帮助来构建灵活的html布局.我已经定义了页面的最小和最大宽度wrap.在里面wrap,我有两列,contentright.

我想要固定宽度right列.但是,我想使content宽度变得灵活,因此根据最小宽度和最大宽度,宽度应该增加或减少.

这是我的html结构:

<body>
    <div class="wrap">
        <div class="content">...</div>
        <div class="right">...</div>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

这是CSS,我正在尝试:

.wrap{
    min-width: 780px;
    max-width: 1140px;
    margin: 10px auto;
}

.right{
    float:left
    width: 200px;   
}

.content{
    float: left;
    width: ?? //what should i do here?

}
Run Code Online (Sandbox Code Playgroud)

html css

5
推荐指数
1
解决办法
2万
查看次数