Http学习
来源:互联网 发布:京东关键词优化 编辑:程序博客网 时间:2024/05/22 08:12
Http学习笔记
Http的简单了解
Http建立的3次握手与断开连接的4次挥手
注: SYN:synchronize ACK: acknowledgement FIN: finish
TCP/IP的4层模型分别为:应用层(HTTP),传输层(TCP/UDP),网络层(IP),数据链路层
OSI 7层模型分别为:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
说到分层,就需要知道这么做的好处是什么?解耦,隔离
DNS : 域名解析服务;位于应用层,提供域名到IP地址之间的解析服务。
到这里,不得不说一个问题,我们在浏览器输入网址到网页的显示,中间经历了哪些过程?
当我们输入网址,敲回车之后,首先要经过DNS服务将输入的域名解析为对应的IP地址,然后利用HTTP协议生成针对目标服务器的请求报文,TCP协议将报文按照序号分割成多段,IP协议做中间传送。服务器端接收到报文后,会按照序号将报文重组,紧接着HTTP协议处理请求,并利用同样的方式返回相应的内容。 当然,这只是一个简化的流程,中间的细节很多,大家有空可以了解下。
Http请求报文与响应报文
- 请求报文由:请求方法,请求URI,协议版本,请求首部以及内容实体构成
- 响应报文由:协议版本,状态码,Msg,响应首部以及内容实体构成
请求方法
注意,方法名称区分大小写,在使用的时候要使用大写。 另还有两个请求方法,LINK,UNLINK 不过这两种方法在1.1版本中已经废弃了
请求报文的格式解析
首先,我们先看一个post请求报文的例子:
POST /search HTTP/1.1Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Encoding:gzip, deflate, sdch, brAccept-Language:zh-CN,zh;q=0.8Cache-Control:max-age=0Connection:keep-aliveContent-Type: multipart/form-data; boundary=OCqxMF6-JxtxoM // boundary是随机生成的一段字符Cookie:xxxxxxxxxxxxxxxHost:facebook.comUser-Agent:xxxxxxxx // 注意空行--OCqxMF6-JxtxoM // 参数开始位置以--开头,后面拼接 boundaryContent-Disposition: form-data; name="key"; filename="fn" // 有文件的形式,fn是你的文件名称Content-Type: application/octet-stream Content-Transfer-Encoding: binary // 注意这里的空行xxxxxxxxx // 文件的二进制流--OCqxMF6-JxtxoM Content-Disposition: form-data; name="key" // 这里key代表你的参数名称Content-Type: text/plain; charset=UTF-8Content-Transfer-Encoding: 8bitasdfadfadf // 参数值--OCqxMF6-JxtxoM-- // 代表结束
请求第一行分别是:请求方法 请求URI 协议版本
紧接着,后面的就是请求的首部。 请求首部的格式是key:value的形式。这些首部字段是可选的。正常情况下,如果你还有参数,则后面会紧跟请求主体。上面的例子中展示的是一种比较复杂的post情况,请求的数据格式为multipart/form-data
, 一定要注意这个格式,格式错误会导致服务器无法解析。
当然,如果是GET请求的话,报文会比POST简单很多。GET请求是没有请求主体的,也就是说只有固定的第一行:请求方法 请求URI 协议版本 以及后续紧跟的可选的首部字段。这里就不举例了。
响应报文的格式解析
HTTP/1.1 200 OKCache-Control:private, max-age=0, must-revalidateContent-Encoding:gzipContent-Type:text/html; charset=utf-8Date:Wed, 26 Apr 2017 09:53:55 GMTETag:"ad7d17d1dcf7090bcba58445a76bb719"Server:ITeye SERVERSet-Cookie:a3239dd936188fbf05c2a10ca0c62290aac2f; domain=.iteye.com; path=/; HttpOnlyTransfer-Encoding:chunkedVary:Accept-Encoding // 注意空行xxxxxxxxxxx // 响应实体
响应第一行分别是:协议版本 响应状态码 Msg
紧接着,后面就是响应的首部。同样,和请求的首部格式一样,不过字段上可能会有些区别,具体可看下面的这张表。
状态码
一些常见的状态码
200 :一般网络请求成功的状态码都是这个
204:代表该请求只返回了不含响应实体的报文
301:永久重定向
302:临时重定向
400:请求报文有错
404:要请求的资源未找到
报文的首部字段
HTTP首部字段将定义成缓存代理和非缓存代理的行为,分两种类型。一种是端到端首部(End-to-end Header),它要求该中类型的首部必须被保存和转发(如果经过代理服务器的话);一种是逐跳首部(Hop-by-hop Header),它只对单次转发有效,会因为通过缓存/代理服务器而不再转发,如果要使用该类型的首部,则需要提供Connection首部字段。
属于逐跳首部的字段有8种:Connection Keep-Alive Proxy-Authenticate
Proxy-Authorization Trailer TE Transfer-Encoding Upgrade。
其余的都是端到端首部
这一部分的内容很多,大家感兴趣的可以去看看《图解Http》这本书第6章,里面有详细的讲解。其实,这一部分内容都是来自该书。自己整理一遍只是为了加深一下印象。^_^
如有错误,还请指出!
- HTTP学习
- HTTP学习
- HTTP学习
- http学习
- HTTP学习
- 学习http
- HTTP学习
- HTTP 学习
- Http学习
- http学习
- HTTP学习
- Http学习
- http学习
- Http学习
- Http 学习
- HTTP学习
- HTTP学习
- http学习
- 正则表达式
- linux下常用的命令
- iOS开发——view内缩弹窗
- Java中的集合特点总结
- 1130. Infix Expression (25)
- Http学习
- FFmpeg_3.2.4+SDL_2.0.5学习(1)音视频解码帧及显示/播放数据
- java并发编程之——volatile详解
- python如何实现简单的爬虫功能
- Java报表工具打印方案对比
- EA&UML日拱一卒--类图::协作(collaboration)
- FreeRadius数据表详解
- 4/26调APRN过程
- Angular入门