HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。

尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

HTTP方法 作用描述

GET 客户端请求指定的资源信息,服务器返回指定资源
HEAD 只请求响应报文中的HTTP首部
POST 将客户端的数据提交到服务器,例如注册表单
PUT 用从客户端向服务器传送的数据取代指定的文档内容
DELETE 请求服务器删除Request-URI所标识的资源
MOVE 请求服务器将指定的页面移至另一个网络地址

HTTP不同状态码机器对应的作用(常用)

状态代码 详细描述说明
200-OK 服务器成功返回网页,这是成功的HTTP请求返回的标准状态码
301-Moved Permanently 永久跳转,所请求的网页将永久跳转到设定的新位置
403-Forbidden 禁止访问,请求合法,但是服务器端因为某些原因拒绝响应客户端的请求,此类问题一般为服务器或服务权限配置不当
404-Not Found 服务器找不到客户端请求的指定页面,可能是客户端请求了服务器上不存在的资源所致
500-Internet Server Error 内部服务器错误,服务器遇到了意料不到的情况,不能完成客户的请求,一般为服务器设置或内部程序问题导致
502-Bad Gateway 坏的网关,一般是代理服务器请求后端服务时,后端服务不可用或没有完成响应网关服务器,通常为反向代理服务器下面的节点出问题所致
503-Service Unavaliable 服务当前不可用,可能是服务器超载或停机维护所致,或是反向代理服务器后面没有可以提供服务的节点
504-Gateway Timeout 网关超时,一般是网关代理服务器请求后端服务时,后端服务没有在特定时间内完成处理请求,多数是服务器过载导致没有在指定的时间内返回数据给前端代理服务器

#curl 取状态码

[root@localhost ~]# curl -I -s -w %{http_code} -o /dev/null www.baidu.com
200

-----------------------------------------------------------------------------------------------

HTTP请求报文格式:

报文格式             报文信息
请求行              请求方法 URL 协议版本

              字段名1:值1
              字段名2:值2
              ...
请求头              例如:
              Accept: image/gif image/jpeg
              Accept-Language: zh-cn
              ...

空行              空白无内容

请求报文主体 GET方法没有请求报文主体,post方法才有

-----------------------------------------------------------------------------------------------

请求行是请求报文的第一行,用来说明客户端想要做什么,内容由请求方法字段,URL字段和HTTP协议版本字段组成,他们之间用空格分隔

请求头部由关键字/值对组成,每行一对,关键字和值用英文:分隔。请求头部的作用是通过客户端把请求的相关信息告诉服务器

常见请求头部信息:

请求头部信息 说明
Accept: image/gif,image/jpeg 媒体类型
Accept-Language: zh-cn 语言类型
Accept-Encoding: gzip,deflate 支持压缩
User-Agent: Mozilla/4.0(compatible: MSIE 6.0: Windows NT: ...) 客户端类型
Host: www.example.com 主机名

最后一个请求头部信息之后是一个空行,通过发送回车符和换行符,通知Web服务器空行以下不会有请求头部的信息了

请求报文主体:

请求报文主体中包括了要发送给Web服务器的数据信息,请求报文主体不会应用于HTTP的GET命令方法,而是应用于POST方法,POST方法适用于需要客户填写表单的场合。

HTTP响应报文格式:

报文格式                 报文信息

                        协议及版本号、数字状态码、状态信息

              字段名1:值1
              字段名2:值2
              响应头部 ....
起始行              例如:
              Content-Type: text/html:
              Content-Length: 78
              ....

空行                  空白无内容

              <html>
              <head><title>Template's blog</title></head>
响应报文主体        <body>
              I am Template
              </body>
              </html>

响应报文阐述:

1、起始行

响应报文的起始行也叫状态行,用来说明服务器响应客户端请求的状态。一般为协议及版本号,数字状态码,状态情况,例如:HTTP/1.1 200-OK

2、响应头部

和请求报文类似,起始行的后面一般有若干个头部字段,每个头部字段都包含一个名字和一个值,两者之间用冒号分割,头部结尾也是一个空行结束

3、空行

最后一个响应头部是空行。通过发送回车符和换行符,通知客户端空行下文无头部信息了

4、响应报文主体

响应报文主体装载了要返回给客户端的数据,这些数据可以是文本,也可以是二进制的(如图片,视频)

HTTP协议原理:

HTTP协议属于OSI模型中的第七层应用层协议,HTTP协议的重要应用就是www服务应用,下面就以www服务应用为例介绍HTTP协议的通信原理。
以HTTP协议通信时,需要有客户端和服务端,在Web客户端向Web服务器发送请求报文之前,先要通过TCP/IP协议在Web客户端和服务器之间
建立一个TCP/IP连接,整个HTTP协议请求的工作流程如下:

1、客户端在Web浏览器地址栏输入访问地址www.example.com

2、Web浏览器请求DNS服务器把域名www.example.com转换成Web服务器的IP地址,此处的解析过程就是DNS解析的原理流程,DNS原理可以参考DNS解析流程         

3、Web浏览器将端口号(默认是80)从访问地址(URL)中解析出来。

4、Web浏览器通过解析后的IP地址及端口号与Web服务器之间建立一条TCP连接

5、建立TCP连接之后,Web浏览器向服务器发送一条HTTP请求报文

6、Web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文

7、Web服务器关闭HTTP连接,关闭TCP连接,Web浏览器显示访问的网站内容到屏幕上

HTTP协议原理的更多相关文章

  1. TCP/IP协议原理与应用笔记18:构成子网和超网

    1. 引言: (1)类别IP编址(Classful IP)的缺陷 • 固定的3种IP网络规模      C类地址:少于255台主机的网络      B类地址:介于255~65535台主机的网络     ...

  2. TCP/IP协议原理与应用笔记17:IP编址(重点)

    1. IP地址(通用标识符) 对于同一个网络设备(主机或路由器)的不同网络连接,需要不同的IP地址进行标识 2. 主机标识符 主要有下面三种方式的主机标识方式: (1)Name:是什么,可读性强(了解 ...

  3. TCP/IP协议原理学习笔记

    昨天学习了杨宁老师的TCP/IP协议原理第一讲和第二讲,主要介绍了OSI模型,整理如下: OSI是open system innerconnection的简称,即开放式系统互联参考模型,它把网络协议从 ...

  4. SMB协议原理抓包分析

    SMB协议原理抓包分析 目录: 1.SMB概述 2.SMB原理 3.SMB配置 一.SMB概述 SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件.打印机. ...

  5. 网络分层和Http协议原理

    网络分层: 应用层 传输层 网络层 数据链路层 物理层 物理层: 比特流在节点之间的传输,是计算机连接起来的物理手段. 数据链路层: 控制网络层和物理层之间的通信,功能是在不可靠的物理线路上进行数据可 ...

  6. Android网络编程(一)HTTP协议原理

    相关文章 Android网络编程(一)HTTP协议原理 Android网络编程(二)HttpClient与HttpURLConnection Android网络编程(三)Volley使用方法全解析 A ...

  7. OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法

    OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...

  8. Http协议原理解析第一篇

    一:http的由来: OSI模型把网络通信分成七层:物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,对于开发网络应用人员来说,一般把网络分成五层,这样比较容易理解.这五层为:物理层.数据链 ...

  9. Linux实战教学笔记26:http协议原理

    目录 第二十六节 http协议原理 第1章 Web服务基础 1.1 http服务重要基础 1.2 HTTP协议 1.3 HTTP资源 1.4 网站流量度量术语 1.5 www服务软件介绍 1.6 本章 ...

  10. 无线局域网中RADIUS协议原理与实现

    转载自:http://blog.csdn.net/jinhill/article/details/5901042 摘要  RADIUS协议是一个被广泛应用于网络认证.授权和计费的协议.本文在介绍了RA ...

随机推荐

  1. 原svn账户清除,及使用新用户名密码操作方法

    原svn账户清除,及使用新用户名密码操作方法 第一步:先清除原svn账户信息,如图示,电脑桌面右击“ToroiseSVN--Settings”. 在Settings中,选择Saved Data中的Cl ...

  2. jstl core and jstl fn

    jstl标签使用时必须加taglib:<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core&quo ...

  3. 斗鱼扩展--拦截替换js_辅助抢宝箱(六)

    代码可以在 https://pan.baidu.com/s/1uN120-18hvAzELpJCQfbXA  处下载 说思路 页面加载一段时间后,判断页面有没有宝箱,如果没有就停止注入js,如果有则 ...

  4. nodejs入门学习笔记二——解决阻塞问题

    在最开始,我们要弄清楚node会什么会存在阻塞? node是这么标榜自己的:“在node中除了代码,所有一切都是并行执行的!” 意思是,Node.js可以在不新增额外线程的情况下,依然可以对任务进行并 ...

  5. Magento 中一个订单的“生命历程”

    当我们在网上愉快的买买买的时候, 你知道在这些屏幕“背后”正在进行着什么吗? 1. 当一个产品被加入到购物车后, 实际上发生了什么? 当第一个产品被加入到购物车, 系统首先会生成一个 quote (q ...

  6. 添加SAP_ALL权限

    更新usr04,ust04,usrbf2这三张表 REPORT ZTESTCREATEUSER. data: l_USR04 LIKE USR04 , l_UST04 LIKE UST04 , l_P ...

  7. 【转】This Android SDK requires Android Developer Toolkit version 20.0.0 or above

    本人最近在操作更新ANDROID SDK时出现类似于题目中的错误,是一启动ECLIPSE时.但是,我现在只是想恢复到原先的开发环境.于是找到本文,方法有效!!! windows 下面安装Android ...

  8. iOS - 协议实现的例子

    在实际开发中,协议的应用非常广泛,以下是实际应用的例子. 1.协议的定义: myProtocolDelegate.h // // myProtocolDelegate.h // zlwPlayerAp ...

  9. Garmin APP开发之入门

    Garmin开发-入门 先附上几个已经开发完成的app日历 up down 翻月 start 回到当前月(就差农历了) 秒表和定时器一体app界面比较简单,但是实用,长按菜单键可以切换秒表和定时器,有 ...

  10. 【MFC】MFCMenuButton 的用法

    背景:因为对话框界面上的空间有限,为了节省空间,我决定采用一个MFCMenuButton用来实现同一类按钮事件.本来我打算设置两个按钮:“单个删除文件”和“清空所有文件”两个按钮,但是空间太小,而且这 ...