Http学习(一)
HTTP 超文本传输协议
综述:
HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。
HTTP使用内容类型,是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型在MIME Internet邮件协议上模型化,即Web服务器告诉Web浏览器该文件所具有的种类,是HTML文档、GIF格式图像、声音文件还是独立的应用程序。大多数Web浏览器都拥有一系列的可配置的辅助应用程序,它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。- 与Http相关的3个协议
- IP协议:把各种数据包发送给对方,通过ARP协议将IP地址转化为Mac地址
- Tcp协议:
- 提供可靠的字节流服务
- 为了方便传输将大块数据分割成保文段为单位的数据包进行管理
- 能够把数据可靠的发送给对方
- 3次握手:若在某个阶段中断,TCP协议会在再次以相同顺序重新发送
- 发送SYN
- 回复SYN/ACK表示确认信息
- 传回ACK数据包表示完成
- 提供可靠的字节流服务
- DNS服务:将域名转化为IP地址
- 在浏览器中输入url后:
- 查询DNS服务器,得到IP地址
- HTTP协议的职责,生成HTTP请求报文
- TCP协议的职责:
- 把请求报文分割成报文段
- 可靠地传输
- IP协议:搜索对方的地址,一边中转一边发送
- 相应同上逆序
- Url和Uri
- Url:是统一资源标示符,可以唯一标识一个资源。
- Uri:统一资源定位符,可以提供找到该资源的路径
- URI属于父类,而URL属于URI的子类。URL是URI的一个子集。
- 举个是个URI但不是URL的例子:urn:isbn:0-486-27557-4,这个是一本书的isbn,可以唯一标识这本书
- 二者的区别在于,URI表示请求服务器的路径,定义这么一个资源。而URL同时说明要如何访问这个资源(http://)。
例如,一个URL通常包括三部分:
方案部分(scheme):http://
地址部分:www.jikexueyuan.com
资源部分:/1.png
- Http 请求格式:
- 请求方法URI协议/版本
- 请求头(Request Header)
- 请求正文
下面是一个HTTP请求的例子:
GET/sample.jspHTTP/1.1
Accept:image/gif.image/jpeg,
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
username=jinqiao&password=1234
- 响应格式
HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:- 协议状态版本代码描述
- 响应头(Response Header)
- 响应正文
下面是一个HTTP响应的例子:
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
<html>..
- Http请求方法:
- Get:GET用于信息获取,而且应该是安全的和幂等的。
- 所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。
- 幂等的意味着对同一URL的多个请求应该返回同样的结果
- Post:表示可能修改变服务器上的资源的请求
- Put、Delete:
- 很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。
- 对资源的增,删,改,查操作,其实都可以通过GET/POST完成,不需要用到PUT和DELETE。
- 另外一个是,早期的Web MVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,所以导致一个比较严重的问题是传统的Web MVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PUT和DELETE方法
- Get和Post区别:
- GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),POST把提交的数据则放置在是HTTP包的包体中
- GET方式提交的数据最多只能是1024字节,理论上POST没有限制,可传较大量的数据
- Get:GET用于信息获取,而且应该是安全的和幂等的。
- Cookie:
- 无状态优点:减少服务器内存及CPU消耗
- 使用:
- 在服务器发送的响应报文中写入set-cookie字段,通知客户端保存cookie
- 下次客户端访问服务器时,在请求报文中加入cookie值
- 服务器根据cookie值比对记录得到状态信息
- Http报文
- 报文首部
- 请求行(Uri,Http,请求方法)/响应行(状态码,原因短语,http版本)
- 首部字段
- 其他(包括cookie)
- 空行
- 报文主体
- 报文首部
- 状态码:
- 1xx :请求正在处理
- 2xx : 请求处理正常
- 200 ok:请求处理正常,请求资源作为实体返回
- 204 no content:请求正常处理,没有资源返回,用于只需客户端向服务器发送信息。
- 206 partial content: 表明客户端进行部分请求
- 3xx : 重定向
- 301 moved permantently:资源uri永久更新
- 302 found: 资源暂时定位到其他位置
- 4xx : 客户端错误
- 401 unauthorized : 请求认证未通过
- 403 forbidden : 请求资源禁止访问
- 404 not found : 请求资源未找到
- 5xx : 服务器错误
- 缓存:
- 代理服务器(在客户端和服务器之间):
- 缓存,减少网络带宽流量
- 访问控制
- 代理服务器和客户端均可进行缓存,但缓存存在有效时间,过期之后要向资源服务器更新内容
- 代理服务器(在客户端和服务器之间):
Http学习(一)的更多相关文章
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Unity3d学习 制作地形
这周学习了如何在unity中制作地形,就是在一个Terrain的对象上盖几座小山,在山底种几棵树,那就讲一下如何完成上述内容. 1.在新键得项目的游戏的Hierarchy目录中新键一个Terrain对 ...
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- 多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类)
前言:刚学习了一段机器学习,最近需要重构一个java项目,又赶过来看java.大多是线程代码,没办法,那时候总觉得多线程是个很难的部分很少用到,所以一直没下决定去啃,那些年留下的坑,总是得自己跳进去填 ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
随机推荐
- 【胡策篇】题解 (UOJ 192 + CF938G + SPOJ DIVCNT2)
和泉纱雾与烟花大会 题目来源: UOJ 192 最强跳蚤 (只改了数据范围) 官方题解: 在这里哦~(说的很详细了 我都没啥好说的了) 题目大意: 求树上各边权乘积是完全平方数的路径数量. 这种从\( ...
- Vue登录登出以及JWT认证
数据模型 主要用户名,密码,邮箱,头像,身份 const mongoose = require('mongoose') const schema = new mongoose.Schema({ use ...
- leetcood学习笔记-172-阶乘后的0
题目描述: 方法:不断除以 5, 是因为每间隔 5 个数有一个数可以被 5 整除, 然后在这些可被 5 整除的数中, 每间隔 5 个数又有一个可以被 25 整除, 故要再除一次, ... 直到结果为 ...
- Batch - %~dp0 modifiers
%~dp0 简易解释 The variable %0 in a batch script is set to the name of the executing batch file. The ~dp ...
- mongodb常用基本命令
一.数据库常用命令 1.help查看命令提示 help db.help() db.test.help() db.test.find().help() 2.创建.切换数据库 use movies 3.查 ...
- JAVA Java中@Override的作用
@Override是伪代码,表示重写(当然不写也可以),不过写上有如下好处: 1.可以当注释用,方便阅读: 2.编译器可以给你验证@Override下面的方法名是否是你父类中所有的,如果没有则报错.例 ...
- macOs下全局安装npm包的设置问题
在命令行中创建一个文件.npm-global,把这个文件作为全局安装的文件夹 mkdir ~/.npm-global 设置路劲 npm config set prefix '~/.npm-global ...
- ES6 箭头函数this指向
箭头函数有几个使用注意点. (1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. (2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误. (3)不可以使 ...
- 20140316 window live write 插件 推荐代码高亮插件 构造函数只能用初始化成员列表方式的例子
1.window live write 插件:http://www.cnblogs.com/liuxianan/archive/2013/04/13/3018732.html 2.推荐代码高亮插件:W ...
- MySQL初步理解,简易单表增删改查
什么是数据库? 存储数据的仓库,本质是一个文件系统,封装了算法和文件之前数据的存储模式 阶段1:集合 数组 变量 缺点:数据存储在内存中,不能实现数据的持久化存储 阶段2:IO流 结合文件 .txt ...