HTTP协议简介

1.HTTP协议简介

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
  • HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
  • HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。
  • HTTP协议工作于客户端-服务端架构为上。如下图:

2.HTTP主要特点

  • 支持客户/服务器模式。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
  • 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
  • 无状态:HTTP协议是是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

3.URL介绍

3.1URL格式

大多数URL协的语法都建立在下面9个部分构成的通用格式上:

<scheme>://<user>:<password>@<host>:<port>/<path>;<params>?<query>#<frag>

其中比较重要的是:方案(scheme)、主机(host)和路径(path)

3.2URL组成部分介绍
  • 支持客户/服务器模式。
  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。
  • 灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
  • 无状态:HTTP协议是是无状态协议,无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

组件

描述

方案<scheme>

访问服务器以获取资源时要使用哪种协议

用户<user>

某些方案访问资源时需要的用户名

密码<password>

用户名后面可能要包含的密码,中间由冒号分隔

主机<host>

资源宿主服务器的主机名或点分IP地址

端口<port>

资源宿主服务器正在监听的端口号。很多方案都有默认端口号

路径<path>

服务器上资源的本定名,由斜杠将其与前面的URL组件分隔开来。路径组件的语法是与服务器和方案有关。

参数<params>

某些方案会用这个组件来指定输入参数。参数为名/值对。URL中可以包含多个参数字段,它们相互之间以与路径的其余部分之间用分号(;)分隔。

查询<query>

某些方案会用这个组件传递参数以激活因公程序。查询组件的内容没有通用格式。用字符”?”将其与URL的其余部分分隔开来。

片段<frag>

一小片或者一部分资源的名字。引用对象时,不会将frag字段传送给服务器。这个字段是在客户端内部使用的。通过字符”#”将其与URL的其余部分分隔开来。

4.HTTP请求协议

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
Get请求例子:
GET /123.png HTTP/1.1
Host: img.test.com
content-length: 1500
content-type: image/png
date: Sat, 22 Sep 2018 08:36:13 GMT
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
POST请求例子
POST / HTTP1.1
Host: img.test.com
content-length: 1500
content-type: image/png
date: Sat, 22 Sep 2018 08:36:13 GMT
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8

name=aa&score=90
响应例子
HTTP/1.1 200 OK
Date: Sat, 22 Sep 2018 08:36:16 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

请求

响应

请求行(request line)

用来说明请求类型,要访问的资源以及所使用的HTTP版本.

状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。

头部(header)

用来说明服务器要使用的附加信息

消息报头,用来说明客户端要使用的一些附加信息

空行

空行,消息报头后面的空行是必须的

空行,消息报头后面的空行是必须的

数据

请求数据也叫主体,可以添加任意的其他数据

响应正文,服务器返回给客户端的文本信息。

5.HTTP请求方法

  • HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

请求方法

描述

GET

请求指定的页面信息,并返回实体主体。

HEAD

类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头

POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

PUT

从客户端向服务器传送的数据取代指定的文档的内容。

DELETE

请求服务器删除指定的页面。

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS

允许客户端查看服务器的性能。

TRACE

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

6.HTTP请求整个过程(常用于面试)

序号

步骤

描述

1

DNS解析

浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2

建立TCP连接

解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接

3

发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

4

服务器接受请求

服务器解析请求,进行适当的处理

5

响应

服务器将响应内容写到TCP套接字(第),由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

6

释放TCP连接

若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

7

接收内容

浏览器将该 html 文本并显示内容

7.GET和POST请求的区别

GET

POST

对数据长度的限制

当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)

无限制。

对数据类型的限制

只允许 ASCII 字符。

没有限制。也允许二进制数据。

安全性

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分,在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

可见性

数据在 URL 中对所有人都是可见的。

数据不会显示在 URL 中。

点击返回/刷新按钮

没有影响

数据会重新发送

原文发布于微信公众号 - 编码前线(gh_acef1225aadd)

原文发表时间:2018-09-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏伦少的博客

win10 spark+scala+eclipse+sbt 安装配置

转载请务必注明原创地址为:http://dongkelun.com/2018/03/15/winSparkConf/

614100
来自专栏Maroon1105

使用TCP Wrappers保护您的Linode

TCP包装器是基于主机的访问控制系统。它们用于通过仅允许特定客户端访问服务器上运行的服务来防止对服务器的未授权访问。

14820
来自专栏L宝宝聊IT

LVS负载均衡群集--NAT+DR模式

17280
来自专栏小勇DW3

亿级流量场景下,大型缓存架构的虚拟机环境搭建

静态模板是固定的 数据库中的数据全量喧嚷到模板中,下次请求来了直接返回,速度也很快;

21340
来自专栏smy

前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍

webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互...

38260
来自专栏pangguoming

Git忽略规则.gitignore梳理

对于经常使用Git的朋友来说,.gitignore配置一定不会陌生。废话不说多了,接下来就来说说这个.gitignore的使用。

10830
来自专栏会跳舞的机器人

Dubbo无法创建新线程异常解决方案

结合上面的异常信息,我们可以知道dispatcher的默认配置值为all(AllChannelHandler来处理消息请求),因为测试环境上部署了好几个应用,如...

47720
来自专栏IMWeb前端团队

DNS,node以及反向代理的一些知识和应用

概念 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的...

30000
来自专栏从零学习云计算

Centos7.2学习记录(3)——搭建本地yum仓库

入职以来,由于公司云主机运行在内网环境下,在搭建kubernetes和openshift集群时都需要进行离线安装,这里粗略记录一下本地yum仓库的搭建过程。 ...

44800
来自专栏张善友的专栏

使用WinSCP软件在windows和Linux中进行文件传输

当我们的开发机是Windows,服务器是Linux时,如何在windows操作系统和linux操作系统之间进行文件传输呢?大部分使用ScureCRT或者putt...

394100

扫码关注云+社区

领取腾讯云代金券