继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

HTTP了解一下

跃然一笑
关注TA
已关注
手记 276
粉丝 40
获赞 164

一、HTTP协议主要特点

  • 简单:客户端向服务器请求时,只需要传送请求方法和路径。

  • 灵活:HTTP允许传输任意类型的数据对象。传输类型有Content-Type标记

  • 无连接:每次链接只处理一个请求。服务器处理完客户的请求,并受到客户的应答后,即断开连接,以节省传输时间。

  • 无状态:无状态是指协议对于事物的处理没有记忆能力。如果后续处理需要前面的信息,必须重新传,可能导致,每次链接传送的数据量增大。

二、报文的组成

https://img.mukewang.com/5d55664f0001118808390221.png

报文有三部分组成:对报文描述的起始行、包含属性的首部和包含数据的主体。(加上空行是四部分)

https://img3.mukewang.com/5d556653000163fb06280234.png

客户端请求报文


https://img4.mukewang.com/5d5566560001e32c08530404.png

服务器响应报文


每行以ASCII终止,ASCII包括回车符和换行符,简称CRLF。稳健的应用程序也接受耽搁换行符作为行终止。
首部和主体之间必须要有回车+换行

https://img2.mukewang.com/5d55665a0001420804480223.png


报文语法

请求报文格式:

<method>空格<request-URL> 空格<version>空格+回车<headers>空格+回车<entity-body>

响应报文格式:

<version>空格<status>空格<reason-phrase><headers>空格+回车<entity-body>
  • 方法(method)
    客户端希望服务器对资源执行的动作。比如GET、POST、PUT等。GET和HEAD是安全的方法,他们的请求在服务器上不会产生什么结果,也不是说什么动作都不知晓,有时候允许HTTP应用程序开发者通知用户,例如点击付款,浏览器可能会弹出警告。

  • 请求URL(request-URL)
    请求资源的路径。

  • 版本(version)
    报文所使用的HTTP版本。HTTP/1.22的版本比HTTP/1.3的版本高。

  • 状态码(status-code)
    三位数字描述了请求过程中所发生的情况。

  • 原因短语(reason-phrase)
    状态码的可读版本。

  • 首部(header)
    可以有0个或多个首部。每个首部的格式名字+:+可选空格(可有可无)+值Host:www.jose-hardware.com,请求头中的Host表示接受请求的服务器的域名(包括主机名和端口号)。HTTP/1.1要求首部不能空。首部延续行,必须至少一个空格或tab。例如:

Server: Test Server
   Version 1.0
  • 实体的主体部分(entity-body)
    任意数据组成的数据库。并不是所有的报文都有实体的主体部分。
    POSTPUT包含主体,其他无。

三、HTTP方法

https://img2.mukewang.com/5d5566600001228504390283.png

四、POST与GET区别

https://img3.mukewang.com/5d5566640001f33906290316.png


https://img2.mukewang.com/5d5566670001486508980726.png

post数据编码类型:
1、application/x-www-form-urlencoded
浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。

POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
这里是空行
title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

2、multipart/form-data
我们使用表单上传文件时,必须让<form>表单的enctype 等于 multipart/form-data
3、application/json
主体内容是json字符串
4、text/xml
主体是xml

五、HTTP状态码

1xx:指示信息- 表示请求已接收,继续处理

2xx:成功-表示请求已被成功接收
3xx:重写向-要完成请求必须进行更进一步的操作
4xx:客户端错误-请求有语法错误或请求无法实现
5xx:服务器错误-服务器未能实现合法请求

200 ok:客户端请求成功
206 Partial Content:客户发送了一个带有Range头的GET请求,服务器完成了它

301 Moved Permanantly:所有请求页面已经转移到新的url
302 Found:所有请求的页面已经临时转移到新的url
304 Not Modified:客户端有缓存的文档并发出了一个条件性的请求,服务器告诉客户原来的缓存的文件还可以继续使用

400 BadRequest: 客户端请求语法错误,不能被服务器理解
401 Unauthorized:请求未授权,这个状态代码必须和 WWW-Authenticate报头或一起使用403 forbidden 请求被服务器拒绝
404 Not Found: 请求资源不存在

500 Internal Server Error:服务器发生不可预期的错误原来缓冲的文档还可以继续使用
503 Server Unavailable:请求未完成,服务器临时过载或当机,一段时间后可能恢复正常

六、什么是持久连接

HTTP 协议采用“请求-应答”模式,当使用普通模式,即非 Keep-Alive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP 协议无连接的协议)

当使用 Keep-Alive模式(又称持久连接,连接重用)时,Keep-Alive 功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive 功能避免了建立或者重新建立连接http/1.1c才支持

七、管道化

原理
打包发送请求,打包返回响应
请求1 -> 请求2 -> 请求3 -> 响应1 -> 响应2->响应3
管道化限制

  • 管线化机制通过持久连接完成,仅 HTTP/1.1 支持此技术

  • 只有GET 和 HEAD 请求可以进行管线化,而POST则有所限制

  • 初次创建连接时不应启动管线机制,因为对方(服务器)不一定支持 HTTP/1.1版本的协议

  • 管线化不会影响响应到来的顺序,如上面的例子所示,响应返回的顺序并未改变
    HTTP/1.1 要求服务器端支持管线化,但并不要服务器端也对响应进行管线化处理,只是要求对于管线化的请求不失败即可。

  • 由于上面提到的服务器端的问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务器端和代理程序对管线化的支持并不好,因此现代浏览器如Chrome和 Firefox默认并未开启管线化支持。



作者:fenerchen
链接:https://www.jianshu.com/p/db56f50c7a71


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP