-
缩写名词解释
HTTP | 中文名称 | 功能 |
---|---|---|
HTTP | 超文本传输协议(应用层) | 生成针对目标Web服务器的HTTP请求报文 |
HTML | 超文本标记语言 | |
URL | 统一资源定位符(文档地址) | 表示资源的地点。是URI的子集。 |
URI | 统一资源标识符 | 用字符串表示某一互联网资源 |
TCP/IP协议族 | 与互联网相关的协议集合 | |
DNS | 域名系统(应用层) | 域名到IP地址之间的解析服务。DNS协议提供通过域名/IP名双向查找。 |
TCP | 传输控制协议(传输层) | 提供可靠的字节流服务,即对HTTP请求报文进行分割(为了方便运输,将大块数据分割成以报文段为单位的数据包进行管理);并打上标记序号和端口号后转发给网络层。三次握手 |
IP | 网际协议(网络层) | 把各种数据包传给对方。要确保传送有两个重要条件:IP地址、MAC地址。 |
IP地址 | 指明了节点被分配到的地址; | |
MAC地址 | 指网卡所属的固定地址;(通信双方经过多台计算机和网络设备中转进行连接,中转的时候,会利用下一站中转设备的MAC地址来搜索下一个中转目标) | |
ARP协议 | 解析地址的协议 | 根据通信方的IP地址,反查出对应的MAC地址 |
SSL | 安全套接层 | |
TLS | 传输层安全 | |
MIME | 多用途因特网邮件扩展 |
第一章 了解Web及网络基础
网络基础TCP/IP 的分层管理
注 http是TCP/IP内部的一个子集。
-
应用层:为用户提供应用服务。DNS(域名系统)、FTP(文件传输协议)、HTTP属于应用层。
-
传输层:对上层应用层,提供两台计算机之间的数据传输。TCP(传输控制协议)、UDP(用户数据报协议)属于传输层。
-
网络层:处理网上流动的数据包,选择通过怎样的路径,把数据包给对方。IP(网际协议)属于网络层。
-
数据链路层/网络接口层:处理链接网络的硬件部分。 包括控制操作系统、硬件设备的驱动、NIC(网络适配器,即网卡)
数据包是网络传输的最小数据单位。
TCP/IP通信传输流:客户端到服务器通过分层顺序传输 路由选择:在到达通信目标前的中转过程,计算机和路由器等网络设备,都只能获悉很粗略的传输路线,无法掌握互联网中全面传输情况
发送端:从应用层往下走;每通过一层会增加该层的首部信息(这种把数据信息包装起来的做法称为封装);
接收端:则从链路层往上走到应用层;每通过一层会删除该层的首部信息;
客户端发送到服务器的过程:
TCP的三次握手(是为了准确无误得将数据送达目标处,把包送出去后,向对方确认是否送达成功)
- 1.发送端发送一个带SYN标志的数据包给对方。
- 2.接收端收到后,回传一个带有SYN/ACK标志的数据包传达确认信息。
- 3.最后,发送端再回传一个带ACK标志的数据包,代表握手结束。
第二章 简单的HTTP协议
HTTP协议规定,请求从用户端发出,最后服务器响应改请求。(肯定是从客户端开始建立通信的,服务器在没有收到请求之前不会发送响应)
请求报文/响应报文
请求报文:由请求方法、请求URI、协议版本(三者组成请求行)、可选的请求首部字段和内容实体构成。 GET /index.htm HTTP/1.1 Host:hackr.jp 请求方法:请求访问服务器的类型;请求URI:指明请求访问的资源对象;
响应报文:由协议版本、状态码、解释状态码的原因短语(三者组成状态行)、可选的响应首部字段及实体主体构成。 两种报文中,报文首部和报文主体由最初的空行来划分。
-
请求方法:GET访问已被URI识别的资源。指定的资源经服务器端解析后返回响应内容。
POST用来传输实体的主体。返回服务器接收数据的处理结果。
HEAD获得报文首部。用于确认URI的有效性及资源更新的日期时间。
OPTIONS查询针对请求URI指定的资源支持的方法 - 复杂请求的是否支持跨域使用 options 作为预检请求进行查询。
CONNECT用隧道协议连接代理。用SSL和TLS把通信内容加密后经网络隧道传输。
PUT用来传输文件,但是自身不带验证机制,任何人都可以上传文件,存在安全性问题。
DELETE按请求URI删除指定的资源,但是自身不带验证机制,存在安全性问题。
TRACE追踪路径,查询发出去的请求是怎么样被加工的,存在安全性问题。
-
请求URI:指定方式很多种,可以用*代替,可以写完整,也可以在首部字段Host中写明网络域名或IP地址
①GET http://hackr.jp/index.htm HTTP/1.1 (URI是完整的请求URI)
②GET /index.htm HTTP/1.1
Host: hackr.jp (在首部字段Host写明网络域名或IP地址)
③OPTIONS * HTTP/1.1.(这是用来查询HTTP服务器端支持的HTTP方法种类)
如果用*代替URI的话, 表示对服务器本身发起请求。
-
常见请求头属性
Accept: text/html,image/* // 浏览器接受的数据类型
Accept-Charset: ISO-8859-1 // 浏览器接受的编码格式
Accept-Encoding: gzip,compress //浏览器接受的数据压缩格式
Accept-Language: en-us,zh- //浏览器接受的语言
Host: www.it315.org:80 //(必须的)当前请求访问的目标地址(主机:端口)
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT --浏览器最后的缓存时间
Referer: http://www.it315.org/index.jsp -- 当前请求来自于哪里
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) --浏览器类型
Cookie:name=eric -- 浏览器保存的cookie信息
Connection: close/Keep-Alive -- 浏览器跟服务器连接状态。close: 连接关闭 keep-alive:保存连接。
Date: Tue, 11 Jul 2000 18:23:51 GMT -- 请求发出的时间
content-type常见的属性:–实体主体内对象的媒体类型
- application/x-www-form-urlencoded
浏览器的原生 form 表单,如果不设置 enctype 属性,那么最终就会以此方式提交数据;该种方式提交的数据放在 body 里面,数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。
- multipart/form-data
一个常见的 POST 提交方式,通常表单上传文件时使用该种方式。
- application/json
告诉服务器消息主体是序列化后的 JSON 字符串。
- text/xml
主要用来提交 XML 格式的数据。
- 状态码:表示请求成功或失败的数字代码
Cookie技术
- HTTP协议自身不具备保存之前发送过的请求或响应的功能,即无状态协议。
为了实现期望的保持状态功能,于是引入了Cookie技术。
- Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。
- Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie。当下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。
为Cookie服务的首部字段
Cookie的工作机制是用户识别及状态管理。Web网站通过Web浏览器,把一些数据写入用户的而计算机内。
首部字段名 | 说明 | 首部类型 |
---|---|---|
Set-Cookie | 开始状态管理所使用的Cookie信息 | 响应首部字段 |
Cookie | 服务器接收到的Cookie信息 | 请求首部字段 |
Set-Cookie的几个属性:
expires=DATE: Cookie的有效期(默认为浏览器关闭前);
path=PATH:将服务器上的文件目录作为Cookie的适用对象;
domain=域名: 作为Cookie使用对象的域名;
Secure:仅在HTTPS安全通信时才会发送Cookie;
HttpOnly:加以限制,使Cookie不能被JavaScript脚本访问(防止跨站脚本攻击XSS);
获取部分内容的范围请求
- 执行范围请求时,会用到请求报文首部字段 Range:bytes = 5001 - 10000 来指定资源的byte范围。
状态码
- 200 OK 的响应结果表明请求被正常处理了。
- 204 No Content 服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
- 206 Partial Content 客户端进行了范围请求。
面试被问过:301和302有什么区别?
- 301 Moved Permanently 永久性重定向。表示请求的资源已被分配了新的URI,以后应使用新URL。
- 302 Found 临时性重定向。表示请求的资源已被分配了新的URI,本次请求暂且使用新URL。
- 307 Temporary Redirect 临时性重定向。与302含义相同。
- 303 See Other 由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
-
304 Not Modified 客户端发送的附带条件的请求时,服务器允许请求访问资源,但服务器端资源未改变,可直接使用客户端未过期的缓存。
- 400 Bad Request 请求报文中存在语法错误。
- 401 Unauthorized 请求需要通过HTTP认证。第一次返回,会弹出认证窗口,第二次返回,表示认证失败。
- 403 Forbidden 请求资源的访问被服务器拒绝了。
-
404 Not Found 服务器上没有请求的资源。
- 500 Internal Server Error 服务器在执行请求时发生了错误。
-
503 Service Unavailable 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
-
代理:客户端和服务器的中间人。代理不改变URI。
常用:缓存代理(代理转发响应时,会保存资源在代理服务器上,再次请求相同资源时即可不去源服务器获取资源;有有效期,过期后会确认资源有效性,无效就再次获取新资源);通过设置组织内部的代理服务器可做到针对特定URI访问的控制。
-
网关:为客户端和网关之间的通信线路加密,提高通信的安全性。
- 隧道:确保客户端与服务器安全通信,建立一条与其他服务器的通信线路。不会去解析HTTP请求。
HTTP首部字段
结构:首部字段名:字段值
根据实际用途分为四类
-
通用首部字段:请求报文和响应报文都会使用的首部
常见:Cache-Control 操作缓存工作机制:public 其他用户也可利用缓存 / private 特定用户 / no-cache 不缓存过期资源 吧 / no-store 不缓存,有机密信息 / max-age 数值代表资源保存为缓存的最长时间 / min-fresh 要求缓存服务器返回 还未过指定时间的缓存资源 / max-stale 即使过期也照常接收 / no-transform 规定不能改变实体主体的媒体类型(防止压缩图片);
Connection:不再转发的首部字段名 / 管理持久连接 (默认都是持久连接) Close (断开连接)、Keep-Alive 持续连接(默认是非持久连接);
Date:创建HTTP报文的日期和时间;
Warning:警告。格式:[警告码] [警告的主机:端口号] “[警告内容 ]”([日期时间]可省略)
…
-
请求首部字段:客户端发请求报文给服务器时使用,补充请求附加内容、客户端信息、相应内容相关优先级等;
Accept 通知服务器,用户代理能够处理的媒体类型及其相对优先级,可采用
type/subtype
形式;Accept-Charset 字符集及其优先级;Accept-Encoding 内容编码及其优先级;Accept-Language 自然语言集及其优先级;Authorization 认证信息;
Host 通知服务器,请求的资源所处的互联网主机名和端口号(HTTP/1.1规范内,Host是唯一一个必须项);
If-Match:条件请求,只有If-Match的字段值和服务器上的实体标记ETag一致时,服务器才会接收请求;
If-Range :字段值和ETag一致时,作为范围请求处理,否则,返回全体资源;Max-Forwards:每次转发数值减一,为0时返回(检测路径中的通信状况);
Referer:告知服务器请求的原始资源的URI;
…
-
响应首部字段:服务器返回响应报文给客户端时使用,补充响应附加内容,要求客户端附加额外的内容信息;
Accept-Ranges:告知客户端,能(bytes)否(none)处理范围请求;
Age:服务器多久前创建了响应;
ETag唯一性标识:实体标识(资源更新后,URI虽然没变,ETag却会重新生成);
Location:将响应接收方,引导至某个与请求URI位置不同的资源;
…
-
实体首部字段:请求报文和响应报文的实体部分使用的,补充资源内容更新时间等。
Allow:告知客户端,能够支持的Request-URI指定资源的所有HTTP方法;
Content-Encoding:服务器对实体的主体部分选用的内容编码方式(压缩);
Content-Language:实体主体用的自然语言;Content-Length:实体主体部分大小;
Content-Location:报文主体返回资源对呀的URI;
Content-Range:告知客户端作为响应返回的实体的哪个部分符合范围请求(
Content-Range:bytes 5001-10000/10000
)Expires:将资源失效的日期告知客户端,超过时间的,缓存服务器会向源服务器请求资源。(源服务器不希望缓存服务器对资源缓存时,最好在Expires字段内写入与首部字段Date相同的时间值。)(但当首部字段Cache-Control指定了max-age指令时,优先处理max-age)
其他常用首部字段
X-Frame-Options:DENY 拒绝 / SAMEORIGIN 仅同源域名下的页面匹配时许可;属于HTTP响应首部,用于控制网站内容在其他网站的Frame标签内的显示问题,主要目的是为了防止点击劫持攻击。
X-XSS-Protection:0 将XSS 过滤器设置成无效状态 / 1 有效状态;属于HTTP响应首部,针对跨站脚本攻击XSS的一种对策,用于控制浏览器XSS防护机制的开关。
DNT(do not track的简称):0 同意被追踪 / 1 拒绝被追踪;属于HTTP请求首部,是表示拒绝被 精准广告追踪的一种方法;
P3P,属于HTTP响应首部,让Web网站上的个人隐私,变成一种仅供程序可理解的形式,达到保护用户隐私的目的。
HTTP的缺点:
-
通信使用明文(不加密),内容可能会被窃听;
- 不验证通信方的身份,因此有可能遭遇伪装;
- 无法验证报文的完整性,所以有可能已遭篡改;
HTTP+加密+认证+完整性保护=HTTPS(身披SSL协议外壳的HTTP)
HTTP其他缺点:
- 一条连接上只可发送一个请求;
- 请求只能从用户端开始,客户端不可以接收除响应以外的指令;
- 请求/响应首部未经压缩就发送。首部信息越多,延迟越大;
- 发送冗长的首部,每次互相发送相同的首部造成的浪费较多;
- 可任意选择数据压缩格式, 非强制压缩发送;
解决办法:Ajax、Comet、SPDY、WebSocket(Web浏览器和Web服务器之间全双工通信标准)