3、五分钟学go-web|http协议

1、http协议简介

HTTP 超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

1990年提出,它是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

客户端与服务端通信时传输的内容我们称之为报文。

HTTP 就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。
客户端发送给服务器的称为” 请求报文“,服务器发送给客户端的称为” 响应报文“。

2、http协议发展历程

超文本传输协议的前身是世外桃源(Xanadu)项目,超文本的概念是泰德˙纳尔森(Ted Nelson)在 1960 年代提出的。

1989 年, 蒂姆˙伯纳斯˙李(Tim Berners Lee)在 CERN(欧洲原子核研究委员会)担任软件咨询师的时候,开发了一套程序, 奠定了万维网(WWW = World Wide Web)的基础。

1990 年12 月,超文本在 CERN 首次上线。 1991 年夏天,继 Telnet 等协议之后,超文本转移协议成为互联网诸多协议的一分子。

超文本要解决的通信要求是:在一台计算机上获取并显示存放在多台计算机里的文本、数据、图片和其他类型的文件;它包含两大部分:超文本转移协议和超文本标记语言(HTML)。
HTTP、 HTML 以及浏览器的诞生给互联网的普及带来了飞跃。

3、HTTP 协议的会话方式

浏览器与服务器之间的通信过程要经历四个步骤:


通讯图
  1. 浏览器与 WEB 服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与 WEB 服务器都要建立一次单独的连接。
  2. 浏览器到 WEB 服务器之间的所有通讯都是完全独立分开的请求和响应对。

4、HTTP1.0 和 HTTP1.1 的区别

在 HTTP1.0 版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器之间开启一个新的连接;但在 HTTP1.1 版本中,允许浏览器在拿到当前请求对应的全部资源后再断开连接,提高了效率。


对比图

HTTP 1.1 是目前使用最为广泛的一个版本,而最新的一个版本则是 HTTP 2.0,又称 HTTP/2。 在开放互联网上 HTTP 2.0 将只用于 https://网址。 HTTPS,即 SSL之上的 HTTP。

5、报文

5.1、报文格式

报文格式

5.2、请求报文

1) 报文格式

请求首行(请求行);
请求头信息(请求头);
空行;
请求体;

2) Get 请求

GET /Hello/index.jsp HTTP/1.1
Accept: /
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;
Media Center PC 6.0; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Host: localhost:8080
Connection: Keep-Alive
Cookie: JSESSIONID=C55836CDA892D9124C03CF8FE8311B15

  • Get 请求没有请求体, Post 请求才有请求体
  • GET /Hello/index.jsp HTTP/1.1 : GET 请 求 , 请 求 服 务 器 路 径 为
    Hello/index.jsp,协议为 1.1;
  • Host:localhost:请求的主机名为 localhost;
  • User-Agent: Mozilla/4.0 (compatible; MSIE 8.0…:与浏览器和 OS 相关的
    信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取 UserAgent 头信息而来的;
  • Accept: /:告诉服务器,当前客户端可以接收的文档类型, /,就表示
    什么都可以接收;
  • Accept-Language: zh-CN:当前客户端支持的语言。
  • Accept-Encoding: gzip, deflate:支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
    Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默
    认为 3000ms;
  • Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的 Cookie在请求中一并发送过去。

3)Post 请求

POST /Hello/target.html HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml,
image/gif, image/pjpeg, application/x-ms-xbap, /
Referer: http://localhost:8080/Hello/
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64;
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729;
Media Center PC 6.0; .NET4.0C; .NET4.0E)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost:8080
Content-Length: 14
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=774DA38C1B78AE288610D77621590345
username=admin

  • Referer: http://localhost:8080/hello/index.jsp:请求来自哪个页面,例如你在百度上点击链接到了这里,那么 Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有 Referer 这个请求头了;
  • Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明会使用 url 格式编码数据;
  • Content-Length:13:请求体的长度,这里表示 13 个字节。
  • keyword=hello:请求体内容! hello 是在表单中输入的数据, keyword 是表单字段的名字。

5.3、响应报文

1) 报文格式

响应首行(响应行);
响应头信息(响应头);
空行;
响应体;

2)、报文内容

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Content-Length: 274
Date: Tue, 07 Apr 2015 10:08:26 GMT




Insert title here


Hello



  • HTTP/1.1 200 OK:响应协议为 HTTP1.1,状态码为 200,表示请求成功;
  • Server: Apache-Coyote/1.1:服务器的版本信息;
  • Content-Type: text/html;charset=UTF-8:响应体使用的编码为 UTF-8;
  • Content-Length: 274:响应体为 274 字节;
  • Date: Tue, 07 Apr 2015 10:08:26 GMT:响应的时间,这可能会有 8 小时的时区差;

6、状态响应码

状态码告诉 HTTP 客户端,HTTP 服务器是否产生了预期的 Response。 HTTP/1.1协议中定义了 5 类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别。

  • 1XX 提示信息 - 表示请求已被成功接收,继续处理
  • 2XX 成功 - 表示请求已被成功接收,理解,接受
  • 3XX 重定向 - 要完成请求必须进行更进一步的处理
  • 4XX 客户端错误 - 请求有语法错误或请求无法实现
  • 5XX 服务器端错误 - 服务器未能实现合法的请求

响应码对浏览器来说很重要,它告诉浏览器响应的结果,常见的状态码有

  • 200:请求成功,浏览器会把响应体内容(通常是 html)显示在浏览器中;
  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 500:请求资源找到了,但服务器内部出现了错误;
  • 302:重定向,当响应码为 302 时,表示服务器要求浏览器重新再发一个请求,服务器会发送一个响应头 Location,它指定了新请求的 URL 地址;

你可能感兴趣的:(3、五分钟学go-web|http协议)