学习 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_第1张图片

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。

学习 HTTP_第2张图片

实例

客户端请求:

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提供了找到它的方式。” ———— 维基百科

学习 HTTP_第3张图片

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 页面中的某个链接时,对应的 标签指向万维网上的一个地址。

一个 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...

你可能感兴趣的:(http)