RFC2617表示将用户名和密码编码为base64,但没有说明在创建用于输入base64算法的八位字节时要使用的字符编码.
我应该假设US-ASCII或UTF8吗?或者有人已经在某处解决了这个问题?
我正在创建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) 在研究了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) 当我构建 RESTful 客户端和服务器时,对 HTTP 标头(请求或响应)使用百分比编码是否合适或必要,还是这种类型的编码仅适用于 URI?
晚上好,我需要将静态内容上传到 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) 我是这样设置的:
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) 我正在探索 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) 我正在使用 Node.js 和 Express.js 3.x。
作为我们的授权标头之一,我们传入用户名。我们的一些用户名包含变音字符:ü ö ä 等。对于只有“普通”字符的用户名,一切正常。但是当 jörg 尝试发出请求时,服务器无法识别标头中的变音字符。
试图模拟我的问题:
?.对禁止使用此类字符的自定义 HTTP 标头值字符是否有任何限制?知道为什么它可以在测试中工作但不能在我的浏览器扩展中工作吗?我是否忘记在某处设置一些字符集?
我正在编写一个爬虫并获取非英语网站的标题.当我在我的控制台中打印标题时,得到这样的结果:
শà§à¦°à§à¦²à¦à§à¦à¦¾à¦° à¦à¦¾à¦²à§ সà§à¦à¦¨à¦¾
ফà¦à¦¿à¦°à¦¾à¦ªà§à¦²à§ হাতবà§à¦®à¦¾ বিসà§à¦«à§à¦°à¦£, à¦à¦à¦ ১৬
দà§à¦ বাà¦à¦²à¦¾à¦¦à§à¦¶à¦¿à¦à§ নিà§à§ à¦à§à¦à§ বিà¦à¦¸à¦à¦«
à¦à¦¾à¦®à¦¾à§à¦¾à¦¤ নà§à¦¤à¦¾ সà§à¦²à¦¿à¦®à¦¸à¦¹ দà§à¦à¦¨ à¦à§à¦°à§à¦ªà§à¦¤à¦¾à¦°
Run Code Online (Sandbox Code Playgroud)
我不知道如何从上面的字符串中获取正确的文本.
任何的想法?
提前致谢.
http ×5
http-headers ×2
java ×2
bytebuffer ×1
diacritics ×1
encoding ×1
express ×1
file-upload ×1
firefox ×1
nginx ×1
node.js ×1
python ×1
rest ×1
rust ×1
unicode ×1
utf-8 ×1