这是我的代码:
final HttpURLConnection conn = (HttpURLConnection) sourceURL.openConnection();
if (cachedPage != null) {
if (cachedPage.eTag != null) {
conn.setRequestProperty("If-None-Match", cachedPage.eTag);
}
conn.setIfModifiedSince(cachedPage.pageLastModified);
}
conn.connect();
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
newCachedPage.eTag = conn.getHeaderField("ETag");
newCachedPage.pageLastModified = conn.getHeaderFieldDate("Last-Modified", 0);
} else if (conn.getResponseCode() == HttpURLConnection.HTTP_NOT_MODIFIED) {
// Never reaches here
}
我似乎从未得到HTTP_NOT_MODIFIED响应代码,甚至连连几次击中同一台服务器-页面绝对没有变化。另外,conn.getHeaderField(“
ETag”)似乎总是响应null,有时conn.getHeaderFieldDate(“ Last-
Modified”,0)返回0。我已经在各种Web服务器上进行了尝试。
谁能告诉我我在做什么错?
你们都依赖于服务器配置。
如果获得Expires
响应头,则仅意味着您无需在指定的到期时间之前请求任何内容。如果获得Last- Modified
响应头,则意味着您应该可以使用If-Modified- Since
它来进行测试。如果获得ETag
响应头,则意味着您应该可以使用If-None-Match
它来进行测试。
让我们以http://cdn3.sstatic.net/stackoverflow/img/favicon.ico为例(Stackoverflow的favicon图像):
URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();
System.out.println(connection.getHeaderFields());
这给出:
{null = [HTTP / 1.1 200 OK],ETag = [“ 9d9bd8b1165cb1:0”],日期=
[2011年8月17日星期三,格林尼治标准时间],Content-Length = [1150],最后修改时间=
[周三,2010年10月6日02:53:46 GMT],内容类型= [图像/ x-图标],连接= [保持活动],接受范围= [字节],服务器=
[nginx / 0.8.36] ,X-Cache = [HIT],Cache-Control = [max-age = 604800]}
现在,使用If-Modified- Since
与相同的值进行Last- Modified
:
URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();
connection.setRequestProperty("If-Modified-Since", "Wed, 06 Oct 2010 02:53:46 GMT");
System.out.println(connection.getHeaderFields());
这给出了预期的304:
{null = [HTTP / 1.1 304未修改],ETag = [“ 9d9bd8b1165cb1:0”],日期=
[星期三,2011年8月17日17:57:42 GMT],上次修改时间= [星期三,2010年10月6日02: 53:46 GMT],连接=
[keep-alive],服务器= [nginx / 0.8.36],X-Cache = [HIT],Cache-Control = [max-age
= 604800]}
现在,使用If-None- Match
与相同的值进行ETag
:
URLConnection connection = new URL("http://cdn3.sstatic.net/stackoverflow/img/favicon.ico").openConnection();
connection.setRequestProperty("If-None-Match", "9d9bd8b1165cb1:0");
System.out.println(connection.getHeaderFields());
这 出乎意料地 给了200:
{null = [HTTP / 1.1 200 OK],ETag = [“ 9d9bd8b1165cb1:0”],日期=
[2011年8月17日星期三,格林尼治标准时间],Content-Length = [1150],最后修改时间=
[周三,2010年10月6日02:53:46 GMT],内容类型= [图像/ x-图标],连接= [保持有效],接受范围= [字节],服务器=
[nginx / 0.8.36] ,X-Cache = [HIT],Cache-Control = [max-age = 604800]}
更令人惊讶的是,当两个标头都设置为随机垃圾值时ETag
,服务器仍给出304。这表明http://cdn3.sstatic.netIf- None- Match
后面的服务器完全忽略了。那可能是一个(代理)配置问题,或者是完全有意识地完成的(不是出于明显的原因恕我直言)。
以下是使用的驼峰配置: 我确实拥有所需的权限,但从获取无效参数错误 org.apache.camel.spring.boot.CamelSpringBootLaunalizationException:org.apache.camel.FailedToCreateRouteException: FailedToCreateRoute1: Route(route1)[[from[aws-sqs://
我按照此链接处的代码读取bmp文件中的像素值,以便能够读取像素的RGB值,当我将整个图像作为一种颜色并读取随机像素值时,它们是正确的。在此之后,我尝试制作它,以便函数也会尝试查找有多少独特的颜色,所以我添加了一个不同颜色的框到图像中,但函数仍然只能找到一种颜色。我想知道我是否不知何故没有查看BMP中包含的所有字节,但我不确定这会是怎样的,因为我是新尝试这种东西的。 为了确保代码没有找到不同颜色的像
我正在尝试使用Selenium获取页面源代码,代码是通用SOP。这对百度来说是可行的。com和示例。通用域名格式。但说到我真正需要的URL,我得到了一个空页面。源代码只显示空标记,如下代码所示。我遗漏了什么吗? 我试图增加更多的选项,但似乎没有帮助 网络驱动程序; 我期望URL的解析页面源,这样我就可以得到我需要的信息。但我被困在这里了。
我使用formik和Yup来处理响应中的表单数据和表单验证。我试图将"Showfile"的值更改为true以进行条件验证,但值不会更改。
C:\ns\example应用程序 C:\ns\example应用程序 C:\ns\example应用程序
错误:在类com.complete.reference.shift中找不到Main方法,请将Main方法定义为:public static void Main(String[]args)或JavaFX应用程序类必须扩展JavaFX.application.application