HTTP学习(二)

来源:互联网 发布:如何删除淘宝精选 编辑:程序博客网 时间:2024/05/16 19:02

Http学习(二)

参考文献:

[1]上野·宣.图解HTTP [M]北京:人民邮电出版社,2015.04;

目录:

1、常见的HTTP响应状态码:

2、常用的HTTP方法:

3、HTTP首部:


1、常见的HTTP响应状态码:

(1)状态码的职责是当客户端向服务器端发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误。

(2)状态码由三位数字和原因短语组成。

(3)状态码的第一位数字指定了响应类别,后面两位数字没有具体的分类。

响应类别有五种取值:

①–1xx:信息性状态码(Informational),接收的请求正在处理

②–2xx:成功状态码(Success),请求正常处理完毕

③–3xx:重定向状态码(Redirection),需要进行附加操作以完成请求

④–4xx:客户端错误状态码(Client Error),服务器无法处理请求

⑤–5xx:服务器端错误状态码(Server Error),服务器处理请求出错

(4)常见的状态码:

A)200 OK:

请求已正常处理

在响应报文内,随状态码一起返回的信息会因方法的不同而发生改变。当使用GET方法时,对应请求资源的实体会作为响应返回;当使用HEAD方法时,在响应中只返回首部,不会返回实体的主体部分。

B)204 No Content:

请求处理成功,但没有资源可返回

当从浏览器发出请求处理后,返回204响应,那么浏览器显示的页面不发生更新。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。

C)206 Partial Content:

对资源某一部分的请求

响应报文中包含由Content-Range指定范围的实体内容。

D)301 Moved Permanently:

永久性重定向

该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。如果用户已经把资源对应的URI保存为书签了,则此时应该按Location首部字段提示的URI重新保存。

应用场景:

①开发中网站测试周期长,搜索引擎已收录测试的域名,搜公司名时,会打开测试地址;

②网站更换域名时,希望百度原来收录的域名点击之后直接打开新的域名;

③百度权重及排名分散在主域名和www子域名中,导致优化效果不好,需要把www子域名权重转化到主域名中。

实现301永久性重定向的方法:在apache环境下,开启rewrite模块,将客户新旧域名、主域名全部指向新站点,然后在新站点的根目录下创建.htaccess文件,并将下面的代码拷贝到.htaccess的所有规则之前(以某网站为例,测试地址为remoa.com,主域名为www.main.com)

Options +FollowSymlinks

RewriteEngine on  

RewriteCond %{http_host} ^remoa.com [NC]  

RewriteRule ^(.*)$ http://www.main.com/$1 [R=301,NC]   

E)302 Found:

临时性重定向

请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。已移动的资源对应的URI将来还有可能发生改变。

F)303 See Other:

由于请求的资源存在另一个URI,希望客户端应使用GET方法定向获取请求的资源。

########

当301,302,303响应状态码返回时,几乎所有的浏览器都会把POST改为GET,并删除请求报文内的主体,之后请求会自动再次发送。

301、302标准是禁止将POST方法改变成GET方法的,但实际使用时大家都这么做。

########

G)304 Not Modified:

客户端发送附带条件的请求时,条件不满足时返回,与重定向无关。

304状态码返回时,不包含任何响应的主体部分。服务器端资源未改变,可直接使用客户端未过期的缓存。

H)307 Temporary Redirect:

临时重定向

与302类似,只是强制要求使用POST方法

I)400 Bad Request:

请求报文中存在语法错误,服务器无法识别

当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像200 OK一样对待该状态码。

J)401 Unauthorized:

请求需要通过HTTP认证(BASIC认证、DIGEST认证)的认证信息

返回401的响应必须含有一个适用于被请求资源的WWW-Authenticate首部用以质询(challenge)用户信息。当浏览器初次接收到401响应,会弹出认证用的对话窗口。

K)403 Forbidden:

对请求资源的访问被服务器拒绝了

服务器通常会在响应正文中给出不提供服务的原因。未获得文件系统的访问授权,从未授权的发送源IP地址试图访问等情况都是发生403的原因。

L)404 Not Found:

服务器上无法找到请求的资源。

在服务器端拒绝请求且不想说明原因时也可使用404。

M)500 Internal Server Error:

服务器端在执行请求时发生了错误。也可能是Web应用存在的bug或某些临时的故障。

N)503 Service Unavailable:

服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

如果事先得知解除以上状况需要的时间,最好写入Retry-After首部字段再返回给客户端。

 

2、常用的HTTP方法:

(1)GET:获取资源

请求访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。

如:使用百度搜索引擎搜索某个关键字,就是通过GET方法来请求的。

 

图2.1 GET请求

(2)POST:传输实体主体

用来传输实体的主体。

(3)PUT:传输文件

因为HTTP/1.1的PUT方法自身不带验证机制,所以存在安全性问题。若配合Web应用程序的验证机制,或架构设计采用REST标准的同类Web网站,才可能会开放使用PUT方法。

(4)HEAD:获得报文首部

用于确认URI的有效性及资源更新的日期时间等。

(5)DELETE:删除文件

按请求URI删除指定的资源。

当配合Web应用程序的验证机制,或遵守REST标准时还是有可能会开放使用的。

(6)OPTIONS:询问支持的方法

用来查询针对请求URI指定的资源支持的方法。

(7)TRACE:追踪路径

让Web服务器端将之前的请求通信环回给客户端的方法。

发送请求时,在Max-Forwards首部字段(最大传输逐跳数)中填入数值,每经过一个服务器端就将该数字减1,当数值刚好减到0时,就停止继续传输,最后接收到请求的服务器端则返回状态码200 OK的响应。

客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改/篡改的。请求想要连接到源目标服务器可能会通过代理中转,TRACE方法就是用来确认连接过程中发生的一系列操作。

但是TRACE方法容易引发XST跨站追踪攻击,所以通常不会用到。

(8)CONNECT:要求用隧道协议连接代理

CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接字)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

CONNECT方法的格式:

CONNECT 代理服务器名:端口号 HTTP版本

 

3、HTTP首部:

对来赛报名系统的login登录头部信息进行查看:

 

图3.1 首部信息查看

General通用首部字段:

 

图3.2 通用首部信息查看

Status Code:302 Found

请求的资源checklogin.action已被分配了新的URI,希望用户本次能使用新的URI访问。新的URL,person.action会在response中的Location中返回,浏览器将会使用新的URL发出新的Request。

 

图3.3 URL截图

Referrer Policy(推荐策略):

在页面引入图片、JS 等资源,或者从一个页面跳到另一个页面,都会产生新的 HTTP 请求,浏览器一般都会给这些请求头加上表示来源的 Referrer 字段。Referrer 在分析用户来源时很有用,有着广泛的使用。

2014 年,W3C 的 Web 应用安全工作组(Web Application Security Working Group)发布了Referrer Policy草案,对浏览器该如何发送 Referrer 做了详细的规定。

五种Referrer策略:

①No Referrer :任何情况下都不发送 Referrer 信息;

②No Referrer When Downgrade :仅当发生协议降级(如 HTTPS 页面引入 HTTP 资源,从 HTTPS 页面跳到 HTTP 等)时不发送 Referrer 信息。这个规则是现在大部分浏览器默认所采用的;

③Origin Only :发送只包含 host 部分的 Referrer。启用这个规则,无论是否发生协议降级,无论是本站链接还是站外链接,都会发送 Referrer 信息,但是只包含协议 + host 部分(不包含具体的路径及参数等信息);

④Origin When Cross-origin :仅在发生跨域访问时发送只包含 host 的 Referrer,同域下还是完整的。它与Origin Only的区别是多判断了是否Cross-origin。需要注意的是协议、域名和端口都一致,才会被浏览器认为是同域;

⑤Unsafe URL :无论是否发生协议降级,无论是本站链接还是站外链接,统统都发送 Referrer 信息。正如其名,这是最宽松而最不安全的策略;

 

图3.5 响应头

HTTP版本 + 状态码

响应首部字段:

Server:HTTP服务器软件名称

Location:令客户端重定向至指定URI

响应实体首部字段:

Content-Language:响应实体主体的语言

Content-length:响应实体主体的大小(单位:字节)

通用首部字段:

Date:原始服务器消息发出的时间

 

图3.6 请求头

请求方法 + URI + HTTP版本

请求首部字段:

Host:请求资源所在服务器

Content-length:请求实体主体的大小(单位:字节)

User-Agent:HTTP客户端程序的信息

Accept:用户代理可处理的媒体类型,即客户端能接收的内容类型

Referer:对请求中URI的原始获取方,即先前网页的地址,当前请求的网页紧随其后

Accept-Encoding:优先的内容编码,指定浏览器可以支持的web服务器返回内容压缩编码类型

Accept-Language:优先的语言,浏览器可接受的语言

Cookie:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器

通用首部字段:

Connection:表示是否需要持久连接。HTTP1.1默认进行持久连接。

Cache-control:指定请求和响应遵循的缓存机制

Origin:只用于post请求,说明最初请求是从哪里发起的

Upgrade-Insecure-Requests:https需要加载http的资源,chrome告诉服务器,浏览器可以处理https协议,对于页面的http资源,请求时可以自动升级到https

实体首部字段:

Content-Type:请求实体对应的MIME信息

 

图3.7 表单数据

Form-data:表单数据

usermail:邮箱号

userpassword:用户密码

 

图3.8 登录表单截图


原创粉丝点击