http请求报文
http请求报文由方法、URI、http版本。http首部字段等构成
下面给大家示例一个访问my_view_page.php的请求报文首部信息
GET /my_view_page.php HTTP/1.1 Host: 10.0.17.183:8000 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Referer: http://10.0.17.183:8000/my_view_page.php Accept-Encoding: gzip, deflate, sdch
2、http响应报文
http响应报文由http版本、状态码(数字和原因短语)、http首部字段3部分组成
以下是刚才访问my_view_page.php时服务器返回的响应报文首部信息:
HTTP/1.1 200 OK Cache-Control: no-store, no-cache, must-revalidate Date: Tue, 26 Jul 2016 09:32:11 GMT Expires: Tue, 26 Jul 2016 09:32:12 GMT Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 3892 Content-Type: text/html; charset=utf-8 Last-Modified: Tue, 26 Jul 2016 09:32:12 GMT
通用首部字段
Cache-Control:
no-cache:
1)请求中如包含该命令,表示客户端不会接收缓存过的响应,必须向源放武器转发请求
2)响应中包含该命令,那么缓存服务器不能对其资源进行缓存
3)如果响应中no-cache=Location,那么客户端也不能缓存
no-store:请求中包含机密信息,对方不能在本缓存请求或响应的任一部分
max-age:
1)缓存资源缓存时间数值低于该值,就接受缓存的资源,如max-age为0,则需要请求源服务器
2)http1.1中,如遇到存在Expires首部字段的情况,会忽略Expires字段,优先处理max-age指令
min-fresh:要求缓存服务器返回未过指定时间的资源
no-transform:要求无论请求还是响应,都不能改变实体主体的媒体类型,防止缓存或者代理压缩图片等操作
Connection:
1)http1.1默认都是持久连接,客户端会在持久连接上持续发送请求,当服务器明确表示需要断开连接时,则指明首部字段值为close
2)http1.1之前的版本默认都是非持久连接,需要在旧版本上保持持久连接,需要加入Keep-Alive
Date:
表明创建http报文的日期和时间 (Date: Sun, 31 Jul 2016 01:28:48 GMT)
Transfer-Encoding:
规定报文主体的编码方式,http1.1的传输编码方式仅对分块传输编码有效(Transfer-Encoding: chunked)
请求首部字段
Accept:通知服务器客户端可处理的媒体类型相对优先级,可使用type/subtype这种形式,q表示权重,默认值为1.0(Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8)
Accept-Cherset:通知服务器客户端支持的字符集及字符集的相对优先级(Accept-Charset: iso-8859-5, unicode-1-1;q=0.8)
Accept-Encoding:告知服务器用户代理支持的内容编码及内容编码优先级顺序(Accept-Encoding: gzip, deflate)
gizp:由文件压缩程序gzip(GUN zip)生成的编码格式
compress:由UNIX文件压缩程序compress生成的编码格式
deflate:组合使用zlib格式及由deflate压缩格式生成的编码格式
jdentity:不执行压缩或不会变化的默认编码格式
Accept-Lanuage:告知服务器用户代理能够处理的自然语言集(告知服务器用户代理能够处理的自然语言集)
Authorization:告知服务器用户代理的认证信息
Host:告知服务器请求的资源所处的互联网主机名和端口号
Referer:告知服务器请求的原始资源的URI
User-Agent: 创建请求的浏览器和用户代理名称等信息传给服务器(User-Agent: Mozilla/5.0 (windows NT 6.1; WOW64; rv13.0) Gecko/=20100101 Firfox/13.0.1)
响应首部字段:
Accept-Ranges:告知客户端服务器能否处理范围请求,以指定获取服务器的某部分资源
1)bytes:可处理范围请求
2)none:不能处理范围请求
Age:告知客户端源服务器创建响应多久了,单位S
Location:基本上该字段都会配合3xx:Redirction的响应,提供重定向的URI
Server:告知客户端当前服务器上安装的http服务器应用程序的信息。(Server: Apache/2.2.17(Unix))
实体首部字段:
Allow:通知客户端能够支持的Request-URI指定资源方法,如果服务器接收到不支持的方法,会返回状态码405(Allow:GET, HEAD)
Content-Encoding:告知客户端服务器对实体的主体部分的选用的内容编码方式(Content-Encoding: gizp)
Content-Lanuage:告知客户端实体主体使用的自然语言(Content-Lanuage: zh-CN)
Expires:告知客户端资源失效的日期(Expires: Wed, 04 Jul 2016 09:26:05 GMT)
HTTP状态码:
- 1xx: 指示信息—表示请求已接收,继续处理。
- 2xx: 成功—表示请求已经被成功接收、理解、接受。
- 3xx: 重定向—要完成请求必须进行更进一步的操作。
- 4xx: 客户端错误—请求有语法错误或请求无法实现。
- 5xx: 服务器端错误—服务器未能实现合法的请求。
几个特殊的状态码
200 OK 客户端请求成功
400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
401 Unauthonzed 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
404 Not Found 请求的资源不存在,例如,输入了错误的URL。
500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
keep-alive:
每个http请求都要求打开一bai个tpc socket连接,并且使用一次du之后就断开这个tcp连接。使用keep-alive可以改善这种状态,即zhi在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数
https相当于身披SSL外壳的http
https并非应用层的一种新协议,而是在http通信接口部分用SSL(Secure Socket Layer:安全套接字层)和TLS(Transport Layer Security:安全层传输协议)协议代替
通常,http和TCP直接通信,当使用SSL时,先由http和SSL通信,再由SSL和TCP通信