先链接到一个我的另一篇有关HTTP的博客

第一次访问时会有些慢~~~

http协议

因为编写 Web 应用必须对 HTTP 有所了解,所以我们对 HTTP 进行介绍

HTTP 协议简介

HTTP 超文本传输协议 (HTTP-Hypertext transfer protocol),是一个属于应用层的

面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于 1990

年提出,经过几年的使用与发展,得到不断地完善和扩展。它是一种详细规定了浏览器

和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

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

HTTP 就是一个通信规则,这个规则规定了客户端发送给服务器的报文格式,也规

定了服务器发送给客户端的报文格式。实际我们要学习的就是这两种报文。客户端发送

给服务器的称为”请求报文“,服务器发送给客户端的称为”响应报文“。

HTTP 协议的发展历程

超文本传输协议的前身是世外桃源(Xanadu)项目,超文本的概念是泰德˙纳尔森(Ted

Nelson)在 1960 年代提出的。进入哈佛大学后,纳尔森一直致力于超文本协议和该项目

的研究,但他从未公开发表过资料。1989 年,蒂姆˙伯纳斯˙李(Tim Berners Lee)在 CERN(欧

洲原子核研究委员会 = European Organization for Nuclear Research)担任软件咨询师

的时候,开发了一套程序,奠定了万维网(WWW = World Wide Web)的基础。1990 年

12 月,超文本在 CERN 首次上线。1991 年夏天,继 Telnet 等协议之后,超文本转移协

议成为互联网诸多协议的一分子。

当时,Telnet 协议解决了一台计算机和另外一台计算机之间一对一的控制型通信的

要求。邮件协议解决了一个发件人向少量人员发送信息的通信要求。文件传输协议解决

一台计算机从另外一台计算机批量获取文件的通信要求,但是它不具备一边获取文件一

边显示文件或对文件进行某种处理的功能。新闻传输协议解决了一对多新闻广播的通信

要求。而超文本要解决的通信要求是:在一台计算机上获取并显示存放在多台计算机里

的文本、数据、图片和其他类型的文件;它包含两大部分:超文本转移协议和超文本标

记语言(HTML)。HTTP、HTML 以及浏览器的诞生给互联网的普及带来了飞跃。

HTTP 协议的会话方式

浏览器与服务器之间的通信过程要经历四个步骤:建->发 ->回 ->关

浏览器与 WEB 服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一

个页面的访问,浏览器与 WEB 服务器都要建立一次单独的连接。

浏览器到 WEB 服务器之间的所有通讯都是完全独立分开的请求和响应对。

HTTP1.0 和 HTTP1.1 的区别

在 HTTP1.0 版本中,浏览器请求一个带有图片的网页,会由于下载图片而与服务器

之间开启一个新的连接;但在 HTTP1.1 版本中,允许浏览器在拿到当前请求对应的全部

资源后再断开连接,提高了效率HTTP 1.1 是目前使用最为广泛的一个版本,而最新的一个版本则是 HTTP 2.0,又

称 HTTP/2。在开放互联网上 HTTP 2.0 将只用于 https://网址。HTTPS,即 SSL(Secure

Socket Layer,安全套接字层)之上的 HTTP,实际上就是在 SSL/TLS 连接的上层进行 HTTP

通信。

备注:SSL 最初由 Netscape 公司开发,之后由 IETF(Internet Engineering Task Force,

互联网工程任务组)接手并将其改名为 TLS(Transport Layer Security,传输层安全协

议)

请求报文

  • 报文格式

    • 请求首行(请求行);
    • 请求头信息(请求头);
    • 空行;
    • 请求体;
  • 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 相关的

信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取 User-

Agent 头信息而来的;

  • Accept: /:告诉服务器,当前客户端可以接收的文档类型, /,就表示

    什么都可以接收;

  • Accept-Language: zh-CN:当前客户端支持的语言,可以在浏览器的工具

选项中找到语言相关信息;

  • Accept-Encoding: gzip, deflate:支持的压缩格式。数据在网络上传递时,

    可能服务器会把数据压缩后再发送;

  • Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默

    认为 3000ms;

  • Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是

    第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的 Cookie

    在请求中一并发送过去。

  • Post 请求

    POST 请求要求将 form 标签的 method 的属性设置为 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

Referer: http://localhost:8080/hello/index.jsp:请求来自哪个页面,例如你在百

度上点击链接到了这里,那么 Referer:http://www.baidu.com;如果你是在浏览器的地

址栏中直接输入的地址,那么就没有 Referer 这个请求头了;

  • Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明

    会使用 url 格式编码数据;url 编码的数据都是以“%”为前缀,后面跟随两位的 16 进

    制,例如“传智”这两个字使用 UTF-8 的 url 编码用为“%E4%BC%A0%E6%99%BA”;

  • Content-Length:13:请求体的长度,这里表示 13 个字节。

  • keyword=hello:请求体内容!hello 是在表单中输入的数据,keyword 是表单

    字段的名字。

响应报文

  • 报文格式

    • 响应首行(响应行);
    • 响应头信息(响应头);
    • 空行;
    • 响应体;
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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hello</h1>
</body>
</html>
  • 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 小时的时

    区差;

响应状态码

  • 状态码用来告诉 HTTP 客户端,HTTP 服务器是否产生了预期的 Response。HTTP/1.1

    协议中定义了 5 类状态码, 状态码由三位数字组成,第一个数字定义了响应的类

    • 1XX 提示信息 - 表示请求已被成功接收,继续处理

    • 2XX 成功 - 表示请求已被成功接收,理解,接受

    • 3XX 重定向 - 要完成请求必须进行更进一步的处理

    • 4XX 客户端错误 - 请求有语法错误或请求无法实现

    • 5XX 服务器端错误 - 服务器未能实现合法的请求

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

    • 200:请求成功,浏览器会把响应体内容(通常是 html)显示在浏览器中;

    • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;

    • 500:请求资源找到了,但服务器内部出现了错误;

    • 302:重定向,当响应码为 302 时,表示服务器要求浏览器重新再发一个请求,

      服务器会发送一个响应头 Location,它指定了新请求的 URL 地址;

goweb-http协议的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. 浅析 Java 与 C++ 的垃圾回收机制

        Java老师在期末复习大纲上出了一道关于JVM垃圾回收机制的题目,想要我们简述一下JVM垃圾回收机制,与老师交流后,大概老师是希望通过与其他语言在垃圾回收对比,介绍一下Java在这方面的特点和 ...

  2. 微信小程序 存储数据到本地以及本地获取数据

    1.wx存储数据到本地以及本地获取数据 存到本地就是存到你的手机 wx.setStorageSync与wx.setStorage 1.1 wx.setStorageSync(string key, a ...

  3. CVPR 2019轨迹预测竞赛冠军方法总结

    背景 CVPR 2019 是机器视觉方向最重要的学术会议,本届大会共吸引了来自全世界各地共计 5160 篇论文,共接收 1294 篇论文,投稿数量和接受数量都创下了历史新高,其中与自动驾驶相关的论文. ...

  4. 《Dotnet9》系列之建站-中文站最好WordPress主题,自媒体,博客,企业,商城主题一网打尽

    大家好,我是Dotnet9小编,一个从事dotnet开发8年+的程序员.本文介绍WordPress主题JustNews,本站Dotnet9既是使用WordPress + JustNews主题搭建而成的 ...

  5. .NET机器学习 ML.NET 1.4预览版和模型生成器更新

    ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架. ML.NET  还包括Model Builder  (一个简单的UI工具)和  CLI  ,使用自动机器学习(AutoML)构建自定义 ...

  6. AWVS12破解版使用

    本篇简单介绍AWVS12破解版的安装使用,如果您已经安装了AWVS 10.5的版本,不用卸载,可以共存. AWVS12破解版下载链接:https://github.com/starnightcyber ...

  7. OWASP ModSecurity Core Rule Set (CRS)的基本使用

    Preface 前述文章开源WAF工具ModSecurity,介绍了ModSecurity作为Nginx的动态加载模块的基本安装和使用. 本篇简单介绍ModSecurity CRS规则集的使用. # ...

  8. 致初学者:零基础如何学好,Python这门编程语言?

    前言对于很多Python这门编程语言的初学者,往往会面临以下问题: Python2和Python3我该学习哪一个?是否要安装Linux系统学习Python?Python3有各种版本我该安装哪一个?那么 ...

  9. SQL server 2014 安装

    一.规划并成功的完成SQLSERVER 2014的安装 1.规划系统 安装SQL server 前,第一步应该是合理的规划.以下是规划时的任务和要点: ① 当前工作负载的基准 ② 估计工作负载的增长情 ...

  10. Java生鲜电商平台-生鲜电商中商品类目、属性、品牌、单位架构设计与实战

    Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战 说明:Java生鲜电商平台-生鲜电商中商品类目.属性.品牌.单位架构设计与实战经验分享 凡是涉及到购物,必然是建立在商品的基础 ...