HTTP请求报文与响应报文 RHCE第二天

目录

一.实现免密登录

1.Linux下生成密钥 

2.远程免密登录

 2.1 通过ssh-copy-id的方式

2.2 通过scp将内容写到对方的文件中

2.3 通过Ansible实现批量免密

2.4 手工复制粘贴的方式

二.get与post的区别

1.常用http请求方法用途

 2.get与post的区别

三.HTTP状态码

1xx:信息提示

2xx:成功

3xx:重定向

4xx:客户端错误

5xx:服务器错误

四.HTTP请求报文和响应报文

1.HTTP的请求报文格式:

​编辑2.HTTP响应报文格式:

五.HTTP是如何保持连接状态的 

1.网址重写

2.隐藏域

4.HttpSession对象


一.实现免密登录

1.Linux下生成密钥 

  ssh-keygen的命令手册,通过"man ssh-keygen"命令:

   通过命令"ssh-keygen -t rsa"

 生成之后会在用户的根目录生成一个 ".ssh"的文件夹

 

进入".ssh"会生成以下几个文件

 

 authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
  id_rsa : 生成的私钥文件
  id_rsa.pub : 生成的公钥文件
  know_hosts : 已知的主机公钥清单

    如果希望ssh公钥生效需满足至少下面两个条件:

      1) .ssh目录的权限必须是700 
      2) .ssh/authorized_keys文件权限必须是600

2.远程免密登录

  原理图:

    

 

   常用以下几种方法:

 2.1 通过ssh-copy-id的方式

命令: ssh-copy-id -i ~/.ssh/id_rsa.put <romte_ip>

举例:      

[root@test .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.91.135 
root@192.168.91.135's password: 
Now try logging into the machine, with "ssh '192.168.91.135'", and check in:

.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[root@test .ssh]# ssh root@192.168.91.135
Last login: Mon Oct 10 01:25:49 2016 from 192.168.91.133
[root@localhost ~]#

常见错误:

[root@test ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.91.135

-bash: ssh-copy-id: command not found   //提示命令不存在

解决办法:yum -y install openssh-clients

2.2 通过scp将内容写到对方的文件中

命令:scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys

举例:

[root@test .ssh]# scp -p ~/.ssh/id_rsa.pub root@192.168.91.135:/root/.ssh/authorized_keys
root@192.168.91.135's password: 
id_rsa.pub 100% 408 0.4KB/s 00:00 
[root@test .ssh]# 
[root@test .ssh]# 
[root@test .ssh]# 
[root@test .ssh]# ssh root@192.168.91.135
Last login: Mon Oct 10 01:27:02 2016 from 192.168.91.133

   

[root@localhost ~]#

   

也可以分为两步操作:

$ scp ~/.ssh/id_rsa.pub root@<remote_ip>:pub_key       //将文件拷贝至远程服务器
$ cat ~/pub_key >>~/.ssh/authorized_keys                     //将内容追加到authorized_keys文件中, 不过要登录远程服务器来执行这条命令

2.3 通过Ansible实现批量免密

2.3.1 将需要做免密操作的机器hosts添加到/etc/ansible/hosts下:


  [Avoid close]
  192.168.91.132
  192.168.91.133
  192.168.91.134

2.3.2 执行命令进行免密操作

ansible <groupname> -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k

示例:
[root@test sshpass-1.05]# ansible test -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k
  SSH password: ----->输入密码
  192.168.91.135 | success >> {
  "changed": true, 
  "key": "ssh-rsa     AAAAB3NzaC1yc2EAAAABIwAAAQEArZI4kxlYuw7j1nt5ueIpTPWfGBJoZ8Mb02OJHR8yGW7A3izwT3/uhkK7RkaGavBbAlprp5bxp3i0TyNxa/apBQG5NiqhYO8YCuiGYGsQAGwZCBlNLF3gq1/18B6FV5moE/8yTbFA4dBQahdtVP  PejLlSAbb5ZoGK8AtLlcRq49IENoXB99tnFVn3gMM0aX24ido1ZF9RfRWzfYF7bVsLsrIiMPmVNe5KaGL9kZ0svzoZ708yjWQQCEYWp0m+sODbtGPC34HMGAHjFlsC/SJffLuT/ug/hhCJUYeExHIkJF8OyvfC6DeF7ArI6zdKER7D8M0SM  WQmpKUltj2nltuv3w== root@localhost.localdomain", 
  "key_options": null, 
  "keyfile": "/root/.ssh/authorized_keys", 
  "manage_dir": true, 
  "path": null, 
  "state": "present", 
  "unique": false, 
  "user": "root"
  }
  [root@test sshpass-1.05]# 

2.4 手工复制粘贴的方式

  将本地id_rsa.pub文件的内容拷贝至远程服务器的~/.ssh/authorized_keys文件中


二.get与post的区别

1.常用http请求方法用途

 图2-1

 2.get与post的区别

浏览器回退的时候get不会重新请求,post会 
get请求会被浏览器主动缓存,post不会 
get请求的参数会保留在浏览器历史记录里面,post不会。为了防止CSRF攻击建议使用post 
get请求在url中传递的参数有大小限制(不同浏览器限制不同,基本是2kb),而post没有 
get的参数是直接暴露在url上的,相对不安全。post的请求参数是在请求体中的

 图2-2

post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
post发送的数据更大(get有url长度限制)
post能发送更多的数据类型(get只能发送ASCII字符)
post比get慢
post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作(淘宝,支付宝的搜索查询都是get提交),目的是资源的获取,读取数据

 图2-3

图2-4 

 

图2-5 

 

图2-6 

 图2-7

三.HTTP状态码

1xx:信息提示

这类状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。

HTTP 状态码         说明
100                       继续。
101                    切换协议。


2xx:成功


这类状态代码表明服务器成功地接受了客户端请求。

HTTP 状态码             说明
200                       确定。客户端请求已成功。
201                       已创建。
202                       已接受。
203                      非权威性信息。
204                      无内容。
205                      重置内容。
206                      部分内容。表明已部分下载了一个文件。可以续传损坏的下载,或者将下载拆分为多个并发的流。
207                      多状态(WebDAV)。此消息之前应该还有一条 XML 消息,其中可能包含几个单独的响应代码,具体取决于发出了多少个子请求。


3xx:重定向

客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同页面,或通过代理服务器重复该请求。

HTTP 状态码                              说明
301                                     已永久移动。此请求和之后所有的请求都应该转到指定的 URI。
302                                     对象已移动。对于基于表单的身份验证,此消息通常表示为“对象已移动”。请求的资源临时驻留在不同的 URI。由于重定向有时可能会改变,客户端将来在请求时应该继续使用 RequestURI。只有在 CacheControl 或 Expires 标题字段中指示,此响应才能够缓存。
304                                     未修改。客户端请求的文档已在其缓存中,文档自缓存以来尚未被修改过。客户端使用文档的缓存副本,而不从服务器下载文档。
307                                     临时重定向。


4xx:客户端错误


发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。

HTTP 状态码                               说明
400                                        错误的请求。
401                                        访问被拒绝。IIS 定义了几个不同的401错误,用于指示更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示。详见 401状态码。
403                                        服务器拒绝请求。可以理解为没有权限访问此网站,服务器能够收到请求但拒绝提供服务。IIS 定义了几个不同的403错误,用于指示更为具体的错误原因,详见 403状态码。
404                                        服务器找不到请求的网页。例如,访问网站中不存在的页面,或者原有页面被移走或删除,则可能会出现该状态码。IIS 定义了几个不同的404错误,用于指示更为具体的错误原因,详见 404状态码。
405                                        用来访问本页面的 HTTP 谓词不被允许(方法不被允许)。当客户端向运行 IIS 的服务器发送一个 HTTP 请求,并且该请求包含服务器无法识别的 HTTP 动词时,就会发生此错误。若要解决此问题,请确保客户端的请求使用与 HTTP rfc 兼容的 HTTP 动词。
406                                        客户端浏览器不接受所请求页面的 MIME 类型。
407                                        要求进行代理身份验证。
412                                        前提条件失败。
413                                        请求实体太大。
414                                        请求 URI 太长。
415                                         不支持的媒体类型。
416                                       无法满足请求的范围。
417                                       执行失败。
423                                        锁定的错误。

401  状态码
HTTP 状态码              说明
401.1                        用户名或密码无效导致登录失败。
401.2                        服务器配置导致登录失败。
401.3                        由于 ACL 对资源的限制而未获得授权。表示存在 NTFS 权限问题。即使您对试图访问的文件具备相应的权限,也可能发生此错误。例如,如果 IUSR 帐户无权访问 C:WinntSystem32Inetsrv 目录,您会看到这个错误。
401.4                         筛选器授权失败。
401.5                        ISAPI/CGI 应用程序授权失败。
401.7                       由 Web 服务器上的 URL 验证策略拒绝访问。这个错误代码为 IIS 6.0 所专用。

403 状态码
HTTP 状态码              说明
403.1                    执行访问被禁止。可能原因:
您没有足够的执行许可。例如,如果试图访问的 ASP 页所在的目录权限设为 “无”,或者,试图执行的 CGI 脚本所在的目录权限为 “只允许脚本”,将出现此错误消息。若要修改执行权限,请在 Microsoft 管理控制台(MMC)中右击目录,然后依次单击 “属性” 和 “目录” 选项卡,确保为试图访问的内容设置适当的执行权限。
您没有将试图执行的文件类型的脚本映射设置为识别所使用的谓词(例如,GET 或 POST)。若要验证这一点,请在 Microsoft 管理控制台中右键单击目录,依次单击 “属性”、“目录” 选项卡和 “配置”,然后验证相应文件类型的脚本映射是否设置为允许所使用的谓词。
403.2                     读访问被禁止。验证是否已将 IIS 设置为允许对目录进行读访问。另外,如果您正在使用默认文件,请验证该文件是否存在。
403.3                    写访问被禁止。验证 IIS 权限和 NTFS 权限是否已设置以便向该目录授予写访问权。
403.4                      要求 SSL。禁用要求安全通道选项,或使用 HTTPS 代替 HTTP 来访问该页面。
403.5                     要求 SSL 128。禁用要求128位加密选项,或使用支持128位加密的浏览器以查看该页面。
403.6                      IP 地址被拒绝。您已经将服务器配置为拒绝访问您当前的 IP 地址。
403.7                    要求客户端证书。您已经将服务器配置为要求提供证书进行客户端身份验证,但是您没有安装有效的客户端证书。
403.8                    站点访问被拒绝。您已经为用来访问服务器的域设置了域名限制。
403.9                     用户数过多。与该服务器连接的用户数量超过了您设置的连接限制。注意:Microsoft Windows 2000 Professional 和 Windows XP Professional 自动设置了在 IIS 上最多10个连接的限制。您无法更改此限制。
403.10                   配置无效。
403.11                 密码更改。
403.12                    拒绝访问映射表。您要访问的页面要求提供客户端证书。但是,映射到该客户端证书的用户 ID 已经拒绝访问该文件。
403.13              客户端证书被吊销。
403.14                 拒绝目录列表。
403.15                 超出客户端访问许可。
403.16                  客户端证书不受信任或无效。
403.17                 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。
403.19                   不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。
403.20                   Passport 登录失败。这个错误代码为 IIS 6.0 所专用。

404 状态码
HTTP 状态码                   说明
404.0                         没有找到文件或目录。
404.1                       无法通过请求的端口访问网站。此错误消息表明,试图访问的网站的 IP 地址不接受来自此请求所用端口的请求。
404.2                        Web 服务扩展锁定策略阻止本请求。在 IIS 6.0 中,表示 Web 服务扩展列表中已经阻止了该请求。
404.3                        MIME 映射策略阻止了此请求。 如果存在下列情况,将出现此问题:
未配置请求的文件扩展名的处理程序映射。
没有为网站或应用程序配置相应的 MIME 类型。


5xx:服务器错误


服务器由于遇到错误而不能完成该请求。

HTTP 状态码                    说明
500                                内部服务器错误。很多服务器端错误都可能导致此错误消息。事件查看器日志包含更详细的错误原因。此外,您可以禁用友好 HTTP 错误消息以便收到详细的错误说明。IIS 定义了几个不同的500错误,用于指示更为具体的错误原因,详见 500状态码。
501                        页眉值指定了未实现的配置。
502                            Web 服务器作为网关或代理服务器时,从上游服务器收到了无效响应。此类错误一般与服务器本身有关(与请求无关)。IIS 定义了几个不同的502错误,用于指示更为具体的错误原因,详见 502状态码。
503                              目前服务器无法使用,一般是因为服务器超载或停止维护。
504                         网关超时。
505                      HTTP 版本不受支持。

500状态码
HTTP 状态码                  说明
500.12                        应用程序正忙于在 Web 服务器上重新启动。这表示您在 IIS 重新启动应用程序的过程中试图加载 ASP 页。刷新页面后,此消息即会消失。如果刷新页面后,此消息再次出现,可能是防病毒软件正在扫描 Global.asa 文件。
500.13                       Web 服务器太忙。
500.15                       不允许直接请求 Global.asa。
500.16                       UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。
500.18                       无法打开 URL 授权存储库。这个错误代码为 IIS 6.0 所专用。
500.19                         此文件的数据在元数据库中配置不正确。如果 XML 元数据库在您尝试访问的内容类型中包含无效的配置信息,您就会收到此错误。要解决此问题,请删除或更正无效的配置。此问题通常表示 ScriptMap 元数据库键中存在问题。
500.100                      内部 ASP 错误。 如果试图加载的 ASP 页中含有错误代码,将出现此错误消息。若要获得更确切的错误消息,请禁用友好 HTTP 错误消息。默认情况下,只会在默认网站上启用此错误消息。

502 状态码
HTTP 状态码                   说明
502.1                       CGI 应用程序超时。
502.2                       CGI 应用程序出错。

四.HTTP请求报文和响应报文

1.HTTP的请求报文格式:


HTTP的请求报文内容包括:
  请求行(request line)、请求头部(header)、空行 和 请求数据(request data) 四个部分组成。

 在这里插入图片描述

 请求行主要包括:请求方法、URL、协议版本
请求头部包括:各类配置信息的key-value值

在这里插入图片描述
2.HTTP响应报文格式:

HTTP的响应报文内容包括:
  状态行、响应头、空行、数据(响应体)四个部分组成。

在这里插入图片描述 

状态行主要包括:协议版本、状态码、状态值
响应头主要包括:各类配置信息的key-value值

在这里插入图片描述

五.HTTP是如何保持连接状态的 

1.网址重写

网址重写是一种Session追踪技术,需要将一个或多个token作为一个查询字符串添加到一个URL中

token格式为url?key-1=value-1&key-2=value-2

网址重写只适用于那些既需要保持,却又不跨越太多页面,并且又不太重要的信息。

任何相对的URL(没有协议部分的URL)都会被当作是相对于当前页面的URL。

举例:分页中的下一页

如第二页的url为:xxx?pageNum=2&pageSize=10

2.隐藏域

将值放在HTML表单的隐藏域中。当用户提交表单时,隐藏域中的值也传送到服务器。只有当页面包含表单,或者可以在页面中添加表单时,才适合使用隐藏域。这种技术胜过网址重写技术的地方在于,可以将更多的字符传到服务器,并且不需要进行字符编码。但是像网址重写一样,也只有当要传递的信息不需要跨越多个页面时,才适合使用这种技术。

举例:比如在html页面表单中修改用户相关的内容时,要将用户id放在隐藏域中

cookie是自动地在Web服务器和浏览器之间来回传递的一小块信息。cookie适用于那些需要跨越许多页面的信息,cookie是作为HTTP标头嵌入的。

cookie的不足之处在于,用户可以通过修改浏览器设置来拒绝接受cookie。

要使用cookie,必须熟悉javax.servlet.http.Cookie类,以及HttpServletRequest和HttpServletResponse接口中的几个方法

当浏览器再次发出对同一个资源或者对同一台服务器中的不同资源的请求时,它会同时把从Web浏览器处收到的cookie再传回去。

cookie也可以利用JavaScript在客户端进行创建和删除
 

//将一个cookie 发送到浏览器
httpServletResponse .addCookie(cookie);
 
//访问浏览器发出的cookie
Cookie[) cookies= request.getCookies() ;
Cookie maxRecordsCookie = null ;
if (cookies ! = null) {
	for (Cookie cookie : cookies) {
		if (cookie.getName().equals( "maxRecords” ))
			maxRecordsCookie = cookie ;
			break;
		}
	}
}
//删除cookie
//创建一个同名的cookie
Cookie cookie= new Cookie (”userName”,””);
//将maxAge属性设置为0
cookie.setMaxAge(O);
response.addCookie(cookie);

4.HttpSession对象

在所有的Session追踪技术中,HttpSession对象是最强大的,也是功能最多的。用户可以没有或者有一个HttpSession,并且只能访问自己的HttpSession

HttpSession是当一个用户第一次访问某个网站时自动创建的。通过在HttpServletRequest中调用getSession方法,可以获取用户的HttpSession

与网址重写、隐藏域和cookie不同的地方在于,放在HttpSession中的值是保存在服务器的内存中的。注意,HttpSession中保存的值不发送到客户端,这与其他的Session管理方法不同。Servlet容器为它所创建的每一个HttpSession生成一个唯一标识符,并将这个标识符作为一个token发送给浏览器,一般是作为一个名为JSESSIONID的cookie,或者作为一个jsessionid参数添加到URL后面。在后续的请求中,浏览器会将这个token发送回服务器,使服务器能够知道是哪个用户在发出请求。

HttpSession中还定义了一个invalidate方法。这个方法强制Session过期,并将绑定到它的所有对象都解除绑定。在默认情况下,HttpSession是在用户静默一定时间之后过期。可以在部署描述符的session-timeout元素中将session的期限设置为整个应用程序

添加到HttpSession中的值不一定是String,可以为任意Java 对象,只要它的类实现了java.io.Serializable接口即可,以便当Servlet容器认为有必要的时候,保存的对象可以序列化成一个文件或者保存到数据库中。

//将一个值放在HttpSession中
void setAttribute (java.lang.String name, java.lang.Object value)
 
//获取HttpSession 中保存的对象
java.lang.Object getAttribute(java.lang.String name)
 
//迭代一个HttpSession 中的所有属性
java.util.Enumeration<java.lang.String> getAttributeNames()

在使用HttpSession对象时要注意:每个对象都会消耗服务器的内存。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值