asp限制对页面的访问
HTTP分为URI,HEADER,Body三个部分。每个部分都可以包含请求信息,那么每个部分是否都有请求大小限制呢?刚开始以为这个问题很容易找到答案,后来发现这也是个挺复杂的问题。
URI
首先是URI,我们知道,在GET请求中,请求参数是放在URL进行传递的,所以,HTTP GET的请求最关心的一个问题:能有多长?我能放多少参数?URI
从HTTP 11协议中开始找:(RFC 2616)
The HTTP protocol does not place any a priori limit on the length of a URI
所以明确一点的是HTTP协议是没有显式限制URI的长度的。理论上来说你在URI中传递多少参数都是可以的。
但是现实往往无法永远照进阳光:
1 浏览器限制
所有主流浏览器都会对URI的长度进行限制。如果你在浏览器中输入过长的URI,那么浏览器会自动进行截断。各个浏览器对URI长度的限制各不相同,甚至不同版本也不一样。大约一个概念,2000字符以内的URI都能符合所有主流浏览器的要求。
2 服务端限制
即使客户端同意发送无限长度的URI,但是服务器一方一般都是有长度限制的。一般服务是没有专门针对URI的参数限制的,但是由于URI是会包含在request header中的,所以对header的大小限制是会对URI起作用的,比如nginx的(large_client_header_buffers)这个属性,它默认是4k。
题外话
这里的“URI是包含在request header中的” 这句话其实是有问题的。URI在HTTP协议中是叫做request-Line的,如果具体看协议,是会发现request-Line和request-header是两个不一样的,就是说request的请求其实该分为request-line, request-header, request-body三个部分的(具体可以看 http://wwwietforg/rfc/rfc2616txt 第4和5章)。但是好像使用的时候都默认将header中理解为包含了request-line(比如这篇文章 http://trafficserverapacheorg/docs/v2/sdk/HTTPHeadershtml )。这里估计是概念和使用的时候导致问题,不必深究了,所以我们不妨将request-line理解为包含在header中就好。
不管如何,综上所述,这里的URI不论是客户端还是服务端,基本是被默认限制住的。
Header
header中存放的信息非常多,比如request-line,cookie,还有各种key-value的特定header字段和值。有点时候,我们也会往header中添加一些自定义的属性。header的长度和URI的情况是一样的。协议中并没有显示限制header的大小。理论上在header中放多少属性都是可以的。
但是实际上:
1 浏览器限制
各个主流浏览器限制几十k~几百M不等的限制。基本上能满足平时的需求了。但是如果这个长度对你业务有很大影响的话,建议还是亲自测试下。
2 服务端限制
比如nginx的large_client_header_buffers就限制了header的长度。你也可以自己设置。
可能会影响header的参数还有:
client_header_buffer_size
client_header_timeout
各参数可以参考: http://wikinginxorg/HttpCoreModule
Body
body和URI,header非常不一样,不一样的地方原因在于文件上传。HTTP是支持request中带文件的,那么文件的二进制数据不会放在URI或者header里面,它是放在body里面的。那么这个body的大小就一定不能默认限制太小,尤其是客户端。
首先理论上,协议是没有对body大小做任何限制的。
其次,浏览器也没有对body做任何大小限制,因为如果浏览器做了大小限制就意味着它直接影响了你的服务功能。
所以对body的限制的任务就放在了服务器上了。这里就我最熟悉的nginx+php-fpm来看下有哪些地方可以对body进行限制:
1 nginx有一些设置会对body大小产生影响
client_max_body_size,这个参数可以限制body的大小,默认是1m
client_body_timeout,当body太大,或者网络太差的时候,这个也有可能会影响请求的成功率的。
2 phpini也有一些设置会对上传的body数据产生影响
upload_max_filesize,限制最大上传文件大小
post_max_size ,限制post的大小
memory_limit,限制内存使用大小
max_execution_time,这个是php最大执行时间,也有可能影响请求成功率的。
HTTP请求大小有什么影响
首先是安全因素考虑。
试想一下一个网站的服务器是不限制body大小的,那么它就是可以被黑客利用攻击的地方了。黑客利用这一点往HTTP POST的body中传递非常大(比如几M)的请求。那么比如像nginx+php-fpm这样的,就会占用了服务器一个php进程专门处理这个请求,就会导致你对外无法提供其他的服务了,你的服务就瘫痪了,这就是DDOS攻击。
其次是文件上传服务考虑。
文件上传有两种情况:
你可能经常遇到为什么文件上传失败?那么大多是上文说的几个设置没有设置对。
其次,文件上传大小是不是设置越大越好?答案必须是否定的,理由也是安全考虑。满足需求的大小限制就够了。
这里就可以理解为什么大都把文件上传和业务接口分开来提供了吧。如果你的文件上传服务和业务接口是同一个机器的话,那么就说明你的业务接口可以允许的body大小一定是很大的。换句话说,在这种情境下,你的业务中的所有POST请求都是不安全的!!只要进行DDOS攻击,业务就会瘫痪。
HTML上传文件大小受到服务器配置和网络条件的限制,其中服务器配置是主要的限制因素。具体来说,HTML是一种标记语言,它是用来描述网页的语言,不具备处理上传文件的能力。实际上,上传文件的操作需要通过服务器来完成,而服务器在处理上传文件时会对文件的大小进行限制,这是为了避免服务器存储空间被过多的大文件占用,从而影响服务器的运行效率。
另外,网络条件也会对上传文件的大小产生一定的限制。在网络条件较差的情况下,上传大文件可能会导致上传过程中的数据传输中断或出错,从而导致上传失败。
总的来说,HTML上传文件大小的限制是由服务器配置和网络条件共同决定的。为了避免上传失败,我们可以通过压缩文件或者分段上传的方式来解决上传大文件的问题。此外,需要注意的是,上传文件的大小限制也会因为不同的服务器而有所不同,具体的上传文件大小限制可以在服务器的相关文档中查阅。
你好,
给你个思路,你 看看。
在1asp里刷新的时候就获取一个随机值,并把它写入cookies或者session,然后在设置给隐藏域,点击提交的时候把这个隐藏域提交了,在2asp里判断传过来的隐藏域是否等于cookies或者session里的值,如果等于则说明通过,并把cookies或者session清空,在执行你的代码,这样就避免他刷新2asp可以操作了,因为在2asp里要先验证cookies或者session跟隐藏域是否一致的。
希望可以帮到你。
补充一下吧
一、不明白你是要根据用户登陆的时候来判断是否访问2ASP的值,还是根据随即数
二、如果你要是根据登陆时间的话,你就要记住每次的登陆时间,判断这个账户登陆的时候之前有没有登陆,如果有登陆就说明不是第一次登陆,如果没有登陆说明是第一次登陆。
三、如果你要是根据随即数的话,就像这个说的隐藏域,不过不需要设置COKKIES和SESSION,我想你要通过一个固定值来比较这个随即值。比如大于执行或小于执行
四、刷新,你可以设置防刷新,一刷新当前值没有了,则提示返回1ASP。二使用COOKIES或SESSION ,三可以把个数据加入到一个临时表里面,我推荐后者,当离开时清空或加一个判断语句即可!
好吧,就这些了。
如果你要启用字符串混淆来防采集,请在文档模板需要的字段加上 function='RndString(@me)' 属性,如:{dede:field name='body' function='RndString(@me)'/}。
更新缓存,再更新html
一共是两大步,
首先是常规选项。常规选项中需要改动的地方不大,除了栏目标题和路径,其他的完全可以不改。
修改栏目的常规选项
可以选择为频道封面
当然,因为单页类栏目本身是不用发表文章的,所以栏目属性使用“频道封面”倒是似乎更加贴切一些,以后更新的时候可以一目了然。
其实不进行修改也是可以的,因为这里并不关键,关键的是下面的高级选项的设置。
其次是高级选项。高级选项中,有设置模板的地方。这里就需要注意了,因为不管是我们选用“频道封面”还是“最终栏目列表”,其默认的模板都是无法实现我们要制作的单页内容的,那么我们就需要自定义一个模板。假设我们使用singllepagehtm来实现单页面的调用,那么我们就需要对其模板进行设置,如果是选频道封面就修改频道封面,反之则修改最终栏目列表。以“最终栏目列表”为例,如图:
高级选项中修改模板设置
最后是栏目内容。栏目内容,就是我们实现动态更新的栏目内容了。我们看到,dedeCMS提示我们栏目内容是替代原来栏目单独页的更灵活的一种方式,可在栏目模板中用{dede:fieldcontent/}调用,通常用于企业简介之类的用途,所以我们只要在这里添加企业简介之类的内容,就可以了。而不用笨拙的去修改静态页面。
一切妥当之后,我们进行第二大步——修改singlepagehtm模板。
修改模板很简单,我们找到templets路径下相应模板分类的singlepagehtm,然后我们对其进行编辑,我们看到,原始的singlepagehtm是调用的{dede:fieldbody/}这里是调用普通文章的内容,我们要做单页模板,只要修改调用的地方为{dede:fieldcontent/}就完事大吉了。
修改模板的调用内容
我们看到还有个相关页面,这里我们弃之不用倒显得浪费了。
可以利用起来的相关页面
我们也可以对其进行一番改造,调用处相关的一些单页类的栏目来起到增加内链的作用。调用很简单,假设我们企业简介的ID为1,其他单页类栏目ID分别为2、3、4的话,我们可以这样写来实现这些栏目的调用:
{dede:channelartlist typeid='9,12'}
{dede:type}
[field:typename/]
{/dede:type}
{/dede:channelartlist}
保存,生成栏目就可以看到效果了。当然默认的模板是有些寒酸,不过我们可以自己制作模板让其更加美观一些,那就看你CSS运用的怎么样了!我们看一个效果比较美观的:
通过栏目内容调用的单页面
如果你有更好的方法来制作可以动态更新的单页的话,欢迎大家留言板留言,本站感激之至。
好今天的dede每日一课就到这里,欢迎大家关注其他的中国SEO的dede建站每日一课的内容。同时,我们热烈欢迎会员和学员投稿,具体的投稿方式为,先注册会员,然后点击发布文章即可,如果通过审核发布成功,本站将会有小礼品相送哦!~
0条评论