学习 HTTP
HTTP 简介
HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写, 是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP 工作原理
HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
Web服务器根据接收到的请求后,向客户端发送响应信息。
HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
HTTP 消息结构
客户端请求消息
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
服务端响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文
HTTP 响应的起始行被称作 状态行 (status line),包含以下信息:
1、协议版本,通常为 HTTP/1.1。
2、状态码 (status code),表明请求是成功或失败。常见的状态码是 200,404,或 302。
3、状态文本 (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 --- 必须先验证它的状态
对比缓存 的两种标识
1、Etag / If-None-Match
2、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 端口,它的工作流程一般如以下方式:
1、TCP 三次同步握手
2、客户端验证服务器数字证书
3、DH 算法协商对称加密算法的密钥、hash 算法的密钥
4、SSL 安全加密隧道协商完成
5、网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的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 例子:
- ftp://ftp.is.co.za/rfc/rfc1808.txt - http://www.ietf.org/rfc/rfc2396.txt - ldap://[2001:db8::7]/c=GB?objectClass?one - mailto:[email protected] - 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...