在web应用中,服务器把网页的HTML代码发送给浏览器,让浏览器显示出来,浏览器和服务器之间的传输协议就是HTTP协议。HTTP是在网络上传输HTML的协议,用于浏览器和服务器之间的通信。

一个网页打开的流程是浏览器读取服务器发送的HTML源码后,解析HTML,显示页面,然后根据HTML中的各个链接,再发送请求到服务器,拿到相应图片视频js脚本等资源,最后显示出一个完整的页面。

http请求的流程:

1.浏览器向服务器发送http请求

方法:有post(请求支援并附带数据,可能修改服务器上的资源)\get(仅请求资源)\PUT(增加数据)\DELETE(删除数据);

路径:/full/url/path;

域名:由host指定,如   host:www.sina.com.cn

当请求方法为post时,请求还包括一个body,包含用户数据。

2.服务器向浏览器返回HTTP相应

响应代码:

200:成功

3XX:重定向

4XX:客户端发送的请求有错误

5XX:服务器端处理时发生了错误

响应类型:由Content-Type指定。

通常服务器返回的HTTP响应会携带内容,即一个body,如HTML源码。

3.浏览器继续向服务器发送请求,就继续1和2的步骤。

注意:HTTP协议采用了简单的请求-响应的模式,一个HTTP请求只处理一个资源。一个网页中的请求可以是不同的服务器,一个站点可以链接到其他站点。比如图片可以链接于不同的网站。

HTTP格式

HTTP请求和响应都遵循相同的格式,包含Header和Body两个部分。Body可选。

HTTP GET请求格式:(Header一行一个,换行符  \r\n)

GET /path HTTP/1.1    //例:GET /books/?sex=man&name=professional HTTP/1.1

Header1:Value1

Header2:Value2

Header3:Value3   //GET可提交的数据量受到URL长度的限制,这个限制不是HTTP协议限制的,是浏览器及服务器限制的。

HTTP POST请求格式:(连续两个换行符时,header部分结束,后面全部为body)

POST /path HTTP/1.1

Header1:Value1

Header2:Value2

Header3:Value3

body data……      //HTTP协议对POST的大小没有限制,但处于安全考虑,服务器会在实现时做一定限制。

HTTP响应格式:

200 ok

Header1:Value1

Header2:Value2

Header3:Value3

body data……

注意:body的数据类型由Content-Type来决定。网页时,body是文本,图片时,body是二进制数据。Content-Encoding存在时,body数据被压缩,常见格式是gzip,此时需解压缩。

条件GET使用的时机:

在客户端之前已经访问过某网站,并打算再次访问该网站的时候。

当再次访问这个网站时候,浏览器向服务器发送请求询问是否在上次询问后更改了页面,服务器根据请求判断响应文件是否有更新,更新了则返回正常响应,没有更新则则返回304 Not Modefied响应,告诉浏览器使用已缓存的上次获取文件。

(本文参考地址:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832653051fd44e44e4f9e4ed08f3e5a5ab550358d000)

http协议了解的更多相关文章

  1. HTTP协议系列(1)

    一.为什么学习Http协议       首先明白我们为什么学习HTTP协议,也就是说明白HTTP协议的作用.HTTP协议是用于客户端与服务器之间的通讯.明白了HTTP协议的作用也就知道了为什么要学习H ...

  2. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  3. 协议森林17 我和你的悄悄话 (SSL/TLS协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...

  4. 协议森林16 小美的桌号(DHCP协议)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. DHCP协议用于动态的配置电脑的网络相关参数,如主机的IP地址,路由器出口地址.DNS域名服务器地 ...

  5. 简约之美Jodd-http--深入源码理解http协议

    Jodd 是一个开源的 Java 工具集, 包含一些实用的工具类和小型框架.简单,却很强大! jodd-http是一个轻巧的HTTP客户端.现在我们以一个简单的示例从源码层看看是如何实现的? Http ...

  6. 【JavaScript】javascript中伪协议(javascript:)使用探讨

    javascript:这个特殊的协议类型声明了URL的主体是任意的javascript代码,它由javascript的解释器运行. 比如下面这个死链接: <a href="javasc ...

  7. SNMP简单网络管理协议

    声明:以下内容是学习谌玺老师视频整理出来(http://edu.51cto.com/course/course_id-861.html) SNMP(Simple Network Management ...

  8. 海鑫智圣:物联网漫谈之MQTT协议

    什么是MQTT协议 MQTT(消息队列遥测传输协议)是IBM在1999年专门针对物联网等应用场景来制订的轻量级双向消息传输协议,它主要是为了解决物联网上使用到的设备的互相通信的问题,以及这些设备与后端 ...

  9. linux-图形化远程管理协议

    远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...

  10. RTP与RTCP协议介绍(转载)

    RTSP发起/终结流媒体.RTP传输流媒体数据 .RTCP对RTP进行控制,同步.RTP中没有连接的概念,本身并不能为按序传输数据包提供可靠的保证,也不提供流量控制和拥塞控制,这些都由RTCP来负责完 ...

随机推荐

  1. 转:VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径

    http://www.cnblogs.com/lidabo/archive/2012/05/29/2524170.html

  2. lua metatable 和 _index 实验

    lua metatable 和 _index 中文博客解释: http://www.cnblogs.com/simonw/archive/2007/01/17/622032.html metatabl ...

  3. 手动purge优化器的统计信息与AWR快照,减少对sysaux表空间的占用

    1.运行以下脚本,计算当前优化器统计信息和AWR快照表占用sysaux的空间 SQL> conn / as sysdba SQL> @?/rdbms/admin/awrinfo.sql 2 ...

  4. 部署基于JDK的webservice服务类

    部署服务端 两个注解(@WebService @WebMethod).一个类(Endpoint) 首先新建JAVA工程ws-server 目录结构如下 在工程里新建一个接口,申明一个方法. packa ...

  5. Xcode 遇到 App Transport Security has blocked a cleartext HTTP 错误

    今天用Xcode  创建新项目用到 URL 发送请求时,报下面的错: “App Transport Security has blocked a cleartext HTTP (http://) re ...

  6. iOS 延迟执行

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), ...

  7. Leetcode: String to Integer

    Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...

  8. Codeforce Round #210 Div2

    A:对角线为k其他为0 B:利用两个相邻的数一定gcd为1和1与任何数gcd为1错k个位就行了 C:不会做操蛋,好像是因为上一层的始终小于下一层的 好吧C又研究了一下,是个贪心题,不符合的情况先科不考 ...

  9. MAC开发NDK非常的简单

    转自:http://www.cnblogs.com/jarrah/archive/2013/03/15/2961892.html 附带CDT的下载:http://www.eclipse.org/cdt ...

  10. mysql bin log日志

    装mysql,运行一段时间后,在mysql目录下出现一堆类似mysql-bin.000***,从mysql-bin.000001开始一直排列下来,而且占用了大量硬盘空间,高达几十个G. 对于这些超大空 ...