Http,即超文本传输协议,是建立在TCP/IP协议的基础上。在Web开发的过程中,Http协议是十分重要的,浏览器与服务器之间的交互就是基于Http协议的。Http协议如果展开全面讲解会有很多内容,这里主要分析Http协议的请求与回复中的内容格式、相应的消息头以及几种状态码。

  一、Http请求

  完整的http请求包括:一个请求行、若干消息头、若干请求的实体内容(消息头和请求内容之间用一条空行隔开);
 
  1、请求行
    用于描述客户端的请求方式,请求的资源名称,以及使用的HTTP协议版本号;
    如:GET /test/hello.html HTTP/1.1;其中的GET成为请求方式,请求方式有:POST、GET、HEAD、OPTIONS、TRACE、PUT常用的有:POST、GET。其中的HTTP/1.1表示协议版本号,HTTP/1.0是短连接,HTTP/1.1是长连接,其中长度是指连接保留的时间长短。
    get与post之间的区别:
    (1)GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分隔URL和传输的数据,多个参数之间用&连接;POST提交,把提交的数据放置在HTTP包的包体中,即GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
    (2)传输数据大小:HTTP协议对传输数据大小和URL长度没有进行限制;GET提交在一些浏览器和服务器中会对URL长度进行限制(如IE对URL长度的限制是2083字节);POST提交不通过URL传值,所以理论上对传输数据大小没有限制(建议不要大于64K)。
    (3)安全性:POST提交的安全性更高。
  2、消息头
    用于描述客户端请求哪台主机,以及客户端的一些环境信息;
    注意:并不是每次请求的消息头都一样
    下面来看完整的消息头:
      Accept: text/html,image/*  [通知服务器,客户端可以接收的内容有:文本、网页和图片等]
      Accept-Charset: IS0-8859-1  [浏览器接收的字符编码为IS0-8859-1]
      Accept-Encoding: gzip,compress  [可以接受gzip,compress压缩后的数据]
      Accept-Language: en-us,zh-cn  [浏览器支持中、英文]
      Host: www.google.com:80  [要访问的主机是 www.google.com:80]
      If-Modified-Since: Tue , 11 Jul 2000 18:23:51 GMT  [通知服务器客户端本地的缓冲文件的时间]
      Referer: http://www.google.com/index.html  [告诉服务器这个请求来之哪个页面,这个消息头常用来防止盗链]
      User-Agent: Mozilla/4.0(compatible:MSIE5.5;Windows NT 5.0)  [告诉服务器客服端浏览器的内核]
      Cookie:    [cookie]
      Connection: close/Keep-Alive  [保持连接,发完数据后不立刻断开连接]
      Date: Tue, 11 Jul 2000 18:23:51 GMT  [浏览器发送该http请求的时间]
  3、发送的内容
    格式为:内容名=内容体,多个内容使用&隔开
  二、Http响应
   完整的http响应包括:状态行、多行消息头、回复实体内容(消息头和内容之间依然用一条空行隔开)。

  1、状态行:

    用于描述服务器对请求的处理结果;
    格式:HTTP版本号 状态码 原因叙述<CRLF>
    如:HTTP/1.1 200 0K;
    其中状态码是一个三位的十进制数,用于表示服务器对请求的处理结果,响应状态码分为5类:
 
状态码 含义
100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程
200~299 表示成功接收请求并已完成整个处理过程,常用200
300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动到一个新地址,常用302、307
400~499 客户端的请求有错误,常用404。例如访问的页面不存在
500~599 服务器端出现错误,常用500
  2、响应消息头:
    用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据描述信息,可以通知客户端如何处理等会儿它回送的数据。
    下面来看完整的消息头:
      Location: http://www.cnblogs.com/index.jsp  [让浏览器定位到该url]
      Server: apache tomcat  [通知浏览器服务器是tomcat]
      Content-Encoding: gzip  [告诉浏览器,服务端使用的是gzip进行压缩]
      Content-Length: 80  [告诉浏览器回送的数据大小为80个字节]
      Content-Language: zh-cn  [支持中文]
      Content-Type: text/html; charset=utf-8  [回送的内容格式是text/html;编码采用的是utf-8]
      Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT  [告诉浏览器,该资源最后一次的更新时间]
      Refresh: 10,url=http://www.baidu.com  [过10秒刷新跳转到http://www.baidu.com这个页面]
      Content-Disposition: attachment; filename = aaa.txt  [告诉浏览器有文件要下载]
      Transfer-Encoding: chunked  [传输的编码]
      Set-Cookie: SS=Q0=5Lb_nQ; path=/search  [cookie信息]
      Expires: -1  [告诉浏览器缓存数据方式,主要针对IE浏览器]
      Cache-Control: no-cache  [告诉浏览器如何缓存数据]
      Pragma: no-cache  [告诉浏览器如何缓存数据]
      Connection: close/Keep-Alive  [保存连接还是关闭]
      Date: Tue, 11 Jul 2000 18:23:51 GMT  [回送页面的时间]
  3、实体内容
    代表服务器向客户端回送的数据;
  三、重点
    一些网站对界面实时更新要求很高,这时就要注意一个细节,如果只是光标定位到地址栏,按回车键进行刷新,当刷新的页面有缓存的时候就不会重新向服务器发送http请求,有缓存的时候刷新需点击刷新按钮进行刷新。
    对个这个问题服务端怎么制定让客户端浏览器不对这些重点页面进行缓存呢?这就涉及到http响应消息头中的Expires、Cache-Control和Pragma这三个消息头了。在制定不缓存的时候这三个都得进行指定,才能很好的兼容多种浏览器。
    如:response.setDateHeader("Expires", -1);表示不缓存,这个方法也可以指定缓存到什么时候。

Web开发——Http协议剖析的更多相关文章

  1. Web开发HTTP协议知识_常用http方法、http状态码等(前端开发和面试必备))

    http请求由三部分组成,分别是:请求行.消息报头.请求正文. HTTP(超文本传输协议)是一个基于请求与响应模式的.无状态的.应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连 ...

  2. PHP. 01. C/S架构、B/S架构、服务器类型、服务器软件、HTTP协议/服务器、数据库、服务器web开发、PHP简介/常见语法、PHPheader()、 PHP_POST/GET数据获取和错误处理

    C/S架构 Client/Server 指客户端,服务器 架构的意思 优点:性能性高:可将一部分的计算工作放在客户端上,服务器只需处理出局即可   洁面炫酷,可使用更多系统提供的效果 缺点:更新软件需 ...

  3. Python Web开发中的WSGI协议简介

    在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...

  4. java web开发中常用的协议的使用和java-web 常见的缓冲技术

    一.DNS协议 作用将域名解析为IP   类似于我们只需要知道中央一台,中央二台,而不需要知道它的频率,方便记忆. java dns 域名解析协议实现 1 域名解析,将域名可转换为ip地址InetAd ...

  5. 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?

    原文:PSC推出的第二篇文章-<Python Web开发最难懂的WSGI协议,到底包含哪些内容?>-2017.9.27 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有 ...

  6. Springboot 系列(七)Spring Boot web 开发之异常错误处理机制剖析

    前言 相信大家在刚开始体验 Springboot 的时候一定会经常碰到这个页面,也就是访问一个不存在的页面的默认返回页面. 如果是其他客户端请求,如接口测试工具,会默认返回JSON数据. { &quo ...

  7. Web开发技术发展历史

    Web开发技术发展历史   来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...

  8. 了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

    了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发) Guillermo Rauch 编   赵静 译 ISBN 978-7-121-21769-2 2 ...

  9. TCP服务端开发为例--web开发不同url请求走不同control方法

    拿java的web开发为例子,相信有很多小伙伴是做j2EE开发的,htpp请求,json数据传输都是工作中经常用的,查询请求,添加请求,修改请求前端配个url,例如https://localhost/ ...

随机推荐

  1. 关于删除linux多余内核

    step 1: 查找当前正在使用的内核文件的版本号 #uname -r step 2: 列出所有的内核文件,使用rpm 或者 dpkg(基于linux系统) 命令  #rpm -q kernel 或者 ...

  2. Java SE ---数据类型

    Java中数据类型(Data Type)分为基本数据类型(Primitive Data Type)和引用类型(Reference Data Type). Java中的基本数据类型共有以下8种:   1 ...

  3. Kali+Win7双系统

    ----------------------------------------------------------前言---------------------------------------- ...

  4. [改善Java代码]避免在构造函数中初始化其他类

    建议35: 避免在构造函数中初始化其他类 构造函数是一个类初始化必须执行的代码,它决定着类的初始化效率,如果构造函数比较复杂,而且还关联了其他类,则可能产生意想不到的问题,我们来看如下代码: publ ...

  5. saltstack实战2--远程执行之模块(Modules)

    本来转自http://www.cnblogs.com/MacoLee/p/5753640.html  版权归原作者所有 说明 salt '*' sys.list_modules #列出当前版本支持的模 ...

  6. Windows中使用cmd实现自定义Service的安装与卸载

    在项目中,有些时候我们需要自定义一些Service来定时处理一些业务逻辑,这时候就涉及到如何安装与卸载service的问题了,具体如何安装呢?在此整理一些解决方案供大家参考: 方案一: 1.运行--〉 ...

  7. c++、c实现推箱子小游戏

    经过四次的修改和优化,终于将推箱子这个游戏完整的写出来了,今天就像大家分享一下这个游戏的编写. 这个游戏界面的编写总的来说不困难,主要是推动箱子的算法. (1)利用数组和windows api 即可写 ...

  8. Ajax返回html和json格式数据

    Ajax可以返回text和xml格式 可以用Ajax返回大段的html文本和json格式的字符串,然后用eval()方法 转化为json对象 php中的json编码:json_encode(); ph ...

  9. GD库使用小结---2

    接着上一篇.GD库可以折腾很多用法出来,当然得跟画图相关,除了前面的验证码.水印外,还可以进行图片的缩放,裁剪.旋转等操作,这在很多应用中可以见到. 1. 加水印 前面已经知道,我们可以使用image ...

  10. 前端开发中的一些chrome插件推荐

    这篇博客推荐的都是谷歌chrome浏览器插件,理论上,与之相同内核的浏览器都能使用.由于是谷歌插件,所以在天朝的网络,你懂的! 红杏 专为 学者 .程序员.外贸工作者 打造的上网加速器.我们相信,上网 ...