相关疑难解决方法(0)

我应该使用什么编码进行HTTP基本身份验证?

RFC2617表示将用户名和密码编码为base64,但没有说明在创建用于输入base64算法的八位字节时要使用的字符编码.

我应该假设US-ASCII或UTF8吗?或者有人已经在某处解决了这个问题?

http basic-authentication

73
推荐指数
3
解决办法
4万
查看次数

HTTP标头中的非法字符

我正在创建HttpUrlConnection并需要设置多个自定义标头.

我想按照以下方式做一些事情,但标题映射的内容需要来自单个字符串.在HTTP标头名称和HTTP标头值中是否存在任何非法或极少使用的字符?

HashMap<String, String> headers = new HashMap<String, String>();

// TODO: How can I fill the headers map reliably from a single string?

HttpURLConnection c = (HttpURLConnection) url.openConnection();
for(Map.Entry<String, String> e : headers.entrySet())
    c.setRequestProperty(e.getKey(), e.getValue());
Run Code Online (Sandbox Code Playgroud)

解决方案现在

似乎任何HTTP标头名称都不包含任何空格(通常使用破折号?),因此我可以使用单个空格将名称与值分开.至于名称 - 值集,似乎我搞砸了,因为根据给定的答案,值可以包含几乎任何东西.所以我选择了一个我非常肯定最不可能使用的角色:§.如果事实证明它确实需要,我只需要调整我的代码:p

Header1 Value1§Header2 Value2§Header3 Header3
Run Code Online (Sandbox Code Playgroud)

java http http-headers

16
推荐指数
1
解决办法
3万
查看次数

HTTP标头值允许哪些字符?

在研究了HTTP/1.1标准之后,特别是第31页和相关的我得出结论,任何8位八位字节都可以出现在HTTP头值中.即任何带有[0,255]范围代码的字符.

然而我试过的HTTP服务器拒绝接受代码> 127(或大多数US-ASCII不可打印的字符)的任何东西.

这里是标准中使用的语法摘录:

message-header = field-name ":" [ field-value ]
field-name     = token
field-value    = *( field-content | LWS )
field-content  = <the OCTETs making up the field-value and consisting of
                  either *TEXT or combinations of token, separators, and
                  quoted-string>

CR             = <US-ASCII CR, carriage return (13)>
LF             = <US-ASCII LF, linefeed (10)>
SP             = <US-ASCII SP, space (32)>
HT             = <US-ASCII HT, horizontal-tab (9)>
CRLF           = CR LF
LWS            = [CRLF] 1*( SP | HT ) …
Run Code Online (Sandbox Code Playgroud)

http http-headers

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

对 HTTP 标头使用百分比编码是否合适或必要?

当我构建 RESTful 客户端和服务器时,对 HTTP 标头(请求或响应)使用百分比编码是否合适或必要,还是这种类型的编码仅适用于 URI?

rest http

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

使用 client_body_in_file_only 上传 nginx 文件

晚上好,我需要将静态内容上传到 nginx 服务器 1.9(因此上传模块不适用于此版本)。我已经阅读了文章“Nginx 直接上传文件而不通过后端传递它们”并按照说明一步一步地进行。除了 nginx 数据目录中的文件名外,一切都对我有用。文件名看起来像“0000000001”、“0061565403”等。我应该怎么做才能使用正确的名称保存文件? 这是我的 nginx 位置配置:

location /upload {
limit_except POST              { deny all; }
client_body_temp_path          /data/;
client_body_in_file_only       on;
client_body_buffer_size        128K;
client_max_body_size           50M;
proxy_pass_request_headers     on;
proxy_set_header content-type "text/html";
proxy_set_body                 $request_body_file;
proxy_pass                     http://localhost:8080/
proxy_redirect                 off;}
Run Code Online (Sandbox Code Playgroud)

file-upload nginx

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

下载文件时如何为不同浏览器正确设置中文文件名

我是这样设置的:

response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode("??.txt", "utf-8"));

它适用于 chrome,但不适用于 Firefox,在 Firefox 中,文件名是%E4%BD%A0%E5%A5%BD.txt.

那么如何设置文件名呢?我希望文件名在 chrome、firefox 和 IE(>=8) 中正确显示

PS:由朋友解决,分享给大家,也许能帮到别人。

/**
  return encoded file name
*/
protected String getFileName(String filename) {
    try{
        HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
        if (request.getHeader("User-Agent").indexOf("MSIE") != -1) {
            return '\"' + java.net.URLEncoder.encode(filename, "UTF-8") + '\"';
        }
        byte[] bytes = filename.getBytes("UTF-8");
        StringBuilder buff = new StringBuilder(bytes.length << 2);
        buff.append("=?UTF-8?Q?");
        for (byte b : bytes) {
            int unsignedByte = b & 0xFF;
            buff.append('=').append(HEX_CHARS[unsignedByte >> 4]).append(HEX_CHARS[unsignedByte & 0xF]);
        }
        return …
Run Code Online (Sandbox Code Playgroud)

java firefox internet-explorer google-chrome

4
推荐指数
1
解决办法
3810
查看次数

如何从 hyper::client::Request 正确读取字节序列并将其作为 UTF-8 字符串打印到控制台?

我正在探索 Rust 并尝试发出一个简单的 HTTP 请求(使用 hyper crate)并将响应正文打印到控制台。响应实现std::io::Read. 阅读各种文档来源和基本教程,我得到了以下代码,我使用以下代码编译和执行RUST_BACKTRACE=1 cargo run

use hyper::client::Client;
use std::io::Read;

pub fn print_html(url: &str) {
    let client = Client::new();
    let req = client.get(url).send();

    match req {
        Ok(mut res) => {
            println!("{}", res.status);

            let mut body = String::new();

            match res.read_to_string(&mut body) {
                Ok(body) => println!("{:?}", body),
                Err(why) => panic!("String conversion failure: {:?}", why)
            }
        },
        Err(why) => panic!("{:?}", why)
    }
}
Run Code Online (Sandbox Code Playgroud)

预期的:

由 HTTP 服务器传送的正文的一个漂亮的、人类可读的 HTML 内容被打印到控制台。

实际的:

use hyper::client::Client;
use std::io::Read;

pub …
Run Code Online (Sandbox Code Playgroud)

bytebuffer utf-8 rust

3
推荐指数
2
解决办法
1341
查看次数

自定义 HTTP 标头值 - 尝试传递变音字符

我正在使用 Node.js 和 Express.js 3.x。

作为我们的授权标头之一,我们传入用户名。我们的一些用户名包含变音字符:ü ö ä 等。对于只有“普通”字符的用户名,一切正常。但是当 jörg 尝试发出请求时,服务器无法识别标头中的变音字符。

试图模拟我的问题:

  • 创建了一些使用变音字符设置用户名标题的测试。这些测试通过,他们能够正确地通过变音。
  • 使用“邮递员”和“高级休息客户端”Chrome 扩展程序并手动向服务器发出请求 - 在这种情况下它失败了。我看到服务器无法识别变音字符,它突然将其解释为某种?.

对禁止使用此类字符的自定义 HTTP 标头值字符是否有任何限制?知道为什么它可以在测试中工作但不能在我的浏览器扩展中工作吗?我是否忘记在某处设置一些字符集?

diacritics character-encoding node.js express

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

非英语文本python不可读

我正在编写一个爬虫并获取非英语网站的标题.当我在我的控制台中打印标题时,得到这样的结果:

শà§à¦°à§à¦²à¦à§à¦à¦¾à¦° ভালৠসà§à¦à¦¨à¦¾
ফà¦à¦¿à¦°à¦¾à¦ªà§à¦²à§ হাতবà§à¦®à¦¾ বিসà§à¦«à§à¦°à¦£, à¦à¦à¦ ১৬
দà§à¦ বাà¦à¦²à¦¾à¦¦à§à¦¶à¦¿à¦à§ নিà§à§ à¦à§à¦à§ বিà¦à¦¸à¦à¦«
à¦à¦¾à¦®à¦¾à§à¦¾à¦¤ নà§à¦¤à¦¾ সà§à¦²à¦¿à¦®à¦¸à¦¹ দà§à¦à¦¨ à¦à§à¦°à§à¦ªà§à¦¤à¦¾à¦°
Run Code Online (Sandbox Code Playgroud)

我不知道如何从上面的字符串中获取正确的文本.

任何的想法?

提前致谢.

python unicode encoding http

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