HTTP学习笔记01
参考内容:
昨天通过读文档、读博文、看教程学习了一下HTTP协议,发现真是“天下文章一大抄”,这种现象无可厚非,毕竟知识本身也就只有那些内容,并且博文里也注明了参考链接,大家也都见怪不怪了,但是连很明显的病句都是一模一样,那就有点尴尬了。我写学习笔记肯定也会“抄”(哈哈,piapia打脸)。
一、协议概述
超文本传输协议是(英语:HyperText Transfer Protocol,缩写:HTTP)是一个客户端和服务端之间请求和应答的标准,主要规定了客户端与服务器之间的通信格式,通常使用TCP协议(尽管TCP/IP协议是互联网上最流行的应用,但是在HTTP协议中并没有规定它必须使用或它支持的层。事实上HTTP可以在任何互联网协议或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用,所以其在TCP/IP协议族使用TCP作为其传输层)。
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
二、请求方法
请求方法是客户端告诉服务器其动作意图的方法,区分大小写,HTTP/1.1协议中共定义了8种方法(也叫“动作”)来以不同方式操作指定的资源。
- GET 请求指定的资源。使用
GET的请求应该只用于获取数据。 - POST 发送数据给服务器,请求主体的类型由 C
ontent-Type首部指定。 - HEAD 请求资源的头部信息, 并且这些头部与GET方法请求时返回的一致。
- PUT 使用请求中的数据替换目标资源。
- DELETE 用于删除指定的资源。
- OPTIONS 用于获取服务器所支持的方法。
- CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。通常用于SSL加密服务器的链接(经由非加密的HTTP代理服务器)。
- TRACE 实现沿通向目标资源的路径的消息环回(loop-back)测试 ,提供了一种实用的 debug 机制。
- PATCH 用于对资源进行部分修改。(由RFC 5789指定的方法)
三、状态码
所有HTTP响应的第一行都是状态行,依次是当前HTTP版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。
状态码的第一个数字代表当前响应的类型:
- 1XX 消息 请求已被服务器接收,继续处理
- 2XX 成功 请求已成功被服务器接收、理解并接受
- 3XX 重定向 需要后续操作才能完成这一请求
- 4XX 客户端错误 请求含有语法错误或无法被执行
- 5XX 服务器错误 服务器在处理某个正确请求时发生错误
常用状态码:
- 200 OK 客户端请求成功
- 302 Found 临时重定向。该状态码表示请求的资源已经被分配了新的URL,但是和301的区别是302代表的不是永久性的移动,只是临时的。
- 400 Bad Request 客户端请求有语法错误,不能被服务器所理解,需要修改后再次发送。
- 401 Unauthorized 请求未经授权,需要有通过HTTP认证的认证信息。这个状态代码必须和WWW-Authenticate报头域一起使用。
- 403 Forbidden 服务器收到请求,但是拒绝提供服务,因为没有获得服务器访问权限、IP被禁止等。
- 404 Not Found 请求资源不存在。也可以在服务器拒绝请求且不想说明理由时使用。
- 500 Internal Server Error 服务器发生不可预期的错误,很有可能是服务端程序的Bug或者临时故障。
- 503 Server Unavailable 服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上情况需要的时间,最好写入Retry-After字段再返回给客户端。
- 504 Gateway Timeout 网关超时,是代理服务器等待应用服务器响应时的超时,和408 Request Timeout的区别就是504是服务器的原因而不是客户端的原因。
四、待续
HTTP的知识还有很多,诸如报文、URL、版本等等,这里写不动了,不写了。
HTTP学习笔记01的更多相关文章
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
- SaToken学习笔记-01
SaToken学习笔记-01 SaToken版本为1.18 如果有排版方面的错误,请查看:传送门 springboot集成 根据官网步骤maven导入依赖 <dependency> < ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍
这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...
- xml基础学习笔记01
注意:刚刚看了网上对于XML中的标签,节点和元素?到底应该怎么表述?起初我也有这个疑惑,现在我的想法是:下面出现node的应称作节点,节点对象.element应称作元素,毕竟这更符合英文的本意.至于标 ...
- Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...
- FPGA-VHDL课堂学习笔记*01
FPGA-VHDL课堂学习笔记 记录说明:本文档主要记录大学期间,老师FPGA授课课堂笔记. 代码语言:VHDL 编程软件:MAX+plus II FPGA硬件:FLE-843 03月05日 理论课 ...
- [Golang学习笔记] 01 工作区和GOPATH
Go语言3个环境变量: GOROOT:GO语言按照根路径,也就是GO语言的安装路径. GOPATH:若干工作区目录的路径.是我自己定义的工作空间. GOBIN:GO程序生成的可执行文件(executa ...
随机推荐
- k8s 组件介绍-kube-controller-manager
1. Controller Manager简介 Controller Manager作为集群内部的管理控制中心,负责集群内的Node.Pod副本.服务端点(Endpoint).命名空间(Namespa ...
- Docker入门 .Net Core 使用Docker全程记录
https://www.cnblogs.com/flame7/p/9210986.html Docker入门 第一课 --.Net Core 使用Docker全程记录 微服务架构无疑是当前最火热的 ...
- PascalCase & camelCase & kebabCase
帕斯卡拼写法( 也叫大骆驼拼写法),一种计算机编程中的变量命名方法.它主要的特点是将描述变量作用所有单词的首字母大写,然后直接连接起来,单词之间没有连接符.比如: Age LastName Winte ...
- SET - 改变运行时参数
樊伟胜SYNOPSIS SET [ SESSION | LOCAL ] name { TO | = } { value | 'value' | DEFAULT } SET [ SESSION | LO ...
- python实现发送文本邮件
简单实现了python发送文本邮件 #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/4/25 17:09 # @Author ...
- Struts 2中的constant详解【转载】
通过对这些属性的配置,可以改变Struts 2 框架的一些默认行为,这些配置可以在struts.xml文件中完成,也可以在struts.properties文件中完成. struts.xml 1.&l ...
- Nginx是什么?为什么选择Nginx做服务器软件?有什么优势?
代理服务器基础知识 Nginx是什么? 为什么选择Nginx 1.代理服务器基础知识 a.代理服务器 一般是指局域网内部的机器通过代理服务器发送请求到互联网上的服务器,代理服务器一般作用在客户端.应用 ...
- JSP自定义方法标签
1.自定义方法标签 引入方式示例: <%@ taglib prefix="fns" uri="/WEB-INF/tlds/fns.tld" %> 写 ...
- tp框架数据查询,增删改
select()是数据模型的一个指定方法,可以获得数据表的数据信息 返回一个二维数组信息,当前数据表的全部数据信息 $obj = D(); 创建对象 $obj -> select(); 查询 ...
- PHP面向对象:instanceof 运算符
http://www.nowamagic.net/php/php_InstanceofOperator.php 在PHP5中,通过方法传递变量的类型有不确定性.于是我们很难判断,一些操作是否可以运行. ...