学习 HTTP

HTTP 简介

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写, 是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。html

HTTP是一个基于 TCP/IP 通讯协议来传递数据(HTML 文件, 图片文件, 查询结果等)。web


HTTP 工做原理

HTTP协议工做于客户端-服务端架构上。浏览器做为HTTP客户端经过URL向HTTP服务端即WEB服务器发送全部请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,可是你也能够改成8080或者其余端口。算法

HTTP协议通讯流程

HTTP 消息结构

客户端请求消息

请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
请求报文的通常格式segmentfault

服务端响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文 浏览器

HTTP 响应的起始行被称做 状态行 (status line),包含如下信息:
一、协议版本,一般为 HTTP/1.1。
二、状态码 (status code),代表请求是成功或失败。常见的状态码是 200,404,或 302。
三、状态文本 (status text)。一个简短的,纯粹的信息,经过状态码的文本描述,帮助人们理解该 HTTP 消息。
一个典型的状态行看起来像这样:HTTP/1.1 404 Not Found。缓存

响应报文

实例

客户端请求:安全

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

服务端响应:服务器

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain

HTTP 方法

一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的 查,改,增,删 4个操做.网络


GET --------- 从指定的资源请求数据
HEAD -------- 与 GET 相同,但只返回 HTTP 报头,不返回文档主体
POST -------- 向指定的资源提交要被处理的数据
PUT --------- 未来自客户端的数据存储到一个命名的服务器资源中去
DELETE ------ 删除指定资源
CONNECT ----- 把请求链接转换到透明的 TCP/IP 通道
OPTIONS ----- 返回服务器支持的 HTTP 方法
TRACE ------- 沿着到目标资源的路径执行一个消息环回测试
PATCH ------- 用于对资源应用部分修改架构

GET 和 POST 的区别

  • (浏览器回退/刷新) GET在浏览器回退时是无害的,而POST会再次提交请求。
  • (书签) GET产生的URL地址能够被 Bookmark,而POST不能够。
  • (缓存) GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  • (编码类型) GET请求只能进行url编码(application/x-www-form-urlencoded),而POST支持多种编码方式。
  • (浏览器历史记录) GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • (对数据长度的限制) GET请求在URL中传送的参数是有长度限制的,而POST么有。
  • (对数据类型的限制) 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  • (安全性) GET比POST更不安全,由于参数直接暴露在URL上,因此不能用来传递敏感信息。
  • (可见性) GET参数经过URL传递,POST放在Request body中。

GET和POST本质上就是TCP连接,并没有差异。可是因为HTTP的规定和浏览器/服务器的限制,致使他们在应用过程当中体现出一些不一样。
GET和POST还有一个重大区别,简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

本模块原文地址: https://mp.weixin.qq.com/s?__...

HTTP 请求头

HTTP 响应头

应答头 说明
Allow 服务器支持哪些请求方法(如GET、POST等)。
Content-Encoding 文档的编码方法。
Content-Length 内容长度。
Date 当前的 GMT 时间。
Expires 文档过时时间
Last-Modified 文档的最后改动时间。
Location 表示客户应当到哪里去提取文档。
Refresh 表示浏览器应该在多少时间以后刷新文档,以秒计。
Server 服务器名字
Set-Cookie 设置和页面关联的 Cookie
WWW-Authenticate 客户应该在 Authenticate 头中提供什么类型的受权信息

本模块原文地址:http://www.runoob.com/http/ht...

Cache-Contol:

private  ---  客户端能够缓存
public  ---  客户端和代理服务器均可缓存
max-age = XXX ---  缓存的内容将在 XXX 秒后失效
no-cache  ---  须要使用 对比缓存 来验证缓存数据 
no-store  ---  全部内容都不会缓存
must-revalidate  ---  必须先验证它的状态

对比缓存 的两种标识

一、Etag / If-None-Match
二、Last-Modified / If-Modified-Since

强制缓存

  • Expires
  • Cache-Control

from disk cache
from memory cache

对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
对于比较缓存,将缓存信息中的Etag和Last-Modified经过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。

浏览器第一次请求:
浏览器缓存_第一次请求

浏览器再次请求:
浏览器缓存_第二次请求

HTTPS

HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通讯的传输协议。HTTPS 经由 HTTP 进行通讯,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS 默认工做在 TCP 协议 443 端口,它的工做流程通常如如下方式:
一、TCP 三次同步握手
二、客户端验证服务器数字证书
三、DH 算法协商对称加密算法的密钥、hash 算法的密钥
四、SSL 安全加密隧道协商完成
五、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。

HTTP 与 HTTPS 的区别

  • (数据是否加密) HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
  • (证书) 使用 HTTPS 协议须要到 CA(Certificate Authority,数字证书认证机构) 申请证书,通常免费证书较少,于是须要必定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
  • (响应速度) HTTP 页面响应速度比 HTTPS 快,主要是由于 HTTP 使用 TCP 三次握手创建链接,客户端和服务器须要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手须要的 9 个包,因此一共是 12 个包。
  • (链接方式&端口) HTTP 和 HTTPS 使用的是彻底不一样的链接方式,用的端口也不同,前者是 80,后者是 443。

HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,因此,要比较 HTTPS 比 HTTP 要更耗费服务器资源。

HTTPS 的缺陷

  • 通讯的速度变慢,因为须要加密,一个握手就多了好几个往返
  • 对用户的机器负载的增长

本模块原文地址: http://www.runoob.com/w3cnote...
其余资料地址:https://www.jb51.net/yunying/...

其余

URI、URL、URN

URI = Universal Resource Identifier 统一资源标志符
URL = Universal Resource Locator 统一资源定位符
URN = Universal Resource Name 统一资源名称

“A Uniform Resource Identifier (URI) 是一个紧凑的字符串用来标示抽象或物理资源。”

“A URI 能够进一步被分为定位符、名字或二者都是. 术语“Uniform Resource Locator” (URL) 是 URI 的子集, 除了肯定一个资源,还提供一种定位该资源的主要访问机制(如其网络“位置”)。”

“URI 能够分为 URL, URN 或同时具有 locators 和 names 特性的一个东西。URN 做用就好像一我的的名字,URL 就像一我的的地址。换句话说:URN肯定了东西的身份,URL提供了找到它的方式。” ———— 维基百科

URI、URN、URL关系图

URI 例子:

- ftp://ftp.is.co.za/rfc/rfc1808.txt
- http://www.ietf.org/rfc/rfc2396.txt
- ldap://[2001:db8::7]/c=GB?objectClass?one
- mailto:John.Doe@example.com
- news:comp.infosystems.www.servers.unix
- tel:+1-816-555-1212
- telnet://192.0.2.16:80/
- urn:oasis:names:specification:docbook:dtd:xml:4.1.2

本模块原文地址:https://www.cnblogs.com/wuyun...

URL

URL - Universal Resource Locator 统一资源定位符

Web 浏览器经过 URL 从 Web 服务器请求页面。
当您点击 HTML 页面中的某个连接时,对应的 <a> 标签指向万维网上的一个地址。

一个 URL 用于定位万维网上的文档。

一个网页地址实例: http://www.runoob.com/html/html-tutorial.html

语法规则:

scheme://host.domain:port/path/filename

说明:

  • scheme - 定义因特网服务的类型。最多见的类型是 http
  • host - 定义域主机(http 的默认主机是 www)
  • domain - 定义因特网域名,好比 runoob.com
  • :port - 定义主机上的端口号(http 的默认端口号是 80)
  • path - 定义服务器上的路径(若是省略,则文档必须位于网站的根目录中)。
  • filename - 定义文档/资源的名称

常见的 URL Scheme:

Scheme 访问 用于...
http 超文本传输协议 http:// 开头的普通网页。不加密。
https 安全超文本传输协议 安全网页,加密全部信息交换。
ftp 文件传输协议 用于将文件下载或上传至网站。
file 您计算机上的文件。

URL 字符编码

URL 只能使用 ASCII 字符集. ASCII 集合以外的字符,URL 必须转换为有效的 ASCII 格式。

URL 编码使用 "%" 其后跟随两位的十六进制数来替换非 ASCII 字符。

URL 不能包含空格。URL 编码一般使用 + 来替换空格。

本模块原文地址: http://www.runoob.com/html/ht...

相关文章
相关标签/搜索