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. (转)Windows7 64位系统搭建Cocos2d-x 2.2.1最新版以及Android交叉编译环境(详细教程) .

    声明:本教程在参考了以下博文,并经过自己的摸索后实际操作得出,本教程系本人原创,由于升级后的cocos2d-x有了一些变化,目前的博文还没有关于Cocos2d-x 2.2.1最新版搭建Android交 ...

  2. 杂乱无章之Oracle(一)

    1. 设置共享池大小 SQL>ALTER  SYSTEM  SET  SHARED_POOL_SIZE=32M; 2. 数据库高速缓冲区(database  buffer  cache):SQL ...

  3. MYSQL基础笔记(二)-SQL基本操作

    SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...

  4. Android ExpandableListView的技巧和问题

    前言: 最近一个多月在认真的学习Android和做项目,文章内容表达的不好或者理解错了,希望大家评论指出. :-) 本文是总结几个比较常用且使用的技巧,和一个大家都会遇到的问题. 文章中大部分语句摘抄 ...

  5. 使用markdown及highlight

    一.markdown 安装markdown2 pip install markdown2 应用markdown2 进入blog APP,创建templatetags文件夹,在文件夹内创建__init_ ...

  6. javascript一些常用操作

    一:验证日期 1:日期必须满足yyyy-MM-dd格式 2:日期必须是合法的日期,如2016-02-30就是不存在 //验证就诊日期 function checkVisitDate(date){ va ...

  7. hishop网站迁移后出现DataProtectionConfigurationProvider错误(转)

    配置错误说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件.分析器错误信息: 未能使用提供程序“DataProtectionConfiguration ...

  8. MVC中提示错误:从客户端中检测到有潜在危险的 Request.Form 值的详细解决方法

    今天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&q ...

  9. 每天一道LeetCode--141.Linked List Cycle(链表环问题)

    Given a linked list, determine if it has a cycle in it. Follow up:Can you solve it without using ext ...

  10. markdown编辑

    有用的技巧之,如何实现首行空两格,把输入法切换成全角(shift+space),就可以实现一个两字符的空格了. 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 w s r s r s 文本 ...