当浏览器发起http请求,服务器在响应http请求时,会把http状态码加载响应报文的状态行中,状态码的含义如下
1** | 信息,服务器收到请求,请求者继续操作 | |
2** | 成功,操作成功接收并处理 | 200:请求成功 |
3** | 重定向,需要进一步的操作完成请求 | 301 :资源被永久转移到其他URL |
4** | 客户端错误,请求包含语法错误或无法完成请求 | 404 :请求的网页不存在 |
5** | 服务器错误,服务器在处理请求时发生错误 | 500:服务器内部错误 |
http请求方法
- get :获取指定页面的信息,get方法参数附在url后面以?隔开,多个参数之间&连接,不安全可见性高,而且url长度有限,所以get方法传入的参数有限
- post:提交数据请求指定资源,比如通过表单来请求数据,请求内容参数方法请求体中,安全
- put:客户端向服务器传送的数据代替指定的数据
- delete:请求服务器删除指定的页面
- head:类似于get,只不过head方法获得的响应没有响应头,只为了获取报头,查看某个页面的状态是很高效的
- options:查看服务器的性能
- trace:回显服务器收到的请求,用于测试
Http报文
http请求报文
请求行 <method><request-url><version>
请求头 <headers>
空行
请求主体 <entity-body>
只有当method为post和put时,请问报文才会有请求主体信息,空行的作用是告诉服务器,请求首部信息结束,请求头也叫请求首首部,是键值对,附件说明请求信息可以有多个请求头部字段
http响应报文
状态行 <version><status><reason-phrase>
响应首部 <headers>
空行
响应主体 <entity-body>
可以看到响应报文与请求报文只有第一行不同,上面说的状态码就在第一行中
下面重点说请求头部和响应头部的字段
在http中首部有四大分类
(1)通用首部,通用首部的字段可以在请求头部和响应头部共同使用,比如Transfer-Encoding字段,代表了传输的报文采用什么样的编码方式
(2)请求首部,顾名思义里面的字段只能用在请求报文头部,帮助请求告诉服务器自己想要什么不想要什么。
请求首部又细分为安全请求首部,条件请求首部等,其中我们前面说的cookie信息就包含在安全请求首部,客户单通过配置这个子段,告诉服务器自己是否支持cookie
(3)响应首部,顾名思义里面的字段只能用在响应报文头部,类似请求首部,有一个安全响应首部,里面有子段可以配置我们之前说的seesion cookie(jseessionid)
(4)实体首部字段
针对请求报文和响应报文的实体部分使用的首部,比如描述响应时间,响应长度等子段
转发和重定向的区别
转发(forward):是服务器内部的动作,服务器直接转到其他url,使用其中的资源,这个过程客户端是不可见的,客户端请求的url不会发生变化。过程:客户端发起http请求-->服务器接受http请求--->服务器内部调用方法完成请求处理和转发--->将请求的资源发送给客户端。转发时,服务器只能准发到统一web容器下的url,中间传递的自己容器的request
重定向(redirect):是客户端的操作,服务器返回目标地址给客户端,客户端去访问,那么客户端一开始的请求url就会发生变化。过程:客户端发起http请求-->服务器接受http请求返回302状态码--->客户端看见是302状态码,重新发起http请求--->服务器处理请求给客户端响应