我正在为学校做一个项目,我正在实现一个可以用来从网上下载文件的工具(有一个限制选项).问题是,我将拥有一个GUI,我将使用一个JProgressBar小部件,我想展示当前的下载进度.为此,我需要知道文件的大小.如何在下载文件之前获取文件的大小.
我有一个网站,我继承了维护,这是一个很大的毛病.
我正在做的一件事就是提高性能.除此之外,我正在Expires为图像添加标题.
现在,有一些图像是通过PHP文件提供的,我注意到它们确实有Expires标题,但每次都会加载它们.
看看响应标题,我看到了这个:
Expires Wed, 15 Jun 2011 18:11:55 GMT
Cache-Control no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma no-cache
Run Code Online (Sandbox Code Playgroud)
这显然解释了这个问题.
现在,我看了整个代码库,并没有在任何地方说"pragma"..htaccess似乎没有任何相关的东西.
什么想法可以设置那些"pragma"(和"缓存控制")标题,我怎么能避免它?
我正在尝试发送以使用我的HttpWebRequest发送以下标头:
Connection: keep-alive
但是,标头永远不会发送.Fiddler2显示,每当我在Google Chrome中请求该页面时,都会发送标题.但是,我的应用程序由于某种原因拒绝发送此标头.
我已经将KeepAlive属性设置为true(true默认情况下是默认值),但标题仍然没有被发送.
我正在尝试使用多个HttpWebRequests发送此标头,但它们基本上都是这样的:
HttpWebRequest logIn6 = (HttpWebRequest)WebRequest.Create(new Uri(responseFromLogIn5));
logIn6.CookieContainer = cookies;
logIn6.KeepAlive = true;
logIn6.Referer = "https://login.yahoo.com/config/login?.src=spt&.intl=us&.lang=en-US&.done=http://football.fantasysports.yahoo.com/";
logIn6.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.220 Safari/535.1";
logIn6.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
logIn6.Headers.Add("Accept-Encoding:gzip,deflate,sdch");
logIn6.Headers.Add("Accept-Language:en-US,en;q=0.8");
logIn6.Headers.Add("Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3");
logIn6.AllowAutoRedirect = false;
HttpWebResponse logIn6Response = (HttpWebResponse)logIn6.GetResponse();
string responseFromLogIn6 = logIn6Response.GetResponseHeader("Location");
cookies.Add(logIn6Response.Cookies);
logIn6Response.Close();
Run Code Online (Sandbox Code Playgroud)
有谁知道我要做什么来确保这个标题被发送?
来自Chrome的Fiddler2 Raw:
GET xxx HTTP/1.1
Host: accounts.google.com
Connection: keep-alive
Referer: https://login.yahoo.com/config/login?.src=spt&.intl=us&.lang=en-US&.done=http://football.fantasysports.yahoo.com/
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like …Run Code Online (Sandbox Code Playgroud) 什么是避免任何类型的http数据缓存的权威解决方案?我们可以修改客户端和服务器 - 所以我认为我们可以在客户端和服务器之间拆分任务.
客户端可以向每个请求附加一个随机参数http://URL/path?rand=6372637263- 我的感觉是只使用这种方式它不能100%工作 - 可能有一些智能代理,可以检测到...另一方面我认为如果URL不同从前一个,代理不能简单地决定发回一些缓存的响应.
在服务器上可以控制一堆HTTP头:
Expires: Tue, 03 Jul 2001 06:00:00 GMT
Last-Modified: {now} GMT
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Run Code Online (Sandbox Code Playgroud)
对此有何评论,最好的方法是什么?
HTTP/1.1指定发送的响应Transfer-Encoding: chunked可以包括可选的预告片(即通常作为标题发送的内容,但出于任何原因无法在内容之前计算,因此它们可以附加到结尾),例如:
请求:
GET /trailers.html HTTP/1.1
TE: chunked, trailers
Run Code Online (Sandbox Code Playgroud)
响应:
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Trailer: My-Test-Trailer
D\r\n
All your base\r\n
B\r\n;
are belong\r\n
6\r\n
to us\r\n
0\r\n
My-Test-Trailer: something\r\n
\r\n
Run Code Online (Sandbox Code Playgroud)
此请求在TE标头中指定它期望chunked响应,并将trailers在最后一个块之后查找.
响应在指定Trailer标题拖车它将被发送的列表(在这种情况下,只有一个:My-Test-Trailer)
每个块都发送为:
D= 13),然后是aCRLFAll your base),后跟一个CRLF零大小的块(0\r\n)表示身体的末端.
然后指定预告片(My-Test-Trailer: something\r\n),然后是决赛CRLF.
现在,从我到目前为止所阅读的所有内容来看,很少(如果有的话)使用预告片.这里和其他地方关于预告片的大多数讨论通常以"但你为什么还要使用预告片?"开头.
暂且不谈为什么,出于好奇,我一直试图模拟使用预告片的HTTP请求/响应交换; 但到目前为止,我还没有能够让它工作,我不确定我生成的响应是否有问题,或者是否(正如一些人所建议的那样)没有客户端寻找尾随的标题.
我试过的客户包括:curl,wfetch,Chrome + jQuery.
在所有情况下,客户端都会接收并正确地重建分块响应(All your base are …
我试图通过WebMvcConfigurerAdapter如下所示全局配置CORS .测试我通过我创建的小节点应用程序来模拟外部服务.当我尝试这种方法时,响应不包含正确的标题,并失败
XMLHttpRequest cannot load http://localhost:8080/api/query/1121. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:333' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)
全球配置
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/query/**")
.allowedOrigins("*")
.allowedHeaders("*")
.allowCredentials(true);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我使用这样的@CrossOrigin注释时,它可以很好地响应正确的标题.
@CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*")
@RestController
@RequestMapping(value = "/api/query", produces = MediaType.APPLICATION_JSON_VALUE)
public class QueryController {
......
}
Run Code Online (Sandbox Code Playgroud)
产生
Access-Control-Allow-Credentials:true …Run Code Online (Sandbox Code Playgroud) 我使用Google 的Page Speed应用程序测试了我的网站,其中一个建议是在HTTP Content-Type响应标头中指定字符集,声称它比元标记更好.
这是我理解的我需要写的内容:Content-Type:text/html; 字符集= UTF-8
..但我应该把它放在哪里?我在共享服务器上.
谢谢!
当我们需要调用Ajax请求时,我们会:
if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest();
else
{
var versions = ["Microsoft.XmlHttp",
"MSXML2.XmlHttp",
"MSXML2.XmlHttp.3.0",
"MSXML2.XmlHttp.4.0",
"MSXML2.XmlHttp.5.0"
];
Run Code Online (Sandbox Code Playgroud)
我已经知道,使用XMLHttpRequest-2,我们可以做一个跨源请求和该ORIGIN头被添加.
题:
这个标题何时添加?
我的意思是:大胆的线是什么意思?
跨源HTTP请求具有Origin头.此标头为服务器提供请求的来源.此标头受浏览器保护,无法从应用程序代码更改.本质上,它是在Cross Document Messaging中使用的消息事件中找到的origin属性的网络等价物.origin标头与旧的referer [sic]标头不同,因为referer是包含路径的完整URL.由于路径可能包含敏感信息,因此有时不会通过尝试保护用户隐私的浏览器发送引用.但是,浏览器将始终在必要时发送所需的Origin标头.
作为努力使我们的API和网站更安全的一部分,我正在删除泄漏有关网站运行信息的标题.
剥离标题之前的示例:
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687
Run Code Online (Sandbox Code Playgroud)
Web.config文件:
<httpProtocol>
<customHeaders>
<remove name="X-Powered-By" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
的Global.asax.cs:
protected void Application_PreSendRequestHeaders() {
Response.Headers.Remove("Server");
Response.Headers.Remove("X-AspNet-Version");
Response.Headers.Remove("X-AspNetMvc-Version");
Response.AddHeader("Strict-Transport-Security", "max-age=300");
Response.AddHeader("X-Frame-Options", "SAMEORIGIN");
}
Run Code Online (Sandbox Code Playgroud)
之后,对网站和API的所有调用都会返回更安全的标头,如下所示:
HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: text/html; charset=utf-8
Date: Wed, 05 Jun 2013 00:27:54 GMT
Content-Length: 3687
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,我在Firebug中注意到,如果你查看静态内容(例如,loading.gif),它仍然包含服务器头.
HTTP/1.1 304 Not Modified
Cache-Control: no-cache
Accept-Ranges: bytes
Etag: "a3f2a35bdf45ce1:0"
Server: …Run Code Online (Sandbox Code Playgroud) (编辑,我'在2016年'但它还没有2016年.我的意思是'目前'
到目前为止对我没用的事情:
查看Firefox中的Web控制台功能(我可能会失明)
在mozilla.org上查看Web控制台文档 - web控制台文档(视频无法播放;我可能会错过它.人们说它在Web控制台中,但我在Web控制台中看不到任何标题.我希望看到meta标签,特别是重定向让我疯狂.)
在Firefox中尝试了几个过期的插件(有一个修复声称但是我怀疑它是否有效 - 在mozilla.org搜索插件
http-headers ×10
http ×4
c# ×2
caching ×2
cors ×2
java ×2
ajax ×1
apache ×1
asp.net ×1
content-type ×1
cross-domain ×1
firefox ×1
http-1.1 ×1
https ×1
iis ×1
javascript ×1
optimization ×1
php ×1
pragma ×1
sample ×1
security ×1
spring-mvc ×1
trailing ×1