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. Frame Stacking 框架堆叠

    /* [题目来源]http://poj.org/problem?id=1128 [题目分析] 几张图片叠在一起,给出堆叠后的情况,要求出所有可能的从下到上的堆叠顺序. [思路分析] 1.题目已经很明确 ...

  2. Java基础知识强化101:Java 中的 String对象真的不可变吗 ?

    1. 什么是不可变对象?       众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对 ...

  3. Objective-C ,ios,iphone开发基础:快速实现一个简单的图片查看器

    新建一个single view 工程: 关闭ARC , 在.xib视图文件上拖放一个UIImageView  两个UIButton ,一个UISlider ,布局如图. 并为他们连线, UIImage ...

  4. oracle--insert

    常规insert语法就不说了,还有些特殊用法 1.  insert all into table1(col1,col2) values(v1,v2) into table2(col1,col2) va ...

  5. CF Spreadsheets (数学)

    Spreadsheets time limit per test 10 seconds memory limit per test 64 megabytes input standard input ...

  6. Oracle常用命令13(数据库的启动、关闭)

    数据库的启动.关闭 数据库的启动:安装启动.非安装启动.共享启动.独占启动.约束启动.强制启动 --不登陆的方式进入 Sqlplus /nolog 安装启动: Startup {pfile=<f ...

  7. [改善Java代码]集合运算时使用更优雅的方式

    在初中代数中,我们经常会求两个集合的并集.交集.差集等,在Java中也存在着此 类运算,那如何实现呢? 一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果.是的,遍历可以实现并 ...

  8. 关于Eclipse中Browser中显示html页面的总结.

    用Eclipse中的Browser显示html页面,因为"just small thing.. browser in the studio is light browser.. it can ...

  9. android开发推荐书籍列表

    1.  <第一行android代码> 入门,简单易懂,全面. 2. << Android群英传 >> 特点:UI部分相当详细 3. <<深入理解Andr ...

  10. ORACLE之PACKAGE

    刚学pl/sql编程,写了两个package.pkg_temp_fn和pkg_temp_fn2.内容涉及pl/sql基本语法,游标,存储过程(in,out),函数(有返回值). pkg_temp_fn ...