什么Http协议

HTTP是HyperText Transfer Protocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程及数据本身的格式。

 版本:1.1(目前使用的)和1.0

和1.1可以在一次TCP/IP链接上,发出多次请求和得到多次响应

1.0每次都必须建立新的TCP/IP链接,比较浪费资源。

基于HTTP协议的客户/服务器模式的信息交换过程,如图所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。

三次握手

请求部分

请求消息头:客户端给服务器端发送的一些附加信息。



请求部分详解:

1、请求行:位于请求内容的第一行。

请求方式 请求的资源的URI地址 使用的协议及版本号

GET /app1/1.html HTTP/1.1

a、请求方式:

请求方式有:GET(默认的)、POST、HEAD、DELETE等

GET方式:/app1/1.html?username=abc&password=123。把表单的数据紧跟在URI地址后面,用?进行分割。问号后面的内容,专业叫法:查询字符串。请求行的长度不能超过1KB。不适合传递太多的数据。

POST方式:把表单的数据放在了请求的正文部分。没有长度限制。

b、请求的URI:

URI:统一资源标识符。http://localhost:8080/app1/1.html(URL),去掉协议、主机、端口剩余的叫做URI。

c、客户端使用的协议及版本。

2、请求消息头:

界限:从第2行开始,到第一个空行结束。

 Accept:浏览器可接受的MIME类型 。

Accept:text/html.

MIME类型是区分网络上传输的数据类型的。MIME:大类型/具体类型。MIME类型和文件的扩展名有对应关系(Tomcat\conf\web.xml)

 Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集

 Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。 可以在浏览器中进行设置。

Host:初始URL中的主机和端口

 Referer:取值是一个URL,该URL表示用户是由哪个页面过来的。



 Content-Type:内容类型:告知服务器,请求正文的MIME数据类型,默认值:application/x-www-form-urlencoded

 if-Modified-Since: Wed, 02 Feb 2011 12:04:56 GMT利用这个头与服务器的文件进行比对,如果一致,则从缓存中直接读取文件。

 User-Agent:浏览器类型.

 Content-Length:表示请求消息正文的长度

 Connection:表示是否需要持久连接。如果服务器看到这里的值为“Keep -Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接

 Cookie:这是最重要的请求头信息之一 (会话管理时再讲)

 Date:Date: Mon, 22 Aug 2011 01:55:39 GMT请求时间GMT

3、请求正文:只有表单的请求方式是POST方式时才会出现。

username=abc&password=123 参数都是:key=value的形式,多个参数之间用&进行分割。

响应部分

响应消息头:服务器端给客户端发送的一些附加信息。



3.1响应消息行:位于第一行

服务器端使用的协议及版本 响应码 响应码描述

HTTP/1.1 200 OK

a、响应码:

1XX~5XX:目前用到了40个左右。

记住常用的几个状态码:

200:一切正常

302/307:请求重定向

304:服务器的资源没有修改。

404:客户端访问的地址不存在

500:服务器端程序遇到异常

3.2响应消息头:(重点)

 Location: http://www.it315.org/index.jsp指示新的资源的位置

一般和302、307响应码一起使用,完成请求重定向。

 Server:apache tomcat指示服务器的类型

 Content-Encoding: gzip告知客户端服务器发送的请求正文内容的压缩编码

 Content-Length: 80 告诉浏览器正文的长度

 Content-Language: zh-cn服务发送的文本的语言

 Content-Type: text/html; charset=GB2312服务器发送的内容的MIME类型

 Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT文件的最后修改时间

 Refresh: 1;url=http://www.it315.org指示客户端刷新频率。单位是秒

 Content-Disposition: attachment; filename=aaa.zip指示客户端下载文件

 Set-Cookie:SS=Q0=5Lb_nQ; path=/search服务器端发送的Cookie(会话管理)

 Expires: -1

 Cache-Control: no-cache (1.1)

 Pragma: no-cache (1.0) 三个头一般一起使用,告诉客户端不要缓存内容

 Connection: close/Keep-Alive

 Date: Tue, 11 Jul 2000 18:23:51 GMT

3.3响应正文:

和在页面上点击右键“查看源码”看到的是一样的。

三种禁止浏览器缓存的头字段

// 不要 缓存的 三个 头 :

        //Cache-Control  : no-cache
// Pragma: no-cache
// Expires: Thu, 01 Dec 1994 16:00:00 GMT (时间值 ) // 都是 用于 控制 浏览器 缓存的 , 当前 是要不缓存, 其 值 是 no-cache, no-cache,Thu, 01 Dec 1994 16:00:00 GMT 时间值 // 为什么 有三个 头 啊 ?
// 如果 要 通知 浏览器 不缓存, 最好 的方式 这个三个 都设置
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Pragma", "no-cache");
// 设置 expires 的时候 需要 调用 这个 方法 : setDateHeader(java.lang.String name, long date)
response.setDateHeader("Expires", -1);

状态码所表示的意义

状态行

格式: HTTP版本号 状态码 原因叙述

举例:HTTP/1.1 200 OK

状态码用于表示服务器对请求的各种不同处理结果和状态,它是一个三位的十进制数。响应状态码分为5类,使用最高位为1到5来进行分类如下所示:

一、200状态码:

成功2××: 成功处理了请求的状态码。

1、200 :服务器已成功处理了请求并提供了请求的网页。

2、204: 服务器成功处理了请求,但没有返回任何内容。

二、300状态码:

重定向3×× :每次请求中使用重定向不要超过 5 次。

1、301: 请求的网页已永久移动到新位置。当URLs发生变化时,使用301代码。搜索引擎索引中保存新的URL。

2、302: 请求的网页临时移动到新位置。搜索引擎索引中保存原来的URL。

3、304: 如果网页自请求者上次请求后没有更新,则用304代码告诉搜索引擎机器人,可节省带宽和开销。

三、400状态码:

客户端错误4×× :表示请求可能出错,妨碍了服务器的处理。

1、400: 服务器不理解请求的语法。

2、403: 服务器拒绝请求。

3、404: 服务器找不到请求的网页。服务器上不存在的网页经常会返回此代码。

4、410 :请求的资源永久删除后,服务器返回此响应。该代码与 404(未找到)代码相似,但在资源以前存在而现在不存在的情况下,有时用来替代404 页面代码。如果资源已永久删除,应当使用 301 指定资源的新位置。

四、500状态码:

服务器错误5×× :表示服务器在处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

1、500 :服务器遇到错误,无法完成请求。

2、503: 服务器目前无法使用(由于超载或停机维护)。

细说Http协议的更多相关文章

  1. 简单谈谈DNS协议

    DNS协议也可以称为DNS服务,全称是Domain Name System,即域名系统,和HTTP协议一样,也是一个位于应用层的协议(服务),它是基于运输层的UDP协议的,关于网络协议的分层介绍,见这 ...

  2. QUIC/HTTP3 协议简析

    从 HTTP 的进化历史讲起,细说使用协议的变迁,了解原因发现问题,解码 QUIC 在 HTTP3 中的支撑作用,共同探讨 HTTP3 的未来. HTTP.HTTP2 和 HTTP3 先和大家来回顾一 ...

  3. iOS7 push/pop转场动画

    前言 iOS 7之后,苹果提供了自定义转场动画的API,我们可以自己去定义任意动画效果.本篇为笔者学习push.pop自定义转场效果的笔记,如何有任何不正确或者有指导意见的,请在评论中留下您的宝贵意见 ...

  4. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  5. 【转】Tomcat启用HTTPS协议配置过程

    转载请注明出处: http://blog.csdn.net/gane_cheng/article/details/53001846 http://www.ganecheng.tech/blog/530 ...

  6. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  7. Objective-C中的类目,延展,协议

    Objective-C中的类目(Category),延展(Extension),协议(Protocol)这些名词看起来挺牛的,瞬间感觉OC好高大上.在其他OOP语言中就没见过这些名词,刚看到这三个名词 ...

  8. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  9. 细说ASP.NET Forms身份认证

    阅读目录 开始 ASP.NET身份认证基础 ASP.NET身份认证过程 如何实现登录与注销 保护受限制的页面 登录页不能正常显示的问题 认识Forms身份认证 理解Forms身份认证 实现自定义的身份 ...

随机推荐

  1. 机器学习:scipy和sklearn中普通最小二乘法与多项式回归的使用对

    相关内容连接: 机器学习:Python中如何使用最小二乘法(以下简称文一) 机器学习:形如抛物线的散点图在python和R中的非线性回归拟合方法(以下简称文二) 有些内容已经在上面两篇博文中提到了,所 ...

  2. 分布式版本管理工具 git常用命令

    Git global setup git config --global user.name "joey" git config --global user.email " ...

  3. pyqt5 动画学习(一) 改变控件大小

    入坑pyqt也有半年了,由于人们对事物的审美,静态界面已经不能满足用户,而动画却给人眼前一亮,so,今天来学习pyqt的动画了 由于资料真的是太少,本人也是有啃外国佬的英文进行摸索学习,可能也是触及皮 ...

  4. ES6(正则扩展)

    ES6中正则的扩展 正则新增特性 一.构造函数的变化 1.ES5中new一个正则对象方法 (一行中2个参数,二行中1个参数) (第一行中的第一个参数必须是字符串) 2.ES6中新增一种方法(构造函数) ...

  5. 计蒜客NOIP模拟赛(2) D2T1 劫富济贫

    [问题描述] 吕弗·普自小从英国长大,受到骑士精神的影响,吕弗·普的梦想便是成为一位劫富济贫的骑士. 吕弗·普拿到了一份全国富豪的名单(不在名单上的都是穷人),上面写着所有富豪的名字以及他们的总资产, ...

  6. 注意类型转换——Effective C++

    注意类型转换: C++提供了四种新式类型转换: const_cast<T>(expression); static_cast<T>(expression); dynamic_c ...

  7. ●BZOJ 2251 [2010Beijing Wc]外星联络

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2251 题解: 后缀数组,倍增,RMQ 题意:把重复次数超过 1次的子串按字典序输出它们重复的 ...

  8. 【Gcd】

    [题目描述] 有 n 个正整数 x1~xn,初始时状态均为未选.有 m 个操作,每个操作给定一个编号 i,将 xi 的选取状态取反.每次操作后,你需要求出选取的数中有多少个互质的无序数对. [输入数据 ...

  9. 解读Raft(一 算法基础)

    最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理. 我会将Raft协议拆成四个部分去总结: 算法基础 选举和日志复制 安全性 节点变 ...

  10. Postgresql 创建SEQUENCE,Springboot中使用KeyHolder

    项目中使用到JdbcTemplate中的KeyHolder,代码如下: String sql = "insert into web_users(username, password, pho ...