HTTP 前端需明白的相关知识点
简介:
http(Hyper Text Transfer Protocol)超文本传输协议是万维网应用层的协议,使用了面向连接的TCP作为运输层协议。
特征:
- 简单快速:通过url就可以访问资源,协议简单,使得HTTP服务器的程序规模小,通信速度很快。
- 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
- 无连接:每次连接响应一个请求,连接一次响应后就会断开连接。
- 无状态:无状态协议,是指对于事务处理没有记忆能力,不会记住客户访问过的状态,不能区分访问身份。
http工作原理:
http协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
在浏览器地址栏键入URL,按下回车之后会经历以下流程:
- 浏览器向服务器请求解析该URL中的域名所对应的IP地址
- 浏览器通过IP地址与默认监听的80端口,与服务器建立TCP连接
- 浏览器发送请求报文,这个报文作为TCP第三次握手的第三个报文数据发送给服务器
- 服务器对请求资源进行定位,响应给客户端,
- 若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求(即持久连接);
- 客户端浏览器首先解析状态行、响应头、然后读取响应数据HTML,并在浏览器窗口中显示。
Url:
<协议>://<主机>:<端口(默认80可省略)>/<路径>
Url与Uri区分:
url统一资源定位符,uri统一资源标识符,url它是一种具体的URI,即URL可以用来标识一个资源,是uri的子集,即url属于uri。
http报文组成:
请求报文:请求行、请求头、空行、请求体
响应报文:状态行、响应头、空行、响应体
请求方法:
GET:获取资源
POST :传输资源
HEAD :获得报文首部
DELETE :删除资源
PUT:更新资源
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
Post/Get方法区别:
Get比Post方法不安全,参数暴漏在url上,不能用来传递敏感信息;
Get在url中可传递的参数长度是有限的,Post方法可以传递的参数长度没有限制;
Get参数放在url上传递,Post放在request body中;
Get请求参数会被完整保留在浏览器历史记录里,Post参数不会被保留;
浏览器回退,Get请求不会重复提交,Post请求会重复提交;
Get请求浏览器会自动缓存,Post请求不会自动缓存。
响应行状态码:
1**: 指示信息
2**:成功 200 :ok 206 :partial content(请求带range头的GET请求)
3**:重定向301 :所请求页面转移至新的url,永久重定向 302:临时重定向 304:内容未修改
4**:客户端错误 400:客户端语法错误 403:被请求页面访问被禁止 404:没找到资源
5**:服务器错误 503:服务器过载或当机。
状态码、请求头、响应头资料转载连接:
http://www.51testing.com/html/38/225738-216202.html
持久连接(持续连接)
http1.1版本开始支持持久连接,即keep-alive连接,在使用非持久连接的状态下,http采用的是“请求--应答模式”,每次请求的时候建立连接,完成之后断开连接,即无连接状态。持久连接(持续连接)即响应完成之后还保持连接,可以继续在这条连接上传送http请求报文和响应报文。
管线化:
在使用持久连接的情况下,某个连接上消息的传递类似于:
请求1 ==> 响应1 ==> 请求2 ==> 响应2 ==> 请求3 ==> 响应3
某个连接上的消息变成:
请求1 ==> 请求2 ==> 请求3 ==> 响应1 ==> 响应2 ==> 响应3
特点:通过持久连接完成,仅http1.1支持;仅GET、HEAD请求可以进行管线化,post有所限制,初次创建连接时不应启动管线化,因为服务器不一定支持,管线化不会影响响应的顺序,服务端支持管线化,并不要求服务端也对管线化进行处理。由于端管线化并不能带来大幅度的性能提高,因此现代浏览器chrome、firefox并未开启管线化。
http/https区别:
https是在http下加入SSL层进行安全加密。http标准端口是80 ,而https的标准端口是443。
与缓存有关的头部:
Expires:
有效期,过期时间,这个属性告诉缓存器:相关副本在多长时间内是新鲜的。过了这个时间,缓存器就会向源服务器发送请求,检查文档是否被修改。几乎所有的缓存服务器都支持Expires(过期时间)属性。
Cache-control:
这个字段用于指定所有缓存机制在整个请求/响应链中必须服从的指令。用于阻止缓存对请求或响应造成不利干扰的行为。这些指令通常覆盖默认缓存算法,比如 Expires 和 Last-Modified。缓存指令是单向的,即请求中存在一个指令并不意味着响应中将存在同一个指令。
客户端可以在HTTP请求中使用的标准 Cache-Control 指令:
Cache-Control: max-age=<seconds>
缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-control: no-cache
必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。
Cache-control: no-store
所有内容都不会被缓存到缓存或 Internet 临时文件中。
Cache-control: no-transform
Cache-control: only-if-cached
服务器可以在响应中使用的标准 Cache-Control 指令:
Cache-control: must-revalidate
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: public
Cache-control: private
Cache-control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-control: s-maxage=<seconds>
Last-modified/If-Modified-Since:
如果第二次请求相同的数据,可以告诉服务器上一次获得的最后修改日期:在你的请求中发送一个 If-Modified-Since 头信息,它包含了上一次从服务器连同数据所获得的日期。
如果数据从那时起没有改变,服务器将返回一个304,当服务器发送状态编码 304 时,不再重新发送数据。您仅仅获得了这个状态代码。所以当数据没有更新时,你不需要一次又一次地下载相同的数据;服务器假定你有本地的缓存数据。
ETag/If-None-Match:
ETag用于标示URL对象是否改变,在HTTP响应头中将其传送到客户端,以下是服务器端返回的格式:ETag:"50b1c1d4f775c61:df3"客户端的查询更新格式是这样的:If-None-Match : W / "50b1c1d4f775c61:df3"如果ETag没改变,则返回状态304然后不返回,这也和Last-Modified一样。测试Etag主要在断点下载时比较有用。
Expires/Cache-Control Header是控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只是Cache-Control比Expires可以控制的多一些, 而且Cache-Control会重写Expires的规则。
Last-Modified/If-Modified-Since和ETag/If-None-Match是浏览器发送请求到服务器后判断文件是否已经修改过,如果没有修改过就只发送一个304回给浏览器,告诉浏览器直接从自己本地的缓存取数据;如果修改过那就整个数据重新发给浏览器。
HTTP 前端需明白的相关知识点的更多相关文章
- Android开发涉及有点概念&相关知识点(待写)
前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...
- TCP/IP 相关知识点与面试题集
第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...
- Python开发一个csv比较功能相关知识点汇总及demo
Python 2.7 csv.reader(csvfile, dialect='excel', **fmtparams)的一个坑:csvfile被csv.reader生成的iterator,在遍历每二 ...
- http及浏览器相关知识点归纳
http是应用层协议,采用请求/响应模型 1.浏览器地址栏输入URL地址后发生了什么? 浏览器判断地址是否是合理的URL地址,是否是http协议请求,如果是则进入下一步 浏览器对此URL进行缓存检查: ...
- sql注入原理+mysql相关知识点
什么是SQL注入 sql就是经常说的数据库,而sql注入就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.SQL注入是比较常见的网络攻击 ...
- UITableView相关知识点
//*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...
- IOS开发涉及有点概念&相关知识点
前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...
- IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结
添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...
- 学习记录013-NFS相关知识点
一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...
随机推荐
- Android实训案例(六)——四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听
Android实训案例(六)--四大组件之一BroadcastReceiver的基本使用,拨号,短信,SD卡,开机,应用安装卸载监听 Android中四大组件的使用时重中之重,我这个阶段也不奢望能把他 ...
- ERP-非财务人员的财务培训教(四)------公司/部门的成本与费用控制
一.损益表.资产负责表 二.成本分类 ----成本习性 三.成本核算模式 四.成本控制原则 第四部分 公司/部门的成本与费用控制 一.损益表.资产负责表 项目 Items 产品销售收入 Sal ...
- iOS 10正式发布:十大新功能,更注重人性化
6月14日凌晨消息,苹果公司举行2016年WWDC全球开发者大会,介绍了watch OS.tv OS.OS X以及iOS 10系统的新特性. 据苹果介绍,iOS 10在锁屏.Siri.地图等十个各方面 ...
- 做自己的软件的Gallery(一)
先上效果图: 如图,android默认也有Gallery,很多软件在调用时,都是使用自己的Gallery,一方面好维护,另外一方面可以做优化.要做成以上样式,图片加载类起至关重要,一不小心,就好OOM ...
- 【Qt编程】3D迷宫游戏
说起迷宫想必大家都很熟悉,个人感觉迷宫对人的方向感是很大的考验,至少我的方向感是不好的,尤其是在三维空间中.由于这段时间帮导师做项目用到了三维作图,便心血来潮想做个三维迷宫玩玩.要想画出三维的迷宫游戏 ...
- multiset基础学习,可以有重复类型的多重集合容器
#include <set> #include <iostream> using namespace std; struct Student { char *name; int ...
- Java多线程操作局部变量与全局变量
在这篇文章里,我们首先阐述什么是同步,不同步有什么问题,然后讨论可以采取哪些措施控制同步,接下来我们会仿照回顾网络通信时那样,构建一个服务器端的"线程池",JDK为我们提供了一个很 ...
- Java数据结构面试题,输出 最后一个 出现次数为1的字符
今天去面试,遇到一个数据结构题,给定一个字符串,输出 最后一个 出现次数为1的字符 回来研究了下,代码如下: package com.pine.interview.test; import java. ...
- 十六进制颜色转换为iOS可以用的UIColor
// // UIColor+Transformation.h // ContactApp // // Created by 袁冬冬 on 15/9/11. // Copyright (c) 2 ...
- 并发编程(四):atomic
本篇博客我们主要讲述J.U.C包下的atomic包,在上篇博客"并发模拟"的最后,我们模拟高并发的情形时出现了线程安全问题,怎么解决呢?其实解决的办法有很多中,如直接在add()方 ...