###############################################################################

最近几天的一些学习内容总结,主要是张孝祥HTTP协议详解"中的视频内容

###############################################################################

了解HTTP:

超文本传输协议(Hypertext Transfer Protocol)
web浏览器和服务器之类的交互过程必须遵守的协议.他是tcp/ip中的一个应用协议。用来协议数据交换过程和数据本身的格式.主要的有HTTP/1.0和HTTP1.1.

HTTP1.0的会话方式

在1.0时的会话方式
1.建立连接
    2.发出请求信息
    3.回送响应信息
4.关掉连接

小结:浏览器和web服务器连接很短,每次连接只处理一个请求和响应。对每一个页的请求,浏览器与web服务器都要建立一次单独的连接.浏览器没有关掉前,连接就断开了.浏览器和服务器之间的通信是完全独立分开的请求和响应对.因为这样没法断点浏览器是否断开,没法做连接状态控制。建立和关掉连接会很占用连接时间.

如果一个网页中有多个元素会怎么样(比如有多个图.)
请求,然后得到网页的内容,然后在解析,解析后发现网页中有多个元素。就在次向服务器发送多次请求.
在一个网页中,在http头中的Connection中有多少个close的头,就相当有多少个http的连接.

HTTP1.1和HTTP1.0的主要分别
在同一个tcp的连接中可以传送多个HTTP请求和响应.
多个请求和响应可以重叠,多个请求和响应可以同时进行.
更加多的请求头和响应头(比如HTTP1.0没有host的字段).

总结: 在 HTTP/1.0 中,大多实现为每个请求/响应交换使用新的连接。在 HTTP/1.1 中,一个连接可用于一次或多次请求/响应交换,尽管连接可能由于各种原因被关闭.这是他们之间最大的分别.

版本
      超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。在RFC 2145中描述了HTTP版本号的用法。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。
  0.9
  已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。
  HTTP/1.0
  这是第一个在通讯中指定版本号的 HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。
  HTTP/1.1
  当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。

HTTP1.0的格式
request(HTTP请求消息)
结构:一个请求行.部分消息头,以及实体内容,其中的一些消息内容都是可选择的.消息头和实体内容之间要用空行分开.

GET /index.html HTTP/1.1 //请求头,下面都是消息头.
Accept: */*
Accept-Languang:en-us
Connection:keep-alive
Host:localhost
Referer:HTTP://localhost/index.html
User-Agent:Mozilla/4.0
Accept-Encoding:gzip,deflate//到上面都是消息头,下面一个空行表示完了,接下来是实体内容.

Response响应消息头

在接收并解析请求消息后,服务器以 HTTP 响应消息响应。相当服务器对客户的http的回应
结构:一个状态行.部分消息头,以及实体内容,其中的一些消息内容都是可选择的.消息头和实体内容之间要用空行分开.

HTTP/1.1 200 ok           //状态行.下面为消息头
Server:Apache2.2
Date:Thu, 13 Jul 2008 16:29:46 GMT
Content-Length:2222
Content-Type:text/html
Cache_control:private //和请求消息头一样下面有一个空行

注意:使用get的方法的请求消息中是不能包含实体内容的,只有使用post,put和delete的方法请求消息中才能有实体内容.对HTTP1.1来讲,如果HTTP中有实体内容,但没有使用权chunked传输编码.那么消息头部分必须包含内容长度字段.不然不知什么时候内容才结束。HTTP1.1中一定要有host字段

以上消息头的结构:每个消息头都包含一个头字段名称,然后依次是冒号,空格值,回车和换行符,字段不区分大小写.对消息头中的消息头可以任何顺序排列.
消息头可以分为信息头,请求头,响应头,实体头四类
如果有多个选项,可以用逗号分隔Accept-Encoding:gzip ,deflate

请求行和状态行.
请求行格式: 请求方式 资源路径 HTTP版本号<CRLF>
例: GET /test.html HTTP/1.1
请求方式有:POST,HEAD,OPTIONS,DELETE,TRACE,PUT

状态行格式: HTTP版本号 状态码 原因<CRLF>
例: HTTP/1.1    200 OK

使用telnet来测试.
$ telnet www.php-oa.com 80
Trying 211.103.156.124...
Connected to www.php-oa.com.
Escape character is '^]'.
get /fopen.php HTTP/1.1

HTTP/1.1 400 Bad Request
Date: Mon, 27 Oct 2008 08:02:52 GMT
Server: Apache/2.2.3 (CentOS)
Content-Length: 306
Connection: close
Content-Type: text/html; charset=iso-8859-1

GET和POST方式传递参数时各自的清况
HTTP://www.php-oa.com/wp?a=b&c=b
GET时
GET /wp?a=b&c=b HTTP/1.1
注:因为url长度控制,所以不能长过1024
POST时
POST / HTTP/1.1
host:
Content-Type:application/x-www-form-urlencoded
Content-Length:28

wp?a=b&c=b //实体正文中
注:post因为在实体内容中间,可以任意大小.

响应状态码

状态码一般是一个3位的十进制数大致分为5类

(1)100-199

表示成功接受请求,要求客户端继续提交下一次请求才能完成整个处理过程。

100:继续

101: 切换协议,如果客户端发送的请求需要另一种协议进行会话,服务器发送101响应状态码表示将遵从客户端的请求将协议转换为另一种状态。

(2)200-299

表示成功接受请求并完成整个处理过程。

200:正常,表示一切正常,返回的是正常请求的结果,如在Ajax开发应用中常用来判断这个状态码,以判断服务器是否进行了正常响应。

201:服务器已经创建了文档,Location 头给出了这个文档的URL

202: 告诉客户端请求已经接受处理还没有完成。

(3)300-399

为完成请求需要客户端进一步细化请求。

(4)400-499

客户端的请求有错误

400:无效请求。表示客户机请求中有不正确的语法格式。

401:未经授权。当客户机视图访问一个受密码保护的页面而没有传送Authorization请求头传递用户信息时,服务器返回401状态码。

402:需要付款。目前没有使用,为以后更高的HTTP版本保留。

403:一般是由于服务器文件设置了目录或文件的权限设置所导致。

404:服务器找不到客户端请求的资源。

405:请求访问方式不对。例如有的资源只能使用POST方式进行访问,当访问方式变为GET时会出现这个状态码。

408:超时,在服务器允许等待的时间内客户端没有发出请求。

414:请求的URI太长。

(5)500-599

服务器端出现错误。

500:服务器内部错误。如:CGI,ASP,JSP程序发生错误导致。

502:无效网关。

503:服务不可用,如:数据库或服务器超过它所能应付的最大请求数。对客户端目前的正常请求无法处理。

505:不支持的HTTP版本。

通用信息头
通用信息头可以用于请求消息,也可以用于响应消息,包括一些写被传输的实体内容没有关系的一些消息头字段.
Cache-Control: no-cache (*) //是否缓存当前的消息
Connection: close     //用于指定处理完本次请求后是否保持连接. 如果为close时就处理完响应就断开连接(HTTP1.1默认是打开持久连接.如果没有close就默认是连接的.)
Date:Tue, 11 Jul 2000 18:23:51 GMT
Pragma:no-cache     //HTTP1.0中指定不要缓存的HTTP头.
Trailer:Date           //指于在实体信息后面可以出现那些头字段
Transfer_Encoding:chunked    //传输的编码方式.给HTTP内容分段传送。chunked是指每个分段开始都有一个16进制的长度.后后一个分段必须为零的分段.
Upgrade:HTTP/2.0 ,sHTTP/1.3 //希望使用什么协议来通知.
Via:HTTP/1.1 Proxy1,Http/1.1 Proxy2 //代理服务器的信息,如果经过多个,就会在vai中加后面依次加入多个.

注:Content-Length和Transfer_Encoding分别什么时候用,如果程序在缓冲中知道内容长度就使用Content-Length,如果缓冲区一次不能缓冲,那就只能使用Transfer_Encoding,然后分段传输.

常用请求头:
主要是用在客户端向服务器传递附加和信息,比如支持的数据类型,压缩方法,语言
Accept:text/html,image/*           //支持的文件格式
Accept-Charset:ISO-8859-1,unicode-1-1 //支持的字符集
Accept-Encoding:gzip,compress //支持的编码方式
Accept-language:en-gb,zh-cn   //支持的语言
Authorization:Basic asdfsadfsafdaenh4 //加密认证方法
Host: www.php-oa.com:80    //指定客户端打开的主机名和端口号
if-Match:"aaa","bbb"          //实体标签.用来查看是否是和当前的信息一样.
if-Modified-Since: Tue, 11 Jul 2008 18:03:00 GMT //上次缓存的网页缓存时间
if-None-Match:"aaa","bbb"    //和if-match相反
if-Range: Tue, 11 Jul 2008 18:03:00 GMT   //只能和Range一起使用.
if_Unmodified-Since:Tue,11 Jul 2008 18:03:00 GMT 和if-Modified-Sinc相反.
Max-Forwards: 1   //通过代理服务器的数量,象ttl值.
Proxy-authorization: //代理时的方法
Range:bytes=100-599 //断点续传时使用的HTTP头
Referer:HTTP://www.php-oa.com/index.php //上一跳来源的网站
TE:trailers.deflate //说明客户除了chunked还能使用什么方法
User-Agent:Mozilla/40(compatible;MSIE5.5;Windows NT 5.0) //浏览器信息

实体头
主要用做实体内容的元信息,表示实体内容的属性,包括实体信息类型,长度,压缩方法.最后一次修改时间,数据有效期等.

Allow :GET.POST
Content-Encoding:gzip
Content-Language:zh-cn
Content-Length:800                   //大小
Content-Location:HTTP://www.php-oa.com/index.html   //重定向到
Content-MD5: ABDEDFDEFERDFEFE==           //指出md5,可以算出内容是否被改变过
Content-Range:bytes 2543-4532/7878        //断点续传时用.
Content-Type:text/html;charset=GB2312     //指定文件类型,和字符集
Expires: Tue, 28 Jul 2008 16:49:49          //过期时间
Last-Modified:Tue 11 Jul 2008 16:49:4      //最后更新时间

扩展头
在HTTP1.1中没有定义的字段.比如下面的这些.
Cookie
Set-Cookie
Refersh: 1; url=HTTP://www.php-oa.com
Content-Disposition
Content-Type:application/octet-stream
Content-Disposition:attachment;filename=aaa.zip //filename为文件保存的名字

传智播客 HTTP协议详解相关推荐

  1. 【传智播客郑州校区分享】AndroidAnnotations框架详解

    AndroidAnnotations框架详解 文/传智播客郑州中心就业服务部 简介 在之前的开发中,你肯定用到了xUtils及ButterKnife等依赖注入框架,你可以使用这些框架来简化你的代码,因 ...

  2. 传智播客html css3笔记,传智播客详解Css3九大常用属性

    在Css3的学习和实际操作中,我们经常会接触到一些常用属性,比如字体.文本.列表和背景等.下面,传智播客将对常用的Css3九大属性进行详解. 1.传智播客详解Css3九大常用属性-字体 l Font- ...

  3. 传智播客php page类,传智播客详解PHP类和对象的其他相关技术

    为了便于广大程序员和初学者学习PHP,传智播客的老师将PHP类和对象的其他相关技术进行了总结和分析,如下: 传智播客的老师指出,当在一个代码中,需要使用一个类(比如new),但此时,在这行代码之前,都 ...

  4. 传智播客ADO.Net项目开发教程详解

    内容简介: 本教程为传智播客.Net培训课堂的现场录像,请到传智播客.Net学院下载更多免费.Net视频教程或者参加讲师现场授课的.Net实地培训班. 视频目录: (一)操作员管理.部门管理.基础数据 ...

  5. 【网站制作视频教程】-第22讲 css盒子模型详解!-传智播客

    传智播客(  http://icd.itcast.cn/)是一家网页平面设计培训学院,专注于网页设计培训,平面设计培训,fash培训,ui设计培训.   网页设计视频教程下载地址:http://icd ...

  6. http协议服务器ppt,传智播客内部资料HTTP协议.ppt

    <传智播客内部资料HTTP协议.ppt>由会员分享,可在线阅读,更多相关<传智播客内部资料HTTP协议.ppt(12页珍藏版)>请在人人文库网上搜索. 1.北京传智播客教育 , ...

  7. 陈力:传智播客古代 珍宝币 泡泡龙游戏开发第37讲:HTTP协议请求(响应)

    陈力:传智播客古代 珍宝币 泡泡龙游戏开发第37讲:HTTP协议请求(响应) 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.h ...

  8. 关于传智播客视频教程的解压方法

    关于传智播客视频教程的解压方法 问题:          通过传智播客的迅雷种子下载回来的文件如下图所示:                   注意:(文件的后缀名都是XX.ZIP.00X)这些文件不 ...

  9. 传智播客西安中心之Android课程大纲

    2015年JavaEE+Android就业班课程详解 全价22980元,优惠价18980元!(享受优惠价的条件是什么?) 前言:你已经错过做移动互联时代的领头羊,难道15年你还要继续埋没在茫茫人海中吗 ...

最新文章

  1. 用软件如何识别pdf文字
  2. 使用TimeQuest时序分析器
  3. Jpeglib使用指南, 各种压缩包的压缩和解压方法, 开源社区分裂史
  4. python调参工作都是干啥的_Python中Gradient Boosting Machine(GBM)调参方法详解
  5. 解决:Error while compiling statement: FAILED: SemanticException [Error 10007]: Ambiguous column refere
  6. test.php.bak,MongoDB热备份工具:解决官方版备份缺陷
  7. sqlserver 性能计数器的问题
  8. 多线程中的线程安全问题
  9. 【2019.09.14】2019icpc沈阳网络赛
  10. 华为交换机命令 端口速率_华为交换机限速配置命令2016
  11. 【IDEA】IDEA中部署的项目添加Tomcat自带的一些项目
  12. 11款超5000星 后台管理模板, 总有一款适合你!
  13. Jep 解析字符串数学公式
  14. java创建http接口
  15. 漫画:什么是二分查找?(修订版)
  16. 双网卡 跃点_关于windows 双网卡和跃点数研究
  17. 55寸电视尺寸长宽高多少
  18. 2022下半年软考什么时候开始报名?
  19. 上板子在线抓波发现app_rdy一直为低
  20. 如何应对大数据的三大挑战?

热门文章

  1. 一颗璀璨的月光宝石——Lua
  2. java 直播rtmp推流_如何设置rtmp推流直播(斗鱼,腾讯云,yy等直播)?
  3. 【SeedLab】Morris Worm Attack Lab
  4. DeepbrainChain2021年末週报
  5. Python中的getattr()和__getattr__方法
  6. Bk3435 蓝牙门锁,配件 开关锁代码
  7. PaddleOCR win10部署 C++
  8. “排队” 用英语怎么说
  9. win10 系统连接 wifi 的小地球图标还在但 wifi 选项没有了的解决办法
  10. C# Newtonsoft.Json