HTTP学习之HTTP基础
学习HTTP技术,首先要了解它的在web通信中有哪些特点,起到什么作用、有哪些规范、都有什么功能。
HTTP的特点
HTTP使用的是一种可靠的、快速响应的数据传输协议,用户一旦发起请求,Web服务器可以快速的做出响应,并将请求的资源内容完整的连同响应一起回送给客户端。由于其可靠性,数据在传输过程中不会被破坏、复制或者产生畸变。因此用户无需担心请求的数据是否完整。开发人员也能专注于应用程序的开发而不用担心因特网存在的缺陷。
资源类型
web服务器是web资源的宿主,web资源是web内容的源头。
静态资源
文本文件、HTML文件、word文件、图片、电影或其他
动态资源
根据需要生成内容的软件程序,这些程序可以根据访问者的身份,所请求的信息或者个根据需求而产生的内容
媒体类型
由于网络上需要传输的内容类型有上千万种。因此HTTP会在将要传输的内容上打上MIME数据格式标签。客户端向服务器发起请求时,服务端会将MIME数据格式标签连同响应内容一起回送给客户端,此时客户端会去读取MIME标签类型,判断自己是否能解析该种类型内容。多数游览器都可以处理上百种常见的标签类型。显示图片、解析并格式化HTML文件、调用计算机声卡播放音频文件或运用外部的插件软件来处理特殊的格式数据,比如播放安装Adobe的Flash插件来播放在线视频。
MIME是一种文本标记,表示一种主要的对象类型和一个特定的子类型,中间以斜杠分隔。
常用对象类型和特定子类型
HTML文本文档 | text/html |
普通的ASCII文本文档 | text/plain |
JPEG格式的图片 | image/jpeg |
GIF格式的图片 | image/gif |
Apple的QuickTime电影 | video/quicktime |
温软的ppt | application/vnd.ms-powerpoint |
找到资源位置
现在我们已经知道HTTP通信基本原理、特性、作用以及传输中标记的类型。现在我们需要知道如何通过web游览器找到这些资源。
URI:
资源被存储在一个个的web服务器上,这种服务器被称为统一资源标识符(Uniform Resource Indetifier 简称URI)。URI就像邮件地址似的,在全世界范围内有且只有一个。试想,你不想给朋友发送邮件的时候,发送给了除了朋友外的其他人吧?
URL:
URL(统一资源定位符)描述特定服务器上某资源的特定位置,解释并明确说明如何如何从一个精确、固定的位置获取资源。
大部分URL遵循以下格式
一:使用哪种协议
二:服务器的因特网地址
三:指定web服务器上的某个资源
URN:
URL的第二种形式,统一资源名
事务
客户端与web服务器通过HTTP的交互被称为HTTP的事务,HTTP事务由一条请求命令和响应结果组成,这种通信是通过HTTP报文的格式化数据块进行的。(后续会对报文做介绍)
HTTP版本
HTTP/0.9 :只支持老客户端的交互,HTTP/0.9只支持GET方法,不支持多媒体内容MIME类型、各种HTTP首部或者版本号,初衷是为了获取简单的HTML页面。
HTTP/1.0: 1.0添加了版本号、各种HTTP首部和一些额外的方法及对多媒体对象的处理。使得web页面更加丰富和可交互成为可能。
HTTP/1.0+P: 添加了很多新特性,比如持久化keep-alive连接,虚拟主机支持,以及代理连接支持都被加入到HTTP之中。
HTT/1.1: 校正HTTP设计中的结构性缺陷,明确语义,引入重要的性能优化措施,删除一些不好的特性还包含正在发展中的更复杂的web应用程序和部署方式的支持。1.1是目前 使用的HTTP版本
Web组件结构
代理:
代理是Web安全、应用集成及性能优化的重要组成模块。
代理作为客户端和服务器的中间件,起了关键性作用,在转发web流量的时候只转发被过滤的可信任节点,还可对web客户端和服务器双向过滤。比如企业服务器可以通过代理来检测访问者是否携带有病毒,屏蔽成年人才能观看的节目。
缓存:
web缓存或者代理缓存是特殊的HTTP代理服务器,可以将代理传送的常用文本复制保存起来,下次客户端再向服务器发起相同请求时,就可以使用代理缓存的私有副本,从而减少服务器的开销。
网关
一种特殊的服务器,作为其他服务器的中间实体使用,通常用于将HTTP流量转换成其他的协议。网关接受请求时,就好像自己是资源的源端服务器一样,而客户端并不知道自己正在跟一个网关进行通信。
隧道:
HTTP隧道的常见用途是通过HTTP连接承载加密的安全套接字层(SSL, Secure Sockets Layer)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙。
如图,HTTP/SSL隧道收到一条HTTP请求,要求建立一条到达目的地址和端口的输出连接,隧道建立起来后,会在隧道内传输加密过的SSL流量,即便是双方是盲转发通信业不用担心信息会被劫持。
Angent代理:
所有发布web请求的应用程序都是HTTP代理,现实生活中也有很多代理,比如邮递员就是一种代理。代替你将投递的物品完整的送到目的地,接收者或投递员将投递结果反馈给你从而释放自己,无需亲力亲为。常见的代理,比如网络爬虫、搜集信息以构建有效的web内容档案。
HTTP学习之HTTP基础的更多相关文章
- 这几天开始,先学习一些 java 基础吧,学的有点累
这几天开始,先学习一些 java 基础吧,学的有点累
- Emacs学习心得之 基础配置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础配置 1.前言2.基础配置 一.前言 本篇博文记录了Emacs的一 ...
- Emacs学习心得之 基础操作
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Emacs学习心得之 基础操作 1.前言与学习计划2.Emacs基础操作 一. 前言与学习计 ...
- 如何学习FPGA?FPGA学习必备的基础知识
如何学习FPGA?FPGA学习必备的基础知识 时间:2013-08-12 来源:eepw 作者: 关键字:FPGA 基础知识 FPGA已成为现今的技术热点之一,无论学生还是工程师都希望 ...
- java与.net比较学习系列(2) 基础语言要素
这一篇从最基础的开始对比总结,说起基础语言要素,故名思义,就是学习语言的基础,主要内容包括标识符,关键字和注释.我想从以下几点进行总结,有区别的地方有都使用红色粗体字进行了总结. 1,标识符 2,关键 ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
基础导航条 在Bootstrap框中,导航条和导航从外观上差别不是太多,但在实际使用中导航条要比导航复杂得多.我们先来看导航条中最基础的一个--基础导航条. 使用方法: 在制作一个基础导航条时,主要分 ...
- AJAX学习前奏----JS基础加强
AJAX学习前奏----JS基础加强 知识概要: 1.js类&属性&方法的定义 2.静态属性与方法 3.构造方法 4.原型的使用 5.Object对象直接加属性和方法 6.JSO ...
- 大数据学习之Linux基础01
大数据学习之Linux基础 01:Linux简介 linux是一种自由和开放源代码的类UNIX操作系统.该操作系统的内核由林纳斯·托瓦兹 在1991年10月5日首次发布.,在加上用户空间的应用程序之后 ...
- 第65节:Java后端的学习之Spring基础
Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...
随机推荐
- Mysql 服务无法启动解决办法
1.我使用的是MySQL-5.7.10-winx64 版本,在安装后启动服务时出现 “服务无法启动”错误 2.解决办法为删除安装目录中的data文件,然后打开cmd调到自己的安装目录下输入mysqld ...
- js:JavaScript中的ActiveXObject对象
JavaScript中的ActiveXObject对象作用: https://blog.csdn.net/pl1612127/article/details/77862174
- February 25 2017 Week 8 Saturday
Energy and persistence can conquer all things. 能量和毅力可以征服一切. I have the persistence, but it seems I a ...
- February 23 2017 Week 8 Thursday
In order to be irreplaceable, one must always be different. 想要无可取代,必须与众不同. In recent days, a news ab ...
- Markdown 学习
一级标题 一级标题 === 或 # 一级标题 二级标题 二级标题 --- 或 ## 二级标题 三级标题 ### 三级标题 链接Gayhub [Gayhub](https://www.github.co ...
- Andriod ADB Interface驱动安装失败Configure USB Debug for Android
介绍: Linux或Apple或OS X ,已经安装了USB驱动调试为Android的帮助,确认您的Android USB调试连接配置和正常工作. Windows下需要自己手动下载驱动安装或者通过下载 ...
- 读REDIS数据结构
一.DICT 主要有两个问题: 1.散列冲突,解决办法是拉链法 typedef struct dictEntry { void *key; union { void *val; uint64_t u6 ...
- 用PHP向数据库中实现简单的增删改查(纯代码)
<?php $con = mysql_connect("localhost:3306","root",""); if (!$con) ...
- Python 用多线程上传和下载文件
# -*- coding: utf-8 -*- __author__ = 'louis' from ftplib import FTP import multiprocessing import ti ...
- 使用Vue做评论+localStorage存储(js模块化)
未分模块化 html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...