⑴ apache 用httpclient模拟登录时返回错误代码HttpStatus.SC_UNAUTHORIZED(401),我用的是4.3.6版本的
HTTP 400 - 请求无效
HTTP 401.1 - 未授权:登录失败
HTTP 401.2 - 未授权:服务器配置问题导致登录失败
HTTP 401.3 - ACL 禁止访问资源
HTTP 401.4 - 未授权:授权被筛选器拒绝
HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
401 - 访问被拒绝。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示: ?? 401.1 - 登录失败。
?? 401.2 - 服务器配置导致登录失败。
?? 401.3 - 由于 ACL 对资源的限制而未获得授权。
?? 401.4 - 筛选器授权失败。
?? 401.5 - ISAPI/CGI 应用程序授权失败。
?? 401.7 – 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
⑵ 关闭 apache 的用户认证
你只需要在抄apache的配置文件中找到如下配置,将他们注释掉即可
AllowOverride AuthConfig
AuthType Basic # 用户认证类型
AuthName "Restricted Site" # 认证时显示的名字
AuthUserFile /etc/httpd/conf/htpasswd # 认证时用户的账号密码文件
AuthGroupFile /etc/httpd/conf/htgroup #基于组的认证
⑶ HTTP Status 401- type Status report message description This request requires HTTP authentication (
你先修改web.xml中,认证方式为DIGEST,然后用linux访问试试,如果可以,那么你就知道是什么问题了
⑷ 解决windows下apache文件上传失败,读写的问题401
具体的php.ini完整配置信息:
⑸ apache rewrite 配置方法
.htaccess文件提供了针对每个目录改变配置的方法。
top
.htaccess 文件*
相关模块 相关指令
* core
* mod_authn_file
* mod_authz_groupfile
* mod_cgi
* mod_include
* mod_mime
* AccessFileName
* AllowOverride
* Options
* AddHandler
* SetHandler
* AuthType
* AuthName
* AuthUserFile
* AuthGroupFile
* Require
top
工作原理和使用方法*
.htaccess文件(或者"分布式配置文件")提供了针对每个目录改变配置的方法,即在一个特定的目录中放置一个包含指令的文件,其中的指令作用于此目录及其所有子目录。
说明:
如果需要使用.htaccess以外的其他文件名,可以用AccessFileName指令来改变。例如,需要使用.config ,则可以在服务器配置文件中按以下方法配置:
AccessFileName .config
通常,.htaccess文件使用的配置语法和主配置文件一样。AllowOverride指令按类别决定了.htaccess文件中哪些指令才是有效的。如果一个指令允许在.htaccess中使用,那么在本手册的说明中,此指令会有一个覆盖项段,其中说明了为使此指令生效而必须在AllowOverride指令中设置的值。
例如,本手册对AddDefaultCharset指令的阐述表明此指令可以用于.htaccess文件中(见"作用域"项),而覆盖项一行是FileInfo ,那么为了使.htaccess中的此指令有效,则至少要设置 AllowOverride FileInfo 。
例子:
作用域 server config, virtual host, directory, .htaccess
覆盖项 FileInfo
如果不能确定某个指令是否可以用于.htaccess文件,可以查阅手册中对指令的说明,看在"作用域"行中是否有".htaccess" 。
top
(不)使用.htaccess文件的场合*
一般情况下,不应该使用.htaccess文件,除非你对主配置文件没有访问权限。有一种很常见的误解,认为用户认证只能通过.htaccess文件实现,其实并不是这样,把用户认证写在主配置文件中是完全可行的,而且是一种很好的方法。
.htaccess文件应该被用在内容提供者需要针对特定目录改变服务器的配置而又没有root权限的情况下。如果服务器管理员不愿意频繁修改配置,则可以允许用户通过.htaccess文件自己修改配置,尤其是ISP在同一个机器上运行了多个用户站点,而又希望用户可以自己改变配置的情况下。
虽然如此,一般都应该尽可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的<Directory>段中,而且更高效。
避免使用.htaccess文件有两个主要原因。
首先是性能。如果AllowOverride启用了.htaccess文件,则Apache需要在每个目录中查找.htaccess文件,因此,无论是否真正用到,启用.htaccess都会导致性能的下降。另外,对每一个请求,都需要读取一次.htaccess文件。
还有,Apache必须在所有上级的目录中查找.htaccess文件,以使所有有效的指令都起作用(参见指令的生效),所以,如果请求/www/htdocs/example中的页面,Apache必须查找以下文件:
/.htaccess
/www/.htaccess
/www/htdocs/.htaccess
/www/htdocs/example/.htaccess
总共要访问4个额外的文件,即使这些文件都不存在。(注意,这可能仅仅由于允许根目录"/"使用.htaccess ,虽然这种情况并不多。)
其次是安全。这样会允许用户自己修改服务器的配置,这可能会导致某些意想不到的修改,所以请认真考虑是否应当给予用户这样的特权。但是,如果给予用户较少的特权而不能满足其需要,则会带来额外的技术支持请求,所以,必须明确地告诉用户已经给予他们的权限,说明AllowOverride设置的值,并引导他们参阅相应的说明,以免日后生出许多麻烦。
注意,在/www/htdocs/example目录下的.htaccess文件中放置指令,与在主配置文件中<Directory /www/htdocs/example>段中放置相同指令,是完全等效的。
/www/htdocs/example目录下的.htaccess文件:
/www/htdocs/example目录下的.htaccess文件的内容:
AddType text/example .exm
httpd.conf文件中摘录的内容:
<Directory /www/htdocs/example>
AddType text/example .exm
</Directory>
但是,把配置放在主配置文件中更加高效,因为只需要在Apache启动时读取一次,而不是在每次文件被请求时都读取。
将AllowOverride设置为none可以完全禁止使用.htaccess文件:
AllowOverride None
top
指令的生效*
.htaccess文件中的配置指令作用于.htaccess文件所在的目录及其所有子目录,但是很重要的、需要注意的是,其上级目录也可能会有.htaccess文件,而指令是按查找顺序依次生效的,所以一个特定目录下的.htaccess文件中的指令可能会覆盖其上级目录中的.htaccess文件中的指令,即子目录中的指令会覆盖父目录或者主配置文件中的指令。
例子:
/www/htdocs/example1目录中的.htaccess文件有如下内容:
Options +ExecCGI
(注意:必须设置"AllowOverride Options"以允许在.htaccess中使用"Options"指令)
/www/htdocs/example1/example2目录中的.htaccess文件有如下内容:
Options Includes
由于第二个.htaccess文件的存在,/www/htdocs/example1/example2中的CGI执行是不允许的,而只允许 Options Includes ,它完全覆盖了之前的设置。
将.htaccess合并到主配置文件中
正如在配置段(容器)中讨论的那样,.htaccess文件能够覆盖<Directory>段中对相应目录的设置,但是也同样会被主配置文件中其它类型的配置段所覆盖。这个特性可以用来强制实施某些配置,甚至在AllowOverride已经许可的情况下。举个例子来说,为了强迫在.htaccess中禁止脚本执行但不限制其它的情况下,可以这样:
<Directory />
Allowoverride All
</Directory>
<Location />
Options +IncludesNoExec -ExecCGI
</Location>
top
认证举例*
如果你只是为了知道如何认证,而直接从这里开始看的,有很重要的一点需要注意,有一种常见的误解,认为实现密码认证必须要使用.htaccess文件,其实是不正确的。把认证指令放在主配置文件的<Directory>段中是一个更好的方法,而.htaccess文件应该仅仅用于无权访问主配置文件的时候。参见上述关于何时应该与何时不应该使用.htaccess文件的讨论。
有此声明在先,如果你仍然需要使用.htaccess文件,请继续看以下说明。
.htaccess文件的内容:
AuthType Basic
AuthName "Password Required"
AuthUserFile /www/passwords/password.file
AuthGroupFile /www/passwords/group.file
Require Group admins
必须设置 AllowOverride AuthConfig 以允许这些指令生效。
更详细的说明,请参见认证、授权、访问控制。
top
服务器端包含(SSI)举例*
.htaccess文件的另一个常见用途是允许一个特定的目录使用服务器端包含(SSI),可以在需要的目录中放置.htaccess文件,并作如下配置:
Options +Includes
AddType text/html shtml
AddHandler server-parsed shtml
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。
更详细的有关服务器端包含的说明,请参见SSI指南。
top
CGI举例*
可以通过.htaccess文件允许在特定的目录中执行CGI程序,需要作如下配置:
Options +ExecCGI
AddHandler cgi-script cgi pl
另外,如下配置可以使给定目录下的所有文件被视为CGI程序:
Options +ExecCGI
SetHandler cgi-script
注意,必须同时设置 AllowOverride Options 和 AllowOverride FileInfo 以使这些指令生效。
更详细的有关CGI编程和配置的说明,请参见CGI指南。
top
疑难解答*
如果在.htaccess文件中的某些指令不起作用,可能有多种原因。
最常见的原因是AllowOverride指令没有被正确设置,必须确保没有对此文件区域设置 AllowOverride None 。有一个很好的测试方法,就是在.htaccess文件随便增加点无意义的垃圾内容,如果服务器没有返回了一个错误消息,那么几乎可以断定设置了 AllowOverride None 。
在访问文档时,如果收到服务器的出错消息,应该检查Apache的错误日志,可以知道.htaccess文件中哪些指令是不允许使用的,也可能会发现需要纠正的语法错误。
http://www.apachemanual.cn/howto/htaccess.html
⑹ 求助,编译apache服务器出问题
随着网络技术的普及、应用和Web技术的不断完善,Web服务已经成为互联网上重要的服务形式之一。原有的客户端/服务器模式正在逐渐被浏览器/服务器模式所取代。本文将重点Apache 服务器的故障排除的技巧。
一、检查配置文件的错误
Apache服务器的设置文件位于/etc/httpd/conf/目录下,传统上使用三个配置文件httpd.conf,access.conf和srm.conf,来配置Apache服务器的行为。在新版本的Apache中,所有的设置都被放在了httpd.conf中,因此只需要调整这个文件中的设置。其中99% Apache服务器错误是配置文件有误。
1 使用apachectl configtest命令
如果配置文件有错误,可以使用apachectl configtest命令,apachectl configtest命令可以检查出所有语法错误和逻辑错误。
实例1
下面是一个配置文件样例片断:
Locatio
erver
tatu
SetHandler server
tatu
Order deny,allow
Deny from all
Allow from
192.168
149
</
Locatio
如果黑体部分的错误写成了“<Location /server-status”少写了一个 >。
apachectl configtest命令会检查到这个问题,输出如下:
apachectl configtest
Syntax error on line
918
of
etc
httpd
conf
httpd.conf:
Locatio
directive missing closing
2 使用服务管理工具
如果配置文件有错误,也可以使用GUI工具来查看。下面是实例1在GUI工具“服务配置“中的体现,如图1 。
图1 使用GUI工具检查错误
二、 学会使用错误日志 错误日志是最重要的日志文件,其文件名和位置取决于ErrorLog指令。Apache httpd将在这个文件中存放诊断信息和处理请求中出现的错误,由于这里经常包含了出错细节以及如何解决,如果服务器启动或运行中有问题,首先就应该查看这个错误日志。错误日志是你的朋友。任何错误都会在错误日志中有所记载,所以你应该首先查看它。如果你的网站空间提供者不允许访问错误日志,那么你应该考虑换一个空间提供者。学会阅读错误日志,可以快速找出问题并快速解决。 1 错误日志格式 Apache 默认的错误日志配置如下: ErrorLog logs/error_log LogLevel warn 配置错误日志相对简单,只要说明日志文件的存放路径和日志记录等级即可。格式为: 日期和时间 错误等级 错误消息 2 日志记录等级 下面着重说说日志记录等级,包括八个级别。 1 级英文名称emerg ,出现紧急情况使得该系统不可用,如系统宕机等 2 级alert 英文名称,需要立即引起注意的情况 3 级 英文名称crit ,危险情况的警告 4级 英文名称error ,除了emerg 、alert、crit 的其他错误 5级英文名称 warn。 警告信息 6级英文名称 notice ,需要引起注意的情况,但不如error、warn 重要 7级英文名称 info ,值得报告的一般消息 8级英文名称 debug, 由运行于debug 模式的程序所产生的消息 错误日志文件举例 错误日志的格式相对灵活,并可以附加文字描述。某些信息会出现在绝大多数记录中,一个典型的例子是: [Wed Oct 11 14:32:52 2007] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test 其中,第一项是错误发生的日期和时间;第二项是错误的严重性,LogLevel指令使只有高于指定严重性级别的错误才会被记录;第三项是导致错误的IP地址;此后是信息本身,在此例中,服务器拒绝了这个客户的访问。服务器在记录被访问文件时,用的是文件系统路径,而不是Web路径。错误日志中会包含类似上述例子的多种类型的信息。此外,CGI脚本中任何输出到stderr的信息会作为调试信息原封不动地记录到错误日志中。用户可以增加或删除错误日志的项。但是对某些特殊请求,在访问日志(access log)中也会有相应的记录,比如上述例子在访问日志中也会有相应的记录,其状态码是403,因为访问日志也可以定制,所以可以从访问日志中得到错误事件的更多信息。 了解错误代码和错误提示 l 常用的错误响应代码如下: 301 :告知用户请求的URL 已经永久的移动到新的URL,用户可以记住新的URL,以便日后直接使用新的URL 进行访问。 302 :告知用户请求的URL 临时的移动到新的URL,用户无需记住新的URL,如果省略错误响应代码,默认就是此值。 303 :告知用户页面已经被替换,用户应该记住新的URL。 401 :授权失败,即密码错误。 403 :Access denied 存取错误,即不可以读取该文件。 404 :File not found 找不到文件。 410 :告知用户请求的页面已经不再存在,使用此代码时不应该使用重定向的URL 参数。 500 :服务器内部错误,可能是Web服务器本身存在问题,也可能是编写的程序出错。 l 错误消息提示说明 “Invalid argument: core_output_filter: writing data to the network” 消息 Apache在可能的平台上使用系统调用sendfile来加速响应的发送。不幸的是,在某些系统上,Apache会在编译时检测sendfile的存在,即使它不能正常工作。这经常发生在使用网络或其他非标准文件系统时。这个问题的表现症状包括上述信息出现在错误日志里及对于非零长度文件请求发送零长度的响应。一般这个问题只发生在静态文件上,因为动态文件通常用不到sendfile 。要修正这个问题,可用EnableSendfile指令关闭服务器所有部分对sendfile的使用即可。同时参看EnableMMAP指令,对相似的问题有帮助。 “Premature end of script headers” 消息 大多数导致这个错误的CGI脚本问题将会向浏览器发送一个"Internal Server Error"错误信息。 “Permission denied” 消息 error_log中的"Permission denied"错误伴随一个发送到客户端的"Forbidden"信息通常表明违反了文件系统的权限,而不是Apache HTTP的配置文件出了错误。检查并确认用于运行子进程的User和Group有访问导致问题的文件的足够权限。同时检查一下导致问题的文件所在的目录及其所有父目录是否具有执行(搜索)权限(也就是 chmod +x)。最近发行的 Fedora Core 和其它Linux发行版使用了SELinux进行额外的访问控制,违反这些限制也会导致"Permission denied"消息。 "POST Method Not Allowed"消息 这说明Apache没有被正确配置以执行CGI程序,重新阅读配置Apache看看遗漏了什么。 "Internal Server Error"消息 查阅Apache错误日志,可以找到CGI程序产生的出错消息"Premature end of script headers"。对此,需要检查下列各项,以找出不能产生正确HTTP头的原因。
1 检查错误日志!
Apache服务器在遇到问题时会尽力做到对你有所帮助。在许多情况下,它会通过在错误日志中写入一条或多条消息来提供一些细节。有时这已经足够让你自己诊断和解决问题了(比如文件权限或类似的问题)。错误日志的默认位置在/usr/local/apache2/logs/error_log ,但是最后还是看看配置文件中的ErrorLog指令以确认错误日志在你服务器上的确切位置。
2 再一次检查语法
Apache 配置文件是httpd.conf 长度通常在80-990行,几乎99%Apache 故障是语法错误引起的。可以手工检查/etc/httpd/conf/httpd.conf,也可以通过浏览器输入:
http://192.168.1.12/server-info?config
获取当前配置文件,如图3 。
图3 当前Apache服务器配置文件
说明:此时系统会自动添加行号。
3 察看Apache的FAQ!
最新版本的Apache常见问题列表总是可以从Apache主站点得到,
4 察看Apache bug数据库
大多数报告给Apache项目组的问题都记录在bug数据库中。在你添加一个新bug之前,请务必检查已有的报告(打开的和关闭的)。如果你发现你的问题已经被报告了,请不要添加一个"我也是"那样的报告。如果原始报告还没有关闭,我们建议你经常周期性地来看看它。你也可以考虑与最初的提交者接触,因为有可能会在邮件交流中发现没有记录在数据库中的问题。
5 在某个用户论坛中提问
Apache拥有一个活跃的、愿意共享知识的用户社区。参与这个社区通常是获得解答的最快最好的办法。
Apache用户邮件列表:
6 提交问题报告到bug数据库
如果做了以上几个合适的步骤而没有得到解答,那么请务必让httpd的开发者了解这个问题,到这里(
)提交bug报告。
7 获取商业支持
⑺ 如何添加Apache服务器用户验证AllowOverride AuthConfig
apache服务器已经内置用户验证机制,大家只要适当的加以设置,便可以控制网站的某些部分要用户验证。
通常分为以下三步:
1、在apache的配置文件httpd.conf中声明要进行验证的目录
2、在要进行验证的目录中创建.htaccess文件,在此文件中指明用于验证的文件存放的位置
3、根据.htaccess指明的位置,用apache自带的htpasswd命令创建用于验证的文件
步骤说明:
假设要对/home/ddd这个目录进行访问控制。(这个目录不在APACHE的主目录中,因此要用alias 添加为虚拟目录)
1、在apache的配置文件httpd.conf中声明要进行验证的目录
编辑httpd.conf
LoadMole auth_mole moles/mod_auth.so #需要加载此模块进行认证
Alias /test "/home/ddd" #添加为虚拟目录
<Directory "/home/ddd">
Options Indexes MultiViews
AllowOverride All #允许用.htaccess文件中指定的验证文件进行身份验证
Order allow,deny
Allow from all
</Directory>
#AllowOverride all 表示进行身份验证 这是关键的设置
此外,也可用AllowOverride AuthConfig
实例:
<VirtualHost *>
ServerName test.xxx.com
ServerAlias xxx.com 123.123.123.123
DocumentRoot /data/ddd/
<Directory "/home/ddd/COLumn/">
Options Indexes FollowSymlinks MultiViews
AllowOverride All
</Directory>
ErrorLog /error.log
</VirtualHost>
2、在要进行验证的目录中创建.htaccess文件,在此文件中指明用于验证的文件存放的位置
在/home/ddd下创建.htaccess文件
vi /home/ddd/.htaccess,内容如下:
AuthName "请输入用户名及口令"
AuthType Basic
AuthUserFile /home/.htpasswd
require valid-user
#AuthName 描述,出现在验证对话框标题栏中
#AuthUserFile /home/.htpasswd (指定验证文件存放于/home中,文件名为.htpasswd,此文件具有隐含属性,其中包括允许访问的用户名及密码。
#require valid-user 使用验证文件中的有效用户进行验证
也可使用 require user <用户> 来指定特定用户进行验证
#密码文件推荐取名为.htpasswd,因为apache默认系统对“.ht”开头的文件默认不允许外部读取,安全系数会高一些。
3、根据.htaccess指明的位置,用apache自带的htpasswd命令创建用于验证的文件
由于已经在第2步中指定验证文件为/home/.htpasswd文件,所以下面创建这个文件
htpasswd -c /home/.htpasswd jp #创建.htpasswd文件,并添加用户jp,会要求输入口令
htpasswd /home/.htpasswd test #.htpasswd文件中添加第二个用户:test)
也可以不通过交互方式,直接在命令行,将口令添加到.htpasswd文件中
htpasswd -bc /home/.htpasswd jp 111 (创建.htpasswd文件,并添加用户jp,密码为111)
htpasswd -b /home/.htpasswd test 222 (.htpasswd文件中添加第二个用户:test 密码为222)
#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数,因为已经有.htpasswd文件,就不用再创建了。-b表示从命令行直接获取参数值,添加到验证文件.htpasswd中
如果想修改密码,可以用如下命令:
htpasswd -m .htpasswd jp
对存放于.htpasswd文件中的用户jp进行口令更改
⑻ 9月28日 centos6上httpd2.2基本配置 2和https的实现
Satisfy ALL|Any
ALL 客户机IP和用户验证都需要通过才可以
Any客户机IP和用户验证,有一个满足即可
有三种实现方案:
基于ip:为每个虚拟主机准备至少一个ip地址
基于port:为每个虚拟主机使用至少一个独立的port
基于FQDN:为每个虚拟主机使用至少一个FQDN
注意:一般虚拟机不要与main主机混用;因此,要使用虚拟主机,一般先禁用main主机
禁用方法:注释中心主机的DocumentRoot指令即可
实验步骤
总结: 基于FQDN的虚拟主机是生产中最常用的,一般我们在搭建虚拟主机时,要将main主机禁用,但如果不禁用,基于ip和端口号创建虚拟主机时main主机不会失效,访问main主机的主站点文件时仍然可以访问到,但如果基于FQDN创建时,main主机就会失效,这个时候如果访问main主机的主站点时,就会跳到虚拟主机的主站点,并且谁是第一个虚拟主机时就会跳到谁那里。因 此创建虚拟主机时最好将main主机禁用。当基于FQDN创建虚拟主机后,如果用http://172.18.21.106/,默认访问的是第一个虚拟主机的主网站文件。
4、访问这个网站就可以看到服务器的状态信息了
①http协议
http/0.9, http/1.0, http/1.1, http/2.0
http协议:stateless 无状态
服务器无法持续追踪访问者来源,也就是当你第二次访问这个服务器时,服务器又不知道你是谁了。
解决http协议无状态方法
cookie :客户端存放,分为两种,一种为重cookie,一种为轻cookie,比如你在淘宝上买东西放到购物车里的东西,服务器会将你的登录信息和一些购物车里的信息以cookie的形式发送给你,并存储在你的主机上,当你下次用同一个主机去访问淘宝时,你会携带这个cookie信息,这时服务器就知道你的身份了,这样购物车里的东西就不会丢失,这种称为重cookie,轻cookie只存放你的登录信息。cookie是服务器端生成后传给客户端的。在浏览器的选项/设置--->高级设置---->网页内容高级设置中可以看到cookie。
session :服务器端存放,cookie要配合session使用,因为cookie只是存放在特定的主机,换了主机之后你之前访问的信息,比如购物车里面的信息又丢失了,session的作用就是将你的cookie里面的登录信息和网站访问记录到一个session表里,并且存储到服务器上,下次你登录淘宝的时候,服务器就会和session里面记录的一些登录信息对比,发现是你的登录信息,就识别出了你,你的访问记录及购物车里面的东西不会丢失。
http事务:一次访问的过程
请求:request
响应:response
②HTTP请求报文和响应报文
③报文语法格式:
request报文
<method> <request-URL> <version>
<headers>
<entity-body>
response报文
<version> <status> <reason-phrase>
<headers>
<entity-body>
method: 请求方法,标明客户端希望对服务器资源执行的动作。
Method 方法:
GET:从服务器获取一个资源
HEAD:只从服务器获取文档的响应首部
POST:向服务器输入数据,比如字符串等,通常会再由网关程序继续处理
PUT:将请求的主体部分存储在服务器中,如上传文件
DELETE:请求删除服务器上指定的文档
TRACE:追踪请求到达服务器中间经过的代理服务器
OPTIONS:请求服务器返回对指定资源支持使用的请求方法
version:
HTTP/<major>.<minor>,比如HTTP/1.1---目前用的比较多的协议类型
status:
三位数字,如200,301, 302, 404, 502; 标记请求处理过程中发生的情况
reason-phrase:
状态码所标记的状态的简要描述
headers:
每个请求或响应报文可包含任意个首部;每个首部都有首部名称,后面跟一个冒号,而后跟一个可选空格,接着是一个值
entity-body:请求时附加的数据或响应时附加的数据
④http协议状态码分类
status(状态码):
1xx:100-101信息提示
2xx:200-206成功
3xx:300-305重定向
4xx:400-415错误类信息,客户端错误
5xx:500-505错误类信息,服务器端错误
常用的状态码
200:成功,请求数据通过响应报文的entity-body部分发送;OK
301:请求的URL指向的资源已经被删除;但在响应报文中通过首部Location指明了资源现在所处的新位置;Moved Permanently,表示永久重定向,在配置文件里设置网站的别名时就是永久的重定向。
302:响应报文Location指明资源临时新位置Moved Temporarily,是临时重定向。
304:客户端发出了条件式请求,但服务器上的资源未曾发生改变,则通过响应此响应状态码通知客户端;Not Modified,表示服务器端是利用缓存把资源发送给客户端,可以用ctrl+f5强制刷新。
401:需要输入账号和密码认证方能访问资源;Unauthorized,基于basic认证登录时会在日志里面发现这个状态码。
403:请求被禁止;Forbidden,一个原因是服务器的配置文件里面设定了允许哪些主机访问,另外一个原因可能是你访问的文件夹文件系统的权限不足。
404:服务器无法找到客户端请求的资源;Not Found
500:服务器内部错误;Internal Server Error
502:代理服务器从后端服务器收到了一条伪响应,如无法连接到网关;Bad Gateway
503 :服务不可用,临时服务器维护或过载,服务器无法处理请求
504:网关超时
总结:method是客户端请求服务器端要做什么,而状态码是服务器端返回给客户端的状态信息。
更多信息可以参考火狐浏览器: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
⑤http协议首部
首部的分类:通用首部、请求首部、响应首部、实体首部、扩展首部
通用首部:
Date: 报文的创建时间
Connection:连接状态,如keep-alive, close
Via:显示报文经过的中间节点(代理,网关)
Cache-Control:控制缓存,如缓存时长
MIME-Version:发送端使用的MIME版本
请求首部:
Accept:通知服务器自己可接受的媒体类型
Accept-Charset:客户端可接受的字符集
Accept-Encoding:客户端可接受编码格式,如gzip
Accept-Language:客户端可接受的语言
Client-IP: 请求的客户端IP
Host: 请求的服务器名称和端口号
Referer:跳转至当前URI的前一个URL
User-Agent:客户端代理,浏览器版本
curl [options] [URL...]
-A/--user-agent <string> 设置用户代理发送给服务器
-e/--referer<URL> 来源网址
--cacert<file> CA证书(SSL)
-k/--insecure 允许忽略证书进行SSL 连接
--compressed 要求返回是压缩的格式
-H/--header <line>自定义首部信息传递给服务器
-i显示页面内容,包括报文首部信息
-I/--head 只显示响应报文首部信息
-D/--mp-header <file>将url的header信息存放在指定文件中
--limit-rate <rate> 设置传输速度
--basic 使用HTTP基本认证
-u/--user <user[:password]>设置服务器的用户和密码
-L 如果有3xx响应码,重新发请求到新位置,进行强制重定向
-o<file> 将网络文件保存为指定的文件中
-O使用URL中默认的文件名保存文件到本地
-0/--http1.0 使用HTTP 1.0
-C -选项可对文件使用断点续传功能
-c/--cookie-jar <file name> 将url中cookie存放在指定文件中
-x/--proxy <proxyhost[:port]> 指定代理服务器地址
-X/--request <command> 向服务器发送指定请求方法
-U/--proxy-user <user:password> 代理服务器用户和密码
-T 选项可将指定的本地文件上传到FTP服务器上
--data/-d 方式指定使用POST方式传递数据
elinks工具:
elinks[OPTION]... [URL]...
-mp: 非交互式模式,将URL的内容输出至标准输出
-source:打印源码
用法和links相同。
示例
使用deflate_mole模块压缩页面优化传输速度
适用场景:
(1) 节约带宽,额外消耗CPU;同时,可能有些较老浏览器不支持
(2) 压缩适于压缩的资源,例如文本文件
Level of compression (Highest 9 -Lowest 1)
DeflateCompressionLevel 9
示例
https:http over ssl
SSL会话的简化过程
(1) 客户端发送可供选择的加密方式,并向服务器请求证书
(2) 服务器端发送证书以及选定的加密方式给客户端,这个证书是用CA的私钥加密的服务器的公钥以及证书的有效期等信息,也就是CA数字签名的证书。
(3) 客户端取得证书并进行证书验证
如果信任给服务器发证书的CA,客户端会实验得到CA的公钥
(a) 验证证书来源的合法性;用CA的公钥解密证书上数字签名
(b) 验证证书的内容的合法性:完整性验证
(c) 检查证书的有效期限
(d) 检查证书是否被吊销
(e) 证书中拥有者的名字,与访问的目标主机要一致
(4) 客户端生成临时会话密钥(对称密钥),并使用服务器端的公钥加密此数据发送给服务器,完成密钥交换
(5) 服务用此密钥加密用户请求的资源,响应给客户端
实现过程如下:
将http请求转发至https的URL
重定向
Redirect [status] URL-path URL
status状态分为两种:
Permanent(永久重定向):Returnsa permanent redirect status (301) indicating that the resource has moved permanently
Temp(临时重定向):Returnsa temporary redirect status (302). This is the default
示例:
HSTS:HTTP Strict Transport Security
服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS,而无需任何网络过程
支持HSTS后只需要两步就实现跳转,而且只有第一次跑到服务器端进行跳转,下一次访问就直接在浏览器端就进行跳转了,浏览器已经记住了这个网站的服务器支持HSTS,这样既提高了效率又比较安全
HSTS preload list
是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也会采用这个列表,也就是解决了上面的第一次跑到服务器端进行跳转的问题,直接在浏览器端就进行了跳转,更安全,不过这个是浏览器自己设置的功能。
实验
⑼ .htaccess文件的常见用法(301、404等配置)
body{
line-height:200%;
}
.htaccess文件的常见用法(301、404等配置)
.htaccess文件是apache服务器中的一个配置文件,它的功能是网站目录的配置。通过.htaccess文件,可以实现以下功能:网页301重定向、防盗链、自定义404错误页面、用户认证和授权、禁止目录列表、配置默认文档等功能。
.htaccess文件实现301重定向
RewriteEngine
on
rewritecond
%{http_host}
^zzidc.com[nc]
rewriterule
^(.*)$
http://zzidc.com/$1
[L,R=301]
.htaccess文件实现404
<Files
~
"^.(htaccess|htpasswd)$">
deny
from
all
</Files>
ErrorDocument
404
/404.html
//此段为功能代码
order
deny,allow
.htaccess文件实现用户认证和授权
AllowOverride
None
//不使用“.htaccess文件”
AuthType
Basic
//认证类型为基本认证
AuthName"this
is
a
test
directory.
please
login:"
//设置认证领域说明
AuthUserFile/etc/httpd/mypasswd
//指定认证口令文件的所在目录和名称
Require
valid-user
//授权给认证口令文件中的所有用户
.htaccess文件实现防盗链
RewriteEngine
on
RewriteCond
%{
HTTP_REFERER
}
!^$
RewriteCond
%{
HTTP_REFERER
}
!^http://(www.)?mydomain.com/.*$
[NC]
RewriteRule
.(gif&line;jpg)$
http://www.mydomain.com/替代名
[R,L]
.htaccess文件禁止目录列表
<Files
~
".*">
Order
allow,deny
Deny
from
all
</Files>
Options
-Indexes
//此段为功能代码
.htaccess文件配置默认文档
<Files
~
"^.(htaccess|htpasswd)$">
deny
from
all
</Files>
DirectoryIndex
index.html
index.php
//此段为功能代码
order
deny,allow
推荐阅读:iis安全防盗链设置
⑽ svn apache 配置后浏览器访问,不停的提示输入用户名密码,centos下配的,取消了就401错误
1、检查是否在apache的httpd.conf中正确指定了用户密码文件?
2、检查是否成功添加了Apache用户帐号?
3、检查是否输入了正确的用户名和密码?