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. Cross Site Request Forgery (CSRF)--spring security -转

    http://docs.spring.io/spring-security/site/docs/3.2.0.CI-SNAPSHOT/reference/html/csrf.html 13. Cross ...

  2. Windows 7中使用Eclipse 使用CDT and WinGW 开发C/C++(转载)

    以前使用visual studio 2010编写C/C++,后来接触了Eclipse后,据说eclipse也可以编写C/C++,以前觉得Visual studio 2010还蛮不错的,也没有多大好奇心 ...

  3. Android(java)学习笔记96:如何改变spinner系统自带的字体和颜色

    1.首先我们要知道spinner系统自带字体和颜色本质: 原生的Spring 控件是无法更改字体和颜色的... 从下面的代码可以看出...红色的标注显示使用的是Android默认的布局.. Spinn ...

  4. CoreDate的使用

    勾选 xcode的 CoreDate会帮我们自动创建 CoreData 但是我们通常不那样使用,通常把 CoreDate 在单利类中创建, // // ZYDAO.h // StoryboardTes ...

  5. 模拟游客一天的生活与旅游java程序代写源码

    在某个城市的商业区里,有一家首饰店,一家饭店,一家面馆,一家火锅店,一家银行,一家当铺 现在有一群来自四川的游客,一群陕西的游客,一群上海的游客,和以上各店家的工作人员在此区域里,请模拟他们一天的生活 ...

  6. rpmdb: BDB0113 错误

    解决方法: rpm --rebuilddb yum clean all

  7. DAG的动态规划 (UVA 1025 A Spy in the Metro)

    第一遍,刘汝佳提示+题解:回头再看!!! POINT: dp[time][sta]; 在time时刻在车站sta还需要最少等待多长时间: 终点的状态很确定必然是的 dp[T][N] = 0 ---即在 ...

  8. hdu 4604 动态规划

    思路:这题的感觉就是最长上升子序列的升级版.首先对于最长上升子序列要用n*log(n)的算法才行,这个复杂度的算法可以从hdu1025得到启发.然后就是什么情况下最优问题了.对于序列中某个数i,找出其 ...

  9. Laravel_Elixir_gulp任务利器安装

    目录 说明 安装 1安装gulp 2安装Elixir 3Elixir快速入门 4合并cssjs 5版本控制version 6复制copy 7方法串联 1.说明 详细说明暂时省略,后期补充.小白的角度理 ...

  10. ps扩大、缩小选区

    用"套索工具""魔棒工具"或者等工具将选区选出来,创建出一个需要处理的选区.   点击ps菜单栏中的"选择",在下拉菜单中选择"修 ...