HTTP请求/响应报文结构
HTTP协议版本有两种:HTTP1.0和HTTP1.1
它们俩的区别在于:HTTP1.0对于每个连接都只能传送一个请求和响应,请求后就会关闭,HTTP1.0没有Host字段;而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段
http请求过程:
1)请求超链接——》客户端发送请求到服务器,请求包内容:协议版本号,求情地址,请求方式,请求头和请求参数
2)服务器接受请求——》开始处理请求——》将响应包返回给客户端,响应包内容:协议版本号,状态码,响应数据
3)前端收到响应包——》根据响应数据开始做相应处理
常见的请求头字段含义:
请求行:标明了请求方法,请求URL,HTTP协议及版本
Accept:浏览器可接受的MIME类型,也就是代表着浏览器希望接收什么样的文件
Accept-Charset:浏览器可接受的字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式
Accept-Language:浏览器所接受的语言
Authorization:授权信息
Content-Length:表示请求消息正文的长度
Host:客户机通过这个头告诉服务器,想访问的主机名
If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间
Referer:表明客户机是从哪里来的
User-Agent:User-Agent头域的内容包含发出请求的用户信息,浏览器类型
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。
Connection:处理完这次请求后是否断开连接还是继续保持连接。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。
响应头:
常见的响应头字段含义:
响应行:报文协议及版本,状态码以及状态描述
Allow:服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding:文档的编码(Encode)方法。
Content-Length:表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。
Content- Type:表示后面的文档属于什么MIME类型
Expires:告诉浏览器把回送的资源缓存多长时间,-1或0则是不缓存
Server:服务器通过这个头告诉浏览器服务器的类型
WWW-Authenticate:客户应该在Authorization头中提供什么类型的授权信息
Get和Post的区别:
GET请求的数据会附在URL之后,即数据直接显示在url中,以?分割URL和传输数据,参数之间以&相连
如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5 %A5%BD。
如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4 %BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
而POST方法则会把数据放到请求数据字段中以&分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数。
另外GET方法是没有报文体的
状态码:
1xx:表示请求已接收,继续处理。比如100表示服务器正在处理客户请求
2xx:表示请求已被成功接收,理解,接受。 比如200表示请求成功
3xx:表示客户端被重定向到其他资源。 比如301表示本网页永久性转移到另一个地址;302表示重定向,浏览器自动跳转新连接;304表示上次文档已经保存,还可以继续使用
4xx:请求有语法错误或请求无法实现 比如400表示请求有语法错误浏览器不能解析;403表示拒绝提供服务;404表示请求资源不存在
5xx:服务器执行请求时遇到错误 比如500服务器错误;503服务器当前不能处理,请稍后再试