HTTP&AJAX_1.URL&HTTP

1 URL

结构:协议+主机名称+目录结构+文件名
URL的完整格式:< schema>://< user>:< pwd> @ < host>:< port>/< path>;< params>?< query>#< frag>

  1. 协议 SCHEMA:方案,指定以哪种协议从服务器获取指定资源,不区分大小写;HTTP、HTTPS、FTP、MAILTO、RTSP、FILE、NEWS、TELNET
    常见协议指定默认端口号,应避免混用。
常见协议默认端口号协议基本作用
FTP21文件上传、下载
SSH22安全远程登录
TELNET23远程登录
SMTP25邮件传输
DNS53域名解析
HTTP80超文本传输
POP3110邮件接收
HTTPS443加密传输的HTTPS
  1. 用户名/密码 < user >:< pwd >
    USER:某些方案访问资源需要指定用户名,默认值为anonymouse
    PWD:密码默认值为地址
  2. 主机/端口号< host >:< port >
    HOST:主机名,资源所在服务器的IP地址或者域名(需要DNS转换为IP地址)127.0.0.1 localhost
    PORT:端口号,每项服务在服务器上对应一个监听端口号
  3. 路径 < path >
    < path>:资源在服务器上存放的位置,’/'分隔其与前面URL组件
  4. 参数< params>
    < params>:某些方案会使用参数来指定输入参数,每个参数都采用"名/值"形式;一个URL可以有多个这样的对使用;分隔;session/cookie
    Eg. ;jsessionid=DF8103FA
  5. 查询< query>
    < query>:某些方案使用查询字符串传递参数
    Eg. ?wd=js&issp=1&f=8
  6. 锚点< frag>
    < frag>:片段、锚点、书签,资源中某一部分的名字。引用对象时不会传送给服务器,而是在客户端内部使用,使用#与其他部分分隔
    Eg. #chapter8

URL有两种形式:
1)绝对URL:以方案开头包含访问资源所需全部信息;
2)相对URL:URL本身信息不完整,需参考另外一个URL(base)才能确定;
在这里插入图片描述

2 HTTP协议

2.1 HTTP协议概述

HyperText Transfer Protocol超文本传输协议,规范数据如何打包以及传递

2.1.1 HTTP协议历史与标准

->HTTP/0.9:1991年制定,严重设计缺陷,只支持GET方法,不支持MIME类型;
->HTTP/1.0:1996年制定,支持多种请求方法,支持媒体对象,不支持持久连接
->HTTP/1.0+:支持持久连接、虚拟主机、代理连接等新特性,非官方标准
->HTTP/1.1:1999年制定官方标准,校正HTTP中的设计缺陷,优化性能
->HTTP-NG(HTTP/2.0):关注HTTP协议的性能优化以及更强大的服务逻辑远程执行框架

2.1.2 请求与响应流程

在这里插入图片描述
Message,消息/报文,是HTTP客户端与服务器之间传递的数据块;HTTP协议规定,消息必须符合特定的格式才能被理解
Request Message:客服端向服务器发送的请求消息;
Response Message:服务器端根据客户端的请求消息,返回给客户端的响应消息

2.2 HTTP消息

2.2.1 HTTP消息结构概述

HTTP消息是简单的格式化数据块,每个消息由三部分组成:

  1. Start Line:消息起始行,必需,消息基本描述信息
  2. Header:消息头部/报头,0~N个,消息详细属性
  3. Body:消息主体,可选,包含数据的主体

消息起始行和消息头是纯ASCII字符,每行以CRLF结束;消息主体是可选数据块,数据可以为空、字符数据(HTML、CSS、JavaScript等字符数据)、二进制数据(图片、音频、视频等字节数据)

POST和GET传递数据的格式相似,但传递数据的方式有区别。

2.2.2 请求消息request

请求消息结构
客户端发送给服务器的数据,应符合格式要求:

    <method> <request-URL> <version>
    <headers>
    <entity-body>

请求起始行:请求方法 请求URL 协议版本;
请求头部:可能包含0~N个请求头(名/值对);
请求主体:可选,提交给服务器的请求数据;

  1. 请求起始行与请求方法
    请求消息请求服务器使用资源
    请求起始行:< method > < request-URL >< version >
    请求方法:
请求方法描述请求主体form data
GET客户端从服务器获取数据(地址栏明文发送、大小限制2KB)
POST客户端向服务器提交数据(隐式发送,数据在请求主体Form Data)
PUT将请求主体中的数据存储在服务器
DELETE客户端删除服务器内容
CONNECT测试连接
HEAD只获取文档响应头部
TRACE追踪可能经过代理服务器请求服务器的消息
OPTIONS选项(预请求)
  1. 请求头
    请求头用于描述请求本身、客户端、请求主体的特征
    1)Host:告诉服务器请求的哪个主机
    2)Connection:告诉服务器进行持久连接
    3)User-Agent:用户代理,告诉服务器自己的类型信息
    4)Accept-Encoding:告诉服务器自己接收的压缩文件的类型
    5)Accept-Language:告诉服务器自己接收的自然语言类型
    6)Referer:引用,告诉服务器请求来自哪个网页
  2. 请求主体
    请求主体保存着客户端提交给服务器处理(POST)或保存(PUT)的数据,可能包含字符数据和字节数据
2.2.3 响应消息

响应消息结构:
服务器返回给客户端的数据,格式要求:

    <version> <status> <reason-phrase>
    <headers>
    <entity-body>

响应起始行:协议版本 响应状态码 原因短句(对状态码解释说明)
响应头:包含0~N个响应头
响应主体:返回给客户端的响应数据,可能是字符数据也可能是字节数据

  1. 响应起始行
    响应消息是服务器返回给客户端的数据
状态码原因短句含义
100Continue提示信息
200OK响应完成,主体包含请求数据
201CreatedPUT请求提交的数据已经被保存
301Moved Permanently永久重定向,Location响应头指定请求资源当前URL
302临时重定向,如:因用户未登录导致购物车结算跳转至登录界面
303See other告知客户端使用其它URL获取资源
304Not Modified请求未被修改,使用之前的缓存
400Bad Request请求格式错误
403Forbidden请求被服务器拒绝,权限不足
404Not Found请求资源不存在
405Method Not Allowed发起的请求中带有URL不支持的方法
500Internal Server Error服务器端程序执行过程中发生错误
501Not Inplemented请求资源未实现指定的请求方法
503Service Unavailable服务器暂时无法提供服务
505HTTP Version Not Supported请求使用的HTTP协议版本不被支持

304执行过程分析
https://www.jianshu.com/p/fd00f0d02f5f
2. 响应头
响应头可用于描述响应本身、服务器、响应主体的特征:
1)Date 告诉浏览器服务器的响应时间;
2)Connection:keep-alive告诉浏览器已经启动持久连接
3)Content-Type:响应主体的类型——实体头部中Content-Type可用于指定消息主体中数据的内容类型(MIME类型)。取值:
HTML文本text/html,
普通文本text/plain,
样式文件text/css,
js脚本文件application/javascript,
图片image/png(jpeg),
JSON字符串application/json,
XML字符串application/xml
在这里插入图片描述
4. 响应主体
响应主体中包含着服务器返回给客户端的数据主体(GET/POST)
根据请求URL的不同,响应主体中可能是字符数据(HTML、CSS、JavaScript、JSON等字符)或字节数据(图片、音频、视频等各种字节数据)

2.3 缓存控制相关头部

2.3.1 缓存工作原理

客户端可以自动保存访问过的文档的副本(“文档缓存”);当客户端再次发送同一个URL的请求,就可以直接从缓存区而不是远程服务器提取该文档。
数据缓存优点如下:
减少冗余的数据传输,节省客户端流量;缓解服务器带宽瓶颈问题,服务器可以节省更多带宽;降低对服务器的资源消耗和运行要求;降低由于远距离而造成的加载延时。

缓存命中的完整流程:
缓存命中的完整流程

2.3.2 Cache-Control

Cache-Control:max-age头部表示从服务器将文档传来时起认为该文档处于新鲜状态的秒数——Cache-Control: max-age = 3600
服务器可以请求客户端不要缓存文档或者将使用期设置为零,这样每次访问都会刷新——Cache-Control:max-age=0;
客户端没有进行再验证不能提供对应数据的陈旧副本,但缓存可以提供新鲜的副本:Cache-Control: must-revalidate

2.3.3 Expires头

Expires头部指定缓存的过期确切时间点。由于服务器的时钟不同步,所以推荐使用剩余秒数来代替过期的绝对时间。
Expires: Sun,15 Mar 2014, 08:00:00 GMT
若希望客户端不缓存资源,可以将过期时间设置为过去的时间。

2.3.4 控制HTTP头部方法
  1. 在网页中修改缓存

    <meta http-equiv="消息头" content="值">
    //例如消息头=Cache-Control、值=max-age=3600
    

在这里插入图片描述
还可以在服务器端执行动态编程语言(JSP、PHP、ASPX等)代码来控制响应头
在这里插入图片描述
按照HTTP协议要求,响应头声明必须处于响应主体之前,故调用上述函数前不能有任何输出语句或者HTML内容甚至是空白字符

2.4 Cookie工作原理

在这里插入图片描述

3 HTTP优化

3.1 HTTP性能优化

3.1.1 HTTP连接过程

在这里插入图片描述

3.1.2 HTTP连接性能优化

网站性能优化最主要就是减少HTTP请求及每次响应中内容的长度。

  1. 域名解析:尽可能减少域名解析次数——减少跨站外部资源的引用
  2. 创建连接:减少连接创建次数——使用Keep-Alive避免重复连接
  3. 发送请求:减少请求次数——合理设置Expires时间、资源合并
  4. 等待响应:提高服务器端运行速度——提高数据运算及查询速度
  5. 接收响应:减小响应数据长度——启用压缩

3.2 安全的HTTP协议

3.2.1 HTTPS协议

HTTP协议本质上属于“明文传输”,容易被窃听和篡改;HTTPS协议是安全版本的http,将消息发送给TCP层之前,先交给安全层(由SSL或TLS协议实现,为数据通讯提供安全支持),安全层负责对消息进行加密和解密操作。
HTTP请求服务器默认监听80端口;HTTPS请求服务器默认监听443端口
在这里插入图片描述

3.2.2 安全连接建立过程

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值