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
    常见协议指定默认端口号,应避免混用。
常见协议 默认端口号 协议基本作用
FTP 21 文件上传、下载
SSH 22 安全远程登录
TELNET 23 远程登录
SMTP 25 邮件传输
DNS 53 域名解析
HTTP 80 超文本传输
POP3 110 邮件接收
HTTPS 443 加密传输的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. 响应起始行
    响应消息是服务器返回给客户端的数据
状态码 原因短句 含义
100 Continue 提示信息
200 OK 响应完成,主体包含请求数据
201 Created PUT请求提交的数据已经被保存
301 Moved Permanently 永久重定向,Location响应头指定请求资源当前URL
302 临时重定向,如:因用户未登录导致购物车结算跳转至登录界面
303 See other 告知客户端使用其它URL获取资源
304 Not Modified 请求未被修改,使用之前的缓存
400 Bad Request 请求格式错误
403 Forbidden 请求被服务器拒绝,权限不足
404 Not Found 请求资源不存在
405 Method Not Allowed 发起的请求中带有URL不支持的方法
500 Internal Server Error 服务器端程序执行过程中发生错误
501 Not Inplemented 请求资源未实现指定的请求方法
503 Service Unavailable 服务器暂时无法提供服务
505 HTTP Version Not Supported 请求使用的HTTP协议版本不被支持
  1. 响应头
    响应头可用于描述响应本身、服务器、响应主体的特征:
    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
    在这里插入图片描述
  2. 响应主体
    响应主体中包含着服务器返回给客户端的数据主体(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 安全连接建立过程

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_33392141/article/details/84247736
今日推荐