微信号:imooc-com

介绍:慕课网是一个超酷的互联网、IT技术免费学习平台,创新的网络一站式学习、实践体验;服务及时贴心,内容专业、有趣易学。专注服务互联网工程师快速成为技术高手!

HTTP协议原理+实践 Web开发工程师必学

2018-05-30 20:15 慕课网


当今Web程序的开发技术真是百家争鸣,ASP.NET、 PHP、JSP、Perl、AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作。




1


什么是HTTP协议


HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。


HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。


一个完整的【HTTP请求】过程有7个步骤:


1>建立TCP连接

2>Web浏览器向Web服务器发送请求命令
3>Web浏览器发送请求头信息
4>Web服务器应答
5>Web服务器发送应答头信息
6>Web服务器向浏览器发送数据
7>Web服务器关闭TCP连接






请求消息结构


一个请求消息是由请求行、请求头字段、一个空行和消息主体构成。如


 
           
  1. GET /hello.htm HTTP/1.1

  2. User-AgentMozilla/4.0 (compatible; MSIE5.01Windows NT)

  3. Host: example.com

  4. Accept-Language: en-us

  5. Accept-Encoding: gzip, deflate


请求行


请求消息的第一行就是请求行。它指明使用的请求方法、资源标示符、和 HTTP 版本。如


 
           
  1. GET /hello.htm HTTP/1.1


请求方法


请求方法用来定义操作资源的方式,HTTP/1.1 协议中定义了八种请求方法:


  • GET:读取资源数据

  • POST:新建资源数据

  • PUT:更新资源数据

  • DELETE:删除资源数据

  • HEAD:读取资源的元数据

  • OPTIONS:读取该资源所支持的所有请求方法

  • TRACE:回显服务器收到的请求,主要用于测试或诊断

  • CONNECT:HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经 由非加密的HTTP代理服务器)

此外,除了上述方法,特定的HTTP服务器还能够扩展自定义的方法。


资源标示符


URI、URL和URN是用来识别、定位和命名互联网上的资源。

因为要通过多样的方式识别资源(人的名字可能相同,然而计算机文件只能通过唯一的路径名称组合访问),所以需要标准的识别WWW资源的途径。为了满足这种需要,Tim Berners-Lee 引入了标准的识别、定位和命名的途径:URI、URL和URN。

  • URI:Uniform Resource Identifier,统一资源标识符

  • URL:Uniform Resource Locator,统一资源定位符

  • URN:Uniform Resource Name,统一资源名称

URL 和 URN 都属于 URI。

URI 和 URL 的区别是:URL 更具体。URI 和 URL 都定义了什么是资源。但 URL 还定义了如何获得资源。

请求头字段

用来传递客户端的更多信息,以及传递解析消息主体的必要信息。如

 
           
  1. User-AgentMozilla/4.0 (compatible; MSIE5.01Windows NT)

  2. Host: example.com

  3. Accept-Language: en-us

  4. Accept-Encoding: gzip, deflate


常见请求头字段有

  • Accept:客户端接受哪些 Mine 类型。如 Accept: text/html

  • Accept-Encoding:支持的编码类型。如 gzip, deflate, sdch

  • Accept-Language: 可接受的语言。如 en-US,en;q=0.8

  • User-Agent:一个标识客户端的字符串。如 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/38.0.2125.101 Safari/537.36

  • Cookie: Cookie如 sessionid=c8422b97-98e2-4bc6-aa31-9b667d6ca4a5; theme=4;

  • Referer:从那个页面到的该页面。



2


消息主体


消息主体是请求消息的承载数据。比如在提交POST表单,并且表单方法不是GET时,表单数据就是打包在消息主体内的。消息主体是可选的。


响应消息结构


响应消息由一个状态行、响应头字段、一个空行、消息主体构成。如


 
           
  1. HTTP/1.1 200 OK

  2. DateMon27 Jul 2009 12:28:53 GMT

  3. ServerApache/2.2.14 (Win32)

  4. Last-ModifiedWed22 Jul 2009 19:15:56 GMT

  5. Content-Length88

  6. Content-Type: text/html

  7. ConnectionClosed

  8. <html>

  9.  <body>

  10.  <h1>HelloWorld!</h1>

  11.  </body>

  12. </html>


状态行


由http版本、状态码、状态描述文字构成。如


 
           
  1. HTTP/1.1 200 OK


状态码


HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的3位数字代码。


所有的状态码的第一个数字代表了响应的五种状态之一:

  • 1xx:代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行 结束。

  • 2xx:代表请求接收、理解并且接受。

  • 3xx:代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目 标)在本次响应的Location域中指明。当且仅当后续的请求所使用的方法是GET或者HEAD时,用户浏览器才可以 在没有用户介入的情况下自动提交所需要的后续请求。

  • 4xx:代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应 该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。

  • 5xx:代表了服务器在处理请求的过程中有错误或者异常状态发生,,也有可能是服务器意识到以当前的软硬件资源 无法完成对请求的处理。


常见状态码有:

  • 200: 请求已经成功,请求所希望的响应头或者数据体将随着此响应返回


  • 202: 服务器已接受请求,但尚未处理。正如它可能被拒绝一样,最终该请求可能会也可能不会被执行。在异步操作的场合下,没有比发送这个状态码更方便的做法了


  • 204: 服务器成功处理了请求,但不需要返回任何实体内容,并且希望返回更新了的元信息


  • 304: 被请求的资源内容没有发生更改


  • 400: 包含语法错误,无法被服务器解析


  • 403: 服务器已经接收请求,但是拒绝执行


  • 404: 请求失败,请求所希望得到的资源未在服务器上发现


  • 408: 请求超时。客户端可以再次提交这一请求而无需任何修改


  • 500: 服务器内部错误,无法处理请求


  • 502: 作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效响应


  • 504: 作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应



掌握HTTP协议是Web开发最基础的一环,然而很多同学对于HTTP协议基本不了解,或者只了解其中狭小的一部分,导致很多同学无法快速成长,陷入重复coding的地狱。


推荐《HTTP协议原理+实践》这门教程,会从原理到实践,用完整的例子展示HTTP协议的各个环节,让这些同学突破困境,快速成长。导学视频抢先看↓





点击下方图片,即可订阅学习




 
慕课网 更多文章 2小时搞定移动直播App开发 开始学习 4 年前端狗,2 年 CTO,一个程序员六年的奋斗史 教师节,老师竟然送你礼物!(9.10日,不限名额!!!) 【慕课网实战课】从0开始双剑合璧Laravel,AngularJS全栈开发知乎 五功大成!慕课网安卓5.0客户端重磅发布!
猜您喜欢 全新一加 3T 刷黑手及一些看法 这是我最想推荐给程序员们看的基于Python3.4实现的爬虫书 关于Python中的元类(metaclass)讲解最棒的文章 【揭秘】变魔术还是作弊?阿里云人工智能ET背后还藏着哪些秘密 用星际争霸讲解面向对象的概念