Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';我不能得到像谷歌这样的流行网站的内容编码吗?_Java_Http - Fatal编程技术网

Java 为什么可以';我不能得到像谷歌这样的流行网站的内容编码吗?

Java 为什么可以';我不能得到像谷歌这样的流行网站的内容编码吗?,java,http,Java,Http,这是我用来获取内容编码的代码,但是雅虎和谷歌等网站似乎没有使用内容编码。我的意思是,要么我的代码是错误的,要么他们实际上没有使用内容编码,我似乎认为是前者。所以我只想知道我错在哪里 package com.java24hours; import java.io.*; import java.net.*; import java.net.http.*; import java.util.*; public class ServerCheck{ static String[] sites = {

这是我用来获取内容编码的代码,但是雅虎和谷歌等网站似乎没有使用内容编码。我的意思是,要么我的代码是错误的,要么他们实际上没有使用内容编码,我似乎认为是前者。所以我只想知道我错在哪里

package com.java24hours;

import java.io.*;
import java.net.*;
import java.net.http.*;
import java.util.*;

public class ServerCheck{
static String[] sites = {"https://www.google.com","https://www.yahoo.com"}; 
public static void check() throws URISyntaxException,IOException,InterruptedException{
    for(String site: sites){
    System.out.println("\nSite: " + site);
    HttpClient browser = HttpClient.newHttpClient();
    URI uri = new URI(site);
    HttpRequest request = HttpRequest.newBuilder(uri).build();
    HttpResponse<String> response = browser.send(request,HttpResponse.BodyHandlers.ofString());
Optional<String> contenttype = response.headers().firstValue("Content-Type");
Optional<String> contentencoding = response.headers().firstValue("Content-Encoding");

if (contentencoding.isPresent()){
System.out.println("Content-Encoding: " + contentencoding.get());
}else{
System.out.println("Content-Encoding not found");
}
if (contenttype.isPresent()){
System.out.println("Content-Type: " + contenttype.get());
}else{
System.out.println("Content-Type not found");
}
}



}


public static void main(String[] args) throws URISyntaxException,IOException,InterruptedException{

ServerCheck.check();
}

}
package com.java24小时;
导入java.io.*;
导入java.net。*;
导入java.net.http.*;
导入java.util.*;
公共类服务器检查{
静态字符串[]站点={”https://www.google.com","https://www.yahoo.com"}; 
public static void check()抛出URISyntaxException、IOException、InterruptedException{
用于(字符串站点:站点){
System.out.println(“\n站点:+站点”);
HttpClient browser=HttpClient.newHttpClient();
URI=新URI(站点);
HttpRequest请求=HttpRequest.newBuilder(uri.build();
HttpResponse response=browser.send(请求,HttpResponse.BodyHandlers.ofString());
可选内容类型=response.headers().firstValue(“内容类型”);
可选contentencoding=response.headers().firstValue(“内容编码”);
if(contentencoding.isPresent()){
System.out.println(“内容编码:+contentencoding.get());
}否则{
System.out.println(“未找到内容编码”);
}
if(contenttype.isPresent()){
System.out.println(“内容类型:”+contenttype.get());
}否则{
System.out.println(“未找到内容类型”);
}
}
}
公共静态void main(字符串[]args)抛出URISyntaxException、IOException、InterruptedException{
ServerCheck.check();
}
}

内容编码
仅在客户端允许时使用

由于您没有在请求中发送头
接受编码
,这意味着只允许
标识
编码,并且由于这是默认编码,因此响应中不存在
内容编码

如果要压缩,请指定标题:

HttpRequest request = HttpRequest.newBuilder(uri)
        .setHeader("Accept-Encoding", "gzip")
        .build();

内容编码
仅在客户端允许时使用

由于您没有在请求中发送头
接受编码
,这意味着只允许
标识
编码,并且由于这是默认编码,因此响应中不存在
内容编码

如果要压缩,请指定标题:

HttpRequest request = HttpRequest.newBuilder(uri)
        .setHeader("Accept-Encoding", "gzip")
        .build();

因此,因为我没有指定我接受的编码,服务器假定没有编码?@ABC123说:如果请求中没有接受编码字段,服务器可能假定客户端将接受任何内容编码。在这种情况下,如果“identity”是可用的内容编码之一,那么服务器应该使用“identity”内容编码,除非它有其他信息表明不同的内容编码对客户端有意义。那么为什么我不从google获得内容编码呢,如果它假设我接受任何内容编码?@ABC123:服务器不必假设你可以接受任何编码;RFC只说五月。而一个想为公众用户服务的公司,比如谷歌和雅虎,可能不会。即使有,服务器几乎总是有可用的标识,因此它应该使用该标识。加上现在几乎可以肯定的是,服务器或某个前端或卸载箱会动态压缩,因此网站本身没有任何内容编码。因此,因为我没有指定我接受的编码,服务器假定没有编码?@ABC123说:如果请求中没有接受编码字段,服务器可能会假定客户端将接受任何内容编码。在这种情况下,如果“identity”是可用的内容编码之一,那么服务器应该使用“identity”内容编码,除非它有其他信息表明不同的内容编码对客户端有意义。那么为什么我不从google获得内容编码呢,如果它假设我接受任何内容编码?@ABC123:服务器不必假设你可以接受任何编码;RFC只说五月。而一个想为公众用户服务的公司,比如谷歌和雅虎,可能不会。即使有,服务器几乎总是有可用的标识,因此它应该使用该标识。此外,现在几乎可以肯定的是,服务器或某个前端或卸载箱会在运行中进行压缩,因此网站本身并没有任何内容编码。