(一)HTTP协议的一些知识点(来自那些年的笔记)
目录
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 |
服务器通过这三个头,告诉浏览器不要缓存资源;之所以会出现这么多头字段来告诉浏览器不要缓存数据,主要是市面上的浏览器不唯一 ;
看代码
(一)HTTP协议的一些知识点(来自那些年的笔记)的更多相关文章
- 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- 网络协议IPV6基础知识点集锦
由于互联网的快速发展与普及,原有的IPV4地址已不能满足网络用户的需求,虽然NAT可以缓解IPV4地址的耗尽,但NAT破坏了网络环境的开放.透明以及端到端的特性,因此IPV6地址协议应运而生. IPV ...
- Servlet 知识点总结(来自那些年的笔记)
2018年04月15日 20:16:01 淮左白衣 阅读数:350 版权声明:转载请给出原文链接 https://blog.csdn.net/youngyouth/article/details/ ...
- HTTP协议web开发知识点
HTTP协议 HTTP协议简介 超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式.协作式和超媒体信息系统的应用层协议.HTTP是万维网的数 ...
- (五)Respose 知识点总结 (来自那些年的笔记)
目录 HttpServletResponse简介 向客户机写数据 HttpServletResponse应用 打印中文,让浏览器显示不乱码 : 下载文件 输出随机图片(验证码) 不要缓存 图片的src ...
- (四)Resquest 知识点总结 (来自那些年的笔记)
目录 URL和URI的区别 获取URL.URI 什么是HttpServletResquest 获取请求头中字段的内容 获取请求信息的数据 将客户机的请求变为一个流返回 常用的方法 request乱码问 ...
- (三)Servlet 知识点总结(来自那些年的笔记)
(史上最全知识汇总)转载请贴上原文链接! 作者:淮左白衣 写于 2018年4月15日20:14:55 如果,碰巧你打开了本篇博客,相信我,你想要的servlet知识,这里应该都能找到!! 目录 (史上 ...
- (八)JSP 技术知识点总结(来自那些年的笔记)
目录 什么是 jsp Jsp 调用和运行原理(简略版) Jsp语法 Jsp指令简介 Page指令 Include指令 taglib指令 Jsp乱码问题 jsp运行原理(详细版) JSP中的九大隐式对象 ...
- (七)Session 对象知识点总结(来自那些年的笔记)
如果你想要转载话,可不可以不要删掉下面的 作者信息 呀!: 作者:淮左白衣 写于 来源笔者自己之前学javaWeb的时候,写的笔记 : 目录 Session对象 Session和cookie的主要区别 ...
随机推荐
- mvn ssm 异常 org.springframework.beans.factory.BeanCreationException:Error creating bean with name 'multipartResolver'
解决方案: 添加 commons-fileupload-1.2.jar <!-- https://mvnrepository.com/artifact/commons-fileupload/co ...
- vue学习--vue项目端口不固定,无法指定问题
写于20190819 前面是自己解决的思路,后面是解决方法以及需要记住的一些更改 package.json 之前只知道vue项目是基于node.js,对node.js了解不是很深入,项目的开始文件是p ...
- tomcat设置gzip
使用tomcat发布3dtiles或terrain数据遇到的gzip问题 问题一 对大于1KB的json请求进行gzip压缩,json为原文件 1.创建原始文件 2.设置 在apache-tomcat ...
- (转)mysql更改数据目录
mysql 更改默认数据目录 http://www.cnblogs.com/chenny7/p/3642363.html 本文主要介绍在CentOS下通过yum命令安装MySQL之后,如何移动默认数据 ...
- Redis企业实战的一些坑
附录:Redis企业实战的一些坑 一.前言 小伙伴们对Redis应该不陌生,Redis是系统必备的分布式缓存中间件,主要用来解决高并发下分担DB资源的负载,从而提升系统吞吐量. Redis支持多种数据 ...
- oracle sql insert插入字符&
最近遇到insert 语句插入&字符报弹出框,如下: sql: insert into test_ldl001 (ID, NAME) values (', '/test/test.do?act ...
- uboot移植spi驱动
记录一下在uboot内移植spi驱动的过程 芯片:freescale Mpc8308 uboot版本:u-boot-2009.11-rc1.2 需求:我们需要在uboot下通过spi配置一个时钟芯片( ...
- 在基于acpi的linux系统上如何检查当前系统是否支持深度睡眠?
答: 执行以下命令: # dmesg|grep -i acpi |grep -i supports (S3表示支持深度睡眠) ACPI: (supports S0 S1 S3 S4 S5)
- zblog上传安装主题插件不成功的原因和解决办法
最近有不少zblog用户反映在后台上传安装主题或者插件的时候出现了问题.本文就来尝试说明下这类问题的原因和解决办法. 首先来说说zblog主题或者插件的安装方法,一共有三种方式: 第一种是直接在网站后 ...
- java导入excel很完美的取值的方法
java导入excel很完美的取值的方法 1.解决方法: /** * 获取单元格数据内容为字符串类型的数据 * @param cell Excel单元格 * @return St ...