HTTP协议初探
什么是http协议?
- rfc文档中文版
- 官方rfc文档位置
- rfc文件,Request For Comments(RFC),是一系列以编号排定的文件
- ietf 组织,国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF)是一个公开性质 的大型民间国际团体,聚集了与互联网架构和互联网顺利运做相关的网络设计者、运营者、投资人和 研究人员,并欢迎全部对此行业感兴趣的人士参与。
- RFC 1945定义了HTTP/1.0版本
- RFC 2616定义了今天广泛使用的一个版本——HTTP 1.1
- RFC 7540定义了HTTP/2.0版本
既然http是超文本传输协议,那么遵照协议的双方是谁呢?javascript
遵照协议的双方

再来回答什么是http协议
- 不就是客户端往服务端发送一段文本,服务端回复客户端一段文本么。


抓到这两段文本
可使用如下工具抓取到这段文本
TOOLS: chrome dev tool ,firefox firebug ,fiddler ……
示例:
html
能够总结出如下规律
- Http请求由三部分组成,分别是:请求行、消息报头、请求正文

- HTTP响应也是由三个部分组成,分别是:状态行、消息报头、响应正文

HTTP 请求命令(动做,谓词 ,METHOD)

GET 和 POST
- GET提交的数据会放在URL以后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中。
- GET请求没有请求体,
- GET提交的数据大小有限制,最多只能有1024字节(由于浏览器对URL的长度有限制),而POST方法提交的数据理论上没有限制。(服务端会限制)
- GET方式提交数据,会带来安全问题,好比一个登陆页面,经过GET方式提交数据时,用户名和密码将出如今URL上,若是页面能够被缓存或者其余人能够访问这台机器,就能够从历史记录得到该用户的帐号和密码。
常见HTTP状态码

- 200 请求被正常处理
- 206 部分请求被成功响应,返回对应的部分(其实不常见,用于断点续下,多线程下载)
- 301 永久重定向
- 302 临时重定向
- 304 你请求的内容没有更新,能够用你本地缓存的(不属于重定向)
- 400 你说的什么,听不懂
- 404 找不到你请求的资源
- 500 服务端出现异常
HTTP报头
类型:
- 普通(通用)报头 General Headers
请求响应都会使用的
- 实体报头 Entity Headers
用来描述请求体或者响应体的报头,跟实体有关
- 请求报头 RequestHeaders 响应报头 Response Headers
出现的地方不一样,只会出如今请求和响应上的报头
HOST 报头是必须的请求报头
报头的数量在不断的增长中,来知足互联网需求的变动
能够自定义报头java




如何发出http请求
- 浏览器
- Code
- telnet
- 工具 fiddler postman 等等
- ……
回到问题,什么是HTTP协议
HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。HTTP是一个无状态的协议。
HTTP协议永远都是客户端发起请求,服务器回送响应。
HTTP协议的主要特色可归纳以下:nginx
- 支持客户/服务器模式。支持基本认证和安全认证。
- 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不一样。因为HTTP协议简单,使得HTTP服务器的程序规模小,于是通讯速度很快。
- 灵活:HTTP容许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- HTTP 0.9和1.0使用非持续链接:限制每次链接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开链接。采用这种方式能够节省传输时间。HTTP 1.1使用持续链接:没必要为每一个web对象建立一个新的链接,一个链接能够传送多个对象。
- 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺乏状态意味着若是后续处理须要前面的信息,则它必须重传,这样可能致使每次链接传送的数据量增大。
关于应用层协议有一幅很流行的图示:web


参考资料: