目录


http协议1.0、1.1两个版本的区别

(具体的在图解HTTP上面有讲)

区别在于: 1.0版本客户机与web服务器建立连接之后,只能获取一个web资源,获取完一个web资源以后,连接就会被断开而1.1版本在建立连接之后,则可以获取多个web资源


访问几次服务器?

场景:一个web页面中,使用了三个img标签,引用三幅图片;当客户端访问服务器中的这个web页面时,客户端总共会访问几次服务器呢?即向服务器发送几次请求 ;

答案是4次

第一次是客户端向服务器要这个web页面;然后服务器将回送一个响应头;这里仅仅是HTML文件,不含有图片等静态资源等图片等静态资源,在HTML里面都是以超链接的形式存在);当客户端的IE浏览器解析HTML文档的时候,遇到img标签的时候,发现是一个静态资源,会根据其超链接,再次向服务器要图片资源;因此,还需要额外的访问3次服务器,加起来一共是四次;

我们在写web页面的时候,应该尽量减少客户端访问服务器的次数;

也就是说,浏览器在解析HTML的时候,遇到静态资源,会继续向服务器发送请求


Http请求行和请求方式详解

  • 什么是http请求

    客户端连上服务器,向服务器请求某个web资源,称之为客户端向服务器发送了一个http请求。

  • 一个完整的http请求包括如下内容:

一个请求行 GET news/a.html [HTTP/1.1 200 OK 5ms]
若干个请求头
Accept text/html,application/xhtml+xm…plication/xml;q=0.9,/;q=0.8
Accept-Language zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding gzip, deflate
Connection keep-alive
Upgrade-Insecure-Requests 1
…… ……
一个空行 ( 这里有一个空行,在请求数据与请求内容之间)
实体内容 (只有用POST方式提交的数据,才会写在这里)

  • 请求行的细节

    请求方式,现在常用的只有两种:POST 、GET

    默认情况下,浏览器向服务器发送的请求都是GET,比如:直接输入地址访问浏览器、超链接等,都是get;只有使用表单提交数据的时候,才可以改变提交方式为POST ;

  • POST还是GET的区别在于:数据的传递上

    如果请求方式为 GET 形式,则可以在请求的URL地址后面以?的形式带上,准备提交给服务器的数据,多个数据之间以 & 进行分隔;

    例如: GET /mail/1.html?name=abc&pass=xyz HTTP/1.1

    GET请求有个特点:在URL地址后面附带的参数是有限制的,其数据容量通常不能超过 1K

    请求方式为POST方式时:则可以在请求的实体内容中的向服务器发送数据,POST方式传递的数据是无限制的;


可以在超链接上传一些数据

可以在点击超链接访问服务器的时候,向服务器提交一些数据;我们在超链接的herf=”2.html?name=allbet” 这样点击,超链接就会访问2.html页面,并且会带些数据传过去;


HTTP请求头各个头字段的详解

请求头字段 含义
Accept : 用于告诉服务器,客户机支持的数据类型
Accept-Charset: 用于告诉服务器,客户机采用的编码
Accept-Encoding: 用于告诉服务器,客户机支持的数据压缩格式
Accept-language: 客户机的语言环境
Host : 客户机通过这个头告诉服务器,想要访问的主机名
If-Modified-Since : 客户机通过这个头告诉服务器,资源的缓存时间
Referer: 客户机通过这个头告诉服务器,它是从哪一个资源来访问服务器的;(防盗链)
User-Agent: 客户机通过这个头,告诉服务器,客户机的软件环境 ;
…… …….

HTTP响应和响应行状态详解

一个HTTP响应代表服务器向客户端回送的数据,它包括:一个状态行、若干消息头、以及实体内容 ;

  • 常见状态码详解
状态码 含义
302: 代表请求的资源已经移动到新的地方,服务器等会还会回送一个localtion,指明新资源的位置 ;
304、307: 服务器回送这两个状态码,表示让客户端浏览器去寻找缓存 ;
404: 表示服务器没有这个资源;
403: 表示访问权限不够
500: 服务器端出现错误

断点下载

HTTP响应头字段——Range,这个字段可以实现断点下载 ;

Range它指示服务器只传输一部分Web资源。这个头可以实现断点续传功能。Range字段可以通过三种格式设置要传输的字节范围:

Range: bytes=1000-2000
传输范围为1000到2000字节
Range:bytes=1000-
传输web资源中第1000个字节以后的所有内容 ;
Range :bytes=1000
传输最后1000个字节

HTTP响应头字段详解

字段 含义
Localtion 请求重定向;地址栏会发生变化;
Sever 服务器通过这个头,告诉浏览器,服务器的类型
Content-Encoding 服务器通过这个头,告诉浏览器,数据的压缩格式
Content-Length 服务器通过这个头,告诉浏览器,回送的数据长度,压缩数据需要带上这个;
Content-Type 服务器通过这个头,告诉浏览器,回送的数据的数据类型
Refresh: 服务器通过这个头,告诉浏览器,隔多久刷新一下
Content-Dispositon 服务器通过这个头,告诉浏览器,以下载方式打开数据;
Etag 服务器,为每个web资源生成一个标识符。每次都会随着资源一起返回;浏览器访问服务器的时候,也会带着这个标识符;这个标识符,就是判断服务器端的资源是否更新,为了实时更新数据 ;
Last-Modified: 服务器通过这个头,告诉浏览器,当前资源的最后更新时间
Expires: 服务器通过这个头,告诉浏览器把回送的资源缓存多长时间,-1或0表示不缓存 ;
Accept-Range: 这个字段说明web服务器是否支持Range,支持的话,就返回Accept-Range:bytes ;如果不支持,就返回Accept-Range:none
Content-Range: 指定了返回Web资源的字节范围,这个字段值的格式是:Content-Range:1000-3000/5000 ; 表示:整个资源一个5000字节,返回的是第1000到3000字节 ;

Etag 与 Last-Modified 的区别:

当我们与服务器建立连接以后, 第一次获取一个web资源的时候以后,连接没有断开,这时候,web端更新了之前的web数据,这时候浏览器,再次请求这个数据的时候, 由于之前的连接没断开,服务器端不会再做Last-Modified判断;会告诉浏览器,去寻找缓存,这样数据就无法实时更新; 而Etag,每次访问数据都会带着,只要一比对Etag不一样了,就会发现数据需要更新


关于缓存的字段

字段 取值
Expires: -1/0 ,具体毫秒值
Cache-Control: no-cache
Pragma: no-cache

服务器通过这三个头,告诉浏览器不要缓存资源;之所以会出现这么多头字段来告诉浏览器不要缓存数据,主要是市面上的浏览器不唯一 ;

看代码

最新文章

  1. fir.im Weekly - 聊聊 Google 开发者大会
  2. [No000042]CSS 之 平时那些你不敢用的字体
  3. bootstrap中如何让响应式图片(img-responsive)水平居中
  4. java IO之AutoCloseable,Closeable和Flushable接口
  5. 使用xib创建cell时 bug
  6. 通向高可扩展性之路(WhatsApp篇)---- 脸书花了190亿买来的WhatsApp的架构
  7. 无法将类型为“Excel.ApplicationClass”的 COM 对象强制转换为接口类 型“Excel._Application”。此操作失败的原因是对 IID 为“{000208D5 -0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来 自 HRESULT:
  8. (转) VS2012程序打包部署详解
  9. JSP中解决获取请求参数中文乱码问题
  10. COJ 2106 road
  11. 享受一下大神的感觉, unity中用C#自己封装dll
  12. MediaController
  13. vue-axios配置token,上传图片
  14. Spring定时任务quartz表达式
  15. Hibernate【与Spring整合】
  16. CSS弹性盒模型(flex box)
  17. 浅析HTTP代理原理--转
  18. [Swift]LeetCode1019. 链表中的下一个更大节点 | Next Greater Node In Linked List
  19. C# [Win32] [GDI+] [API] Load HFONT from Memory
  20. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

热门文章

  1. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?
  2. Redis删除相同前缀的key
  3. 更加方便的使用git上传自己的代码
  4. EASYUI赋值和取值
  5. IdentityServer4入门三:授权模式
  6. RK3399 修改系统默认语言为简体中文
  7. mkfs格式化分区(为分区写入文件系统)
  8. 解决GitHub上传大于100M文件失败
  9. win10 合并磁盘 disk Acronis Disk Director
  10. 通AI启示录,从一篇数学物理基础论文说起 原创: 关注前沿科技 量子位 今天 允中 发自 凹非寺