可能重复:
使用Sinatra提供静态文件
我注意到Sinatra无法识别公用文件夹子目录中的index.html文件,并在url指向目录时返回错误而未指定文件名.
例如,如果用户输入"www.mydomain.com/subdiretory/"之类的网址,则Sinatra无法识别该目录中是否存在index.html文件.
我的公用文件夹中有数百个子目录,因此无法在代码中指定每个子目录(并且子目录的数量不断增长).
如果url指向没有文件名的目录,如果公共文件夹的子目录中有index.html文件,我怎么能告诉Sinatra单独离开我的Web服务器(Apache)(到服务器index.html文件)?
我似乎无法在 ASP.NET Core 2.2 中启用静态文件缓存。我有以下内容Configure:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
app.UseCors(...);
}
else {
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseSignalR(routes => { routes.MapHub<NotifyHub>("/..."); });
app.UseResponseCompression();
app.UseStaticFiles();
app.UseSpaStaticFiles(new StaticFileOptions() {
OnPrepareResponse = (ctx) => {
ctx.Context.Response.Headers[HeaderNames.CacheControl] = "public, max-age=31557600"; // cache for 1 year
}
});
app.UseMvc();
app.UseSpa(spa => {
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment()) {
spa.UseVueCli(npmScript: "serve", port: 8080);
}
});
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 chrome 在 HTTPS 上审核生产站点时,我不断收到“使用高效缓存策略提供静态资产”的消息:
在网络选项卡中没有提到标题中的缓存,当我按 F5 时,似乎所有内容都来自磁盘缓存。但是,如果审计显示它不是,我怎么能确定我的缓存设置有效?
最近我对如何处理Web应用程序中的共享javascript和css文件有一些想法.
在我正在处理的当前Web应用程序中,我获得了大量不同的javascripts和css文件,这些文件放在服务器上的文件夹中.一些文件被重用,而另一些则没有.
在生产站点中,拥有大量的HTTP请求和许多千字节的不必要的javascript和冗余的css是非常愚蠢的.解决方案当然是每页创建一个大的捆绑文件,其中只包含必要的信息,然后将其最小化并发送压缩(GZIP)到客户端.
如果您打算一次性创建一组javascript文件并手动将其最小化,则无需担心,但由于应用程序不断维护且事情确实发生变化和发展,因此在推出时手动执行此操作很快就会变得令人头疼新的更新,其中包含对javascripts和/或css文件的更改以进行生产.
处理这个问题的好方法是什么?你如何在你的申请中处理这个?
javascript css development-environment production-environment static-files
我有Rails 3.1,Unicorn和Apache设置.我的Apache设置如下,production.rb看起来像这样.我喜欢使用h264流媒体,但由于Rails正在为这些视频文件提供服务,因此Apache Mod无法运行.
DocumentRoot /blabla/current/public
RewriteEngine On
Options FollowSymLinks
<Proxy balancer://unicornservers>
BalancerMember http://127.0.0.1:4000
</Proxy>
# Redirect all non-static requests to rails
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://unicornservers%{REQUEST_URI} [P,QSA,L]
ProxyPass / balancer://unicornservers/
ProxyPassReverse / balancer://unicornservers/
ProxyPreserveHost on
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
XSendFile On
XSendFileAllowAbove on
Run Code Online (Sandbox Code Playgroud)
我必须启用serve_static_assets,否则我无法下载任何静态内容.我也有预编译资产,但它没有任何区别,因为除了Rails(Rack猜测)正在进行服务之外,公共目录中没有可用的文件.
我应该使用config.action_controller.asset_host还是我的Apache配置有问题.
我在我的Owin管道中设置了Microsoft.Owin.FileServer(v2.1.0),并且使用EnableDirectoryBrowsing = true设置FileServerOptions非常适合在我的控制台主机和iisexpress中显示目录内容.
当我尝试查看特定文件(因此,StaticFiles部分)时,我在iisexpress中遇到了问题.仍然在控制台主机中运行良好,但在iisexpress中我获得了404:
HTTP Error 404.0 - Not Found
The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Most likely causes:
- The directory or file specified does not exist on the Web server.
- The URL contains a typographical error.
- A custom filter or module, such as URLScan, restricts access to the file.
Run Code Online (Sandbox Code Playgroud)
我确实在Web主机中引用了最新的Microsoft.Owin.Host.SystemWeb.
我需要保护整个静态HTML文件的文件夹.目的是用户无法访问这些文件,除非他们经过身份验证并具有必要的角色.
我们已经使用OWIN设置了基于cookie的身份验证,但无论我尝试什么,我似乎都无法找出要对文件夹进行身份验证的更改的正确组合.
第一个问题是IIS完全跳过ASP.NET而只是提供文件.我认为通过将runAllManagedModulesForAllRequests设置为true可能有办法解决这个问题.但是我从哪里去?
我已经尝试在Web.config中填充元素以要求适当的角色,但它只会导致每个请求被拒绝(可能是因为它没有检查正确的cookie或其他东西).
我花了一整天的时间在这上面,我即将失去理智.
有人解决了这个问题吗?
我在Jetty服务器上有一个Java Web应用程序(Eclipse/OSGI).我希望能够从Web根目录之外的文件夹向我的Web应用程序提供静态文件.在我的Web应用程序中,我还不知道我想要提供的文件的文件名,因此我想在启动Web应用程序时将文件名(和/或路径)作为VM参数.例如:
我有一个图像 - myImg.jpg - 我把它放在服务器文件系统的一个文件夹中,例如root/images/myImg.jpg.我想将此作为VM参数,例如"-DmyImg =/images/myImg.jpg /",以便我可以获取图像并将其显示在我的网页上.我怎么能做到这一点?我可以不创建新的Servlet吗?
在此先感谢您的帮助!
这可能是一个愚蠢的问题并且有一个明显的答案,但我正在测试我的404和500错误处理程序,这意味着我必须将调试切换为False.我去了Django管理页面,注意到没有提供静态文件.
我知道它们应该通过Apache路由,因为通过Django服务静态文件是不安全的.但是,我不太明白为什么直接通过Django提供静态文件会带来安全风险?
众所周知,建议对由应用程序服务器提供服务的 Web 应用程序使用代理服务器。
此外,建议使用代理来提供静态文件。
对于“普通”.NET Core 应用程序,设置很简单。例如:
location /css/ {
root /var/www/my.app.com/wwwroot;
}
location /js/ {
root /var/www/my.app.com/wwwroot;
}
location /lib/ {
root /var/www/my.app.com/wwwroot;
}
Run Code Online (Sandbox Code Playgroud)
但是对于 .NET Core SPA 应用程序(使用 Angular),wwwroot 文件夹包含的内容不多,大部分内容都存储在 ClientApp 中。
这是否意味着对于 .NET Core SPA 应用程序,我们必须为了所有“SPA 优点”而牺牲静态文件服务功能,还是 Nginx 仍然可以提供某些类型的静态文件?
performance nginx static-files single-page-application asp.net-core-2.2
我正在尝试提供 package_docs 目录中的静态文件。当我在浏览器中打开时:
http://127.0.0.1:8001/packages/docs/index.html,页面正在运行。
但是我想打开页面:http : //127.0.0.1 : 8001/packages/docs/
没有源文件。输出是 404 Not Found
app.mount("/packages/docs",
StaticFiles(directory=pkg_resources.resource_filename(__name__, 'package_docs')
),
name="package_docs")
@app.get("/packages/docs/.*", include_in_schema=False)
def root():
return HTMLResponse(pkg_resources.resource_string(__name__, "package_docs/index.html"))
app.include_router(static.router)
app.include_router(jamcam.router, prefix="/api/v1/cams", tags=["jamcam"])
Run Code Online (Sandbox Code Playgroud)
如何更改我的代码?任何建议都会有所帮助。先感谢您。
static-files ×10
owin ×2
apache ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
caching ×1
css ×1
django ×1
fastapi ×1
iis ×1
java-ee ×1
javascript ×1
jetty ×1
katana ×1
nginx ×1
performance ×1
python-3.x ×1
routes ×1
ruby ×1
security ×1
sinatra ×1
unicorn ×1
vue.js ×1
web-services ×1