一、Http简介
HTTP (HyperText Transfer Protocol)超文本传输协议, 一种应用层面向对象的协议.
http:表示通过http协议来定位网络资源
host:主机域名或者IP地址
post:指定的端口号
abs_path:指定请求资源的URL
2、其主要特点有:
(1)支持c/s 模式(客户端/服务器)
(2)简单快捷:客户端向服务器请求时,需传递请求方法和URL路径
(3)灵活:HTTP可传递任意类型的数据对象,通过Content-type进行标记
(4)无连接:每次连接只处理一个请求,服务器处理并收到客户应答后断开连接
(5)无状态:协议对事务处理没有记忆能力
3、 主要有2中报文:请求报文和响应报文
二、HTTP请求报文
1. 请求报文的组成
请求行(request line)
请求头部(header)
空行(blank line)
请求数据(request body)
(1)请求行: Method Request-URL HTTP-Version CRLF
请求方法 URL HTTP协议版本 回车换行
比如访问我第一篇博客的请求行:
(Request-Line) GET /weixin_39158738/article/details/74498471 HTTP/1.1
请求方法有如下:
GET: 请求获取Request-URL 所标识的资源
POST: 在Request-URL 所标识的资源后附加新的数据
HEAD: 请求响应消息报头
PUT: 请求服务器存储一个资源,并用Request-URL 作为其标识
DELETE: 请求服务器删除Request-URL 标识的资源
OPTIONS: 请求查询服务器的性能
TRACE: 请求服务器收到的请求信息,主要用于测试或诊断
CONNECT: HTTP/1.1协议中预留给能够将连接改管道方式的代理服务器
(2)请求头部:
由关键字/值组成 ":"分隔。
Host blog.****.net //请求主机名
User-Agent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0 //发送请求的浏览器类型,操作系统信息
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 //客户端可识别的内容类型列表
Accept-Language en-US,en;q=0.5 //浏览器所支持的语言
Accept-Encoding gzip, deflate //客户端可识别的数据编码
Cookie bdshare_firstime=1496368632571; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1499673578,1499760385,1499851111,1499851922; uuid_tt_dd=5888471425311918955_20170602; __message_sys_msg_id=0; __message_gu_msg_id=0; __message_cnel_msg_id=0; Hm_lvt_20bba81dc5fa07f97ba1779a51ed918a=1497437217; __message_in_school=0; UM_distinctid=15d0d21cf4547-034204773eb4258-71216750-1aeaa0-15d0d21cf46a7d; CNZZDATA1260104973=855675826-1499160912-null%7C1499160912; uuid=6552725d-9c0c-4610-ae7c-f42ec11a1180; dc_tos=osz5cc; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1499857351; avh=74498471; dc_session_id=1499857356367
Connection keep-alive //指定连接选项
If-None-Match W/"7294071e29dd1fed2a8d002b179282de"
Cache-Control max-age=0
(3)空行: 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length。
三、响应报文
1、响应报文的组成:
状态行
消息报头
空行
响应正文
(1)状态行: HTTP-Version status-code Reasion-phrase CRLF
HTTP 版本 响应状态代码 状态代码的文本描述 回车换行
eg: 访问第一个博客的时候出现: (Status-Line) HTTP/1.1 200 OK
常见的响应状态代码:
200 OK:客户端请求成功。
400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
403 Forbidden:服务器收到请求,但是拒绝提供服务。
404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
500 Internal Server Error:服务器发生不可预期的错误。
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)
(2)响应报头: 通过":"分开的键值对
比如:
Server openresty //服务器用来处理请求的系统信息
Date Wed, 12 Jul 2017 10:59:31 GMT //消息产生的时间和日期
Content-Type text/html; charset=utf-8
Transfer-Encoding chunked
Connection keep-alive //允许发送指定连接的选项
Keep-Alive timeout=20
Vary Accept-Encoding
Cache-Control private, max-age=0, must-revalidate //缓存指令
Etag W/"7294071e29dd1fed2a8d002b179282de"
X-Powered-By PHP 5.4.28
Content-Encoding gzip //响应的数据编码
(3)响应正文
服务端返回的数据
四、Http的工作原理
一次HTTP操作称为一个事务,其工作过程可分为四步:
(1)客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
(2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
(3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
(4)客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接。
如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,由显示屏输出。
五、如何使用Firefox抓取请求报文以及响应报文
打开Firefox浏览器 -> Tools -> Add ons -> 在跳出来的页面搜HttpFox 进行安装
安装完毕之后点击重启浏览器 -> Tools -> Web development -> HttpFox -> Toggle HttpFox
ps:必须联网
下面有一张本地截图可供参考: 访问第一个博客的请求报文以及响应报文 http://blog.****.net/weixin_39158738/article/details/74498471
六、下篇预告:
下一篇会介绍android HttpURLConnection如何获得请求报文以及响应报文 以及 JSON的简介和解析