大年初二,老爸唱K,我在旁边写写http的个人学习理解~~祝大家新年快乐!
Http的理论知识网上已经有很多,在这里就用实际例子简单直观描述,可以使用Fiddle等抓包工具,启动后打开浏览器请求网络资源,或者手机绑定Fiddler请求网络资源接口等,即可看到这些都是http或者https请求,在Inspector下的raw查看
其中,
一、Http协议URL
格式:http://host[":"port][abs_path],用来定位请求资源的位置
二、Http请求
如请求网易新闻的一个网页,
GET http://web.stat.ws.126.net/stat/?project=news_world&event=initialized&etype=process&cost=649&uuid=b1d45e959fe399c2&unew=1&uctime=1455005833463&utime=1455005907295&ultime=0&uvcount=0&resolution=1920/1080&avlbsize=1903/979&pagesize=1903/3226&pagescroll=0/0&url=http%3A%2F%2Fnews.163.com%2Fworld%2F&ref=http%3A%2F%2Fnews.163.com%2F&cvar={%22trace_id%22:%221455005833426%22,%22email%22:%22%22,%22nvsf%22:%22%22}&r=0.7528014241252095_0602&pgr=b1d45e959fe399c214550059064275007&prev_pgr=7c36395bc0d694451455005833451754&sid=b1d45e959fe399c21455005833470 HTTP/1.1
Host: web.stat.ws.126.net
Connection: keep-alive
Accept: image/webp,image/*,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36
Referer: http://news.163.com/world/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: NTESLOGFE=1455005832.404
请求由三部分组成,包括请求行、消息报头、请求正文
在raw下我们看到请求方式为GET请求,GET一般用来获取或者查询资源,另外还有其他请求方式,如一般用来提交数据的POST请求,还要HEAD,DELETE等,其中最为常用的为get和post,请求方法后面跟着请求的URL,然后是http的版本号,如HTTP/1.1;
请求host即请求的域名,Connection用来指定连接,例如指定连接是连续keep-alive,或者指定“close”选项,User-Agent是你使用的浏览器的名称和版本,Referer告诉服务器我是从哪个页面链接过来的,Accept-Encoding用于指定可接受的内容编码,Accept-Language表示浏览器所支持的语言类型,Cookie是由Web服务器保存在用户浏览器上的小文本文件,可以包含有关用户的信息,某些请求必须要带上cookie才可访问;
二、Http响应
如访问某一请求返回
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain;charset=utf-8
Content-Length: 28
Date: Tue, 09 Feb 2016 08:56:04 GMT
doyoo.resp={"c":"e","es":[]}
返回的内容和HTTP请求包相似,由三个部分构成,分别是:协议-状态代码-描述,应答头,应答正文(服务器返回的资源的内容),其中响应状态取值:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受,如返回OK,200
3xx:重定向--要完成请求必须进行更进一步的操作,如重定向302
4xx:客户端错误--请求有语法错误或请求无法实现,如查找不到对应资源,404
5xx:服务器端错误--服务器未能实现合法的请求,如服务器当前不能处理客户端的请求,503
结合具体项目可慢慢体会理解~