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. spring源码分析之spring-messaging模块详解

    0 概述 spring-messaging模块为集成messaging api和消息协议提供支持. 其代码结构为: 其中base定义了消息Message(MessageHeader和body).消息处 ...

  2. 利用mmap /dev/mem 读写Linux内存

    转载:http://blog.csdn.net/zhanglei4214/article/details/6653568 使用 hexedit /dev/mem 可以显示所有物理内存中的信息. 运用m ...

  3. PHP.4-DIV+CSS标准网页布局准备工作(下)

    DIV+CSS标准网页布局准备工作 区块属性(区块模型) 属 性 描 述 Margin(注) 是定义区块外边界与上级元素距离的属性,用1到4个值来设置元素的边界,每个值都是长度.百分比或者auto,百 ...

  4. Codec工具类

    import java.math.BigInteger; import org.apache.commons.codec.DecoderException; import org.apache.com ...

  5. poj1328解题报告(贪心、线段交集)

    POJ 1328,题目链接http://poj.org/problem?id=1328 题意: 有一海岸线(x轴),一半是陆地(y<0).一半是海(y>0),海上有一些小岛(用坐标点表示P ...

  6. Linux 修改swap虚拟内存大小

          swap是内存的交换区:换句话说,如果内存不够用了,那么系统会在硬盘上存储一些内存中不常用的数据,之后将这部分数据在存储中析构掉:这样内存就又有剩余空间可以运行东东啦,这个过程也就是所谓的 ...

  7. UpdatePanel中执行js

    在UpdatePanel中,直接使用Page.ClientScript.RegisterStartupScript的方式执行javascript,会导致无法执行.原因可能是因为RegisterStar ...

  8. MVC下用户登录状态校验的问题以及解决方案--------------Action全局过滤器的使用

    前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...

  9. HDOJ2027统计元音

    统计元音 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  10. 【转载】颜色空间-RGB、HSI、HSV、YUV、YCbCr的简介

    转载自缘佳荟的博客. 颜色通常用三个相对独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.而颜色可以由不同的角度,用三个一组的不同属性加以描述,就产生了不同的颜色空间.但 ...