一。HTTP报文的组成

  请求报文由 请求行、请求头、请求空行、请求实体四部分组成。其中,请求行和请求头共同组成 请求报文头部

    请求行:一行,依次由 请求方法、URI(或者应该说是域名?)、HTTP协议版本 三部分组成

    请求头:由 通用首部字段、请求首部字段、实体首部字段 三部分组成

    空行

    请求实体(请求报文实体)

  响应报文由 响应行、响应头、响应空行、响应实体四部分组成。其中,响应行和响应头共同组成响应报文头部

    响应行:一行,依次由 HTTP协议版本、状态码、状态码简介 三部分组成

    响应头:由 通用首部字段、响应首部字段、实体首部字段 三部分组成

    空行

    响应实体(响应报文实体)

二。请求方法

  HTTP1.1总共有种请求方法

  都是针对请求URI做出的动作

  1.GET  请求资源

  2.POST  提交数据,传输实体主体

  3.PUT  传输文件

  4.HEAD  获取报文首部

  5.DELETE  删除文件

  6.OPTION  询问支持的方法

  7.TRACE  追踪路径,Max-Forwards首部字段中填入数值,每经过一个服务器则减1,数值变为0时停止传输,最后收到请求的服务器返回200 OK

  8.CONNECT  与代理服务器间建立隧道(使用SSL(Secure Socket Layer,安全套接层)和TLS(Transport Layer Secure,传输层安全)加密的通信通道)

  GET 和 POST的比较:

  (1)是否可保存为书签:GET能被保存为书签;POST不能

  (2)是否可以缓存:GET能被缓存;POST不能

  (3)参数是否能保存为浏览器历史:GET中的参数能保存在浏览器历史里;POST的参数不能

  (4)数据类型限制:GET只允许ASCII码字符;POST无数据类型限制,可以为二进制数据,因为POST的数据作为一个整体放在请求报文实体里

  (5)数据是否可见:GET的数据可见,因为用 ? 和 & 拼接在URL中;POST的数据不可见

  (6)数据是否安全:GET中的数据不安全;POST比GET更安全

  (7)数据的长度限制:GET有长度限制,URL最长2048个字符;POST数据内容无长度限制

  (8)后退/刷新是否有害:GET无害;POST会重复提交数据

三。状态码

  总共有5种不同类别的状态码。总结如下

状态码 类别 含义
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作以完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

  常见的状态码有:

  100:Continue  一切正常 ,客户端可以继续发送请求

  200:OK

  204:Not Content  请求正常处理,但返回的响应报文中不含实体的主体部分(无资源返回)

  206:Partial Content  表示客户端进行了范围请求,服务器成功执行。响应报文中包含由 Content-Range 指定范围的实体内容

  301:Moved Permanently  永久重定向

  302:Found  临时性重定向。表示请求的资源已分配新的URI,希望用户本次使用新URI访问

  303:See Other  和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源

  304:Not Modified  请求报文首部包含条件(如:If-Match),不满足条件是返回 304

  307:Temporary Redirect  临时性重定向。POST方法不会变为GET方法

  注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET 方法。

  400:Bad Request  错误请求(请求报文中存在语法错误)

  401:Unauthorized  请求需要HTTP认证信息

  403:Forbidden  该资源拒绝访问

  404:Not Found  无法找到请求的资源

  500:Internal Server Error  服务器发生错误

  503:Service Unavailable  服务器繁忙(超负载或正在停机维护)

  

HTTP协议学习(一)的更多相关文章

  1. TCP/IP协议学习(五) 基于C# Socket的C/S模型

    TCP/IP协议作为现代网络通讯的基石,内容包罗万象,直接去理解理论是比较困难的:然而通过实践先理解网络通讯的理解,在反过来理解学习TCP/IP协议栈就相对简单很多.C#通过提供的Socket API ...

  2. http协议学习系列

    深入理解HTTP协议(转)  http://www.blogjava.net/zjusuyong/articles/304788.html http协议学习系列   1. 基础概念篇 1.1 介绍 H ...

  3. BGP协议学习总结

    BGP学习总结 BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,就可以建 ...

  4. TCP/IP协议学习之实例ping命令学习笔记

    TCP/IP协议学习之实例ping命令学习笔记(一) 一. 目的为了让网络协议学习更有效果,在真实网络上进行ping命令前相关知识的学习,暂时不管DNS,在内网中,进行2台主机间的ping命令的整个详 ...

  5. HTTP协议学习笔记(四)

    HTTP协议学习笔记(四) 与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟主机实现多个域名 ...

  6. HTTP协议学习笔记(三)

    HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...

  7. HTTP协议学习笔记(二)

    HTTP协议学习笔记(二) 1.HTTP报文 HTTP报文:用于HTTP协议交互的信息.请求报文:请求端(客户端)的HTTP报文叫做请求报文.响应报文:响应端(服务端)的HTTP报文叫做响应报文. H ...

  8. HTTP协议学习笔记(一)

    HTTP协议学习笔记(一) 1.HTTP协议用于客户端和服务端之间的通信 客户端:请求访问文本或图像等资源的一端服务端:提供资源响应的一端 在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定 ...

  9. 网关协议学习:CGI、FastCGI、WSGI

    网关协议学习:CGI.FastCGI.WSGI https://www.biaodianfu.com/cgi-fastcgi-wsgi.html

  10. 苹果ANCS协议学习【转】

    苹果ANCS协议学习 转自:http://www.cnblogs.com/alexcai/p/4321514.html 综述 苹果通知中心(Apple Notification Center Serv ...

随机推荐

  1. Unity3D编辑器扩展(一)——定义自己的菜单按钮

    Unity3D 引擎的编辑器拥有很强的扩展性,用的好可以帮我们省很多事情.在这里记录下如何去扩展 Unity3D 的编辑器,定制属于我们自己的开发环境. 本篇主要讲解在 Unity3D 引擎的各个窗口 ...

  2. Exp4 恶意代码分析 20154320 李超

    恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. ...

  3. stm32f10x_it.c、stm32f10x_it.h和stm32f10x_conf.h文件作用

    如上图,在STM32的Keil工程文件(Project)中一般都包含stm32f10x_it.c.stm32f10x_it.h和stm32f10x_conf.h这三个文件,但是在ST官方提供的标准库“ ...

  4. [转]MYSQL性能查看(命中率,慢查询)

    网上有很多的文章教怎么配置MySQL服务器,但考虑到服务器硬件配置的不同,具体应用的差别,那些文章的做法只能作为初步设置参考,我们需要根据自己的情况进行配置优化,好的做法是MySQL服务器稳定运行了一 ...

  5. Reids学习1 -- 初识Redis

    1. Reids和其他类型数据库对比 名称 类型 数据库存储选项 查询类型 附加功能 Redis 使用内存存储的非关系数据库 字符串,列表,集和,散列表,有序集合 每个类型有自己的专属命令,还有批量操 ...

  6. Jquery中attr()与prop()的区别

    在jQuery中,attr()函数和prop()函数都用于设置或获取指定的属性,它们的参数和用法也几乎完全相同.但是,这两个函数的用处却并不相同.下面我们来详细介绍这两个函数之间的区别. 1.操作对象 ...

  7. Android Studio 3.0 变化之 implementation与compile

    Android Studio 3.0 出来很久了,本文就着重介绍一下 新版本中 Moudle 中 build.gradle 文件中的变化. 我们来看看新建一个项目在 Moudle 中的 depende ...

  8. 谷歌浏览器隐藏url前缀问题

     此前曾有用户表示,谷歌若在Chrome的地址栏中隐藏URL的HTTP.HTTPS及WWW前缀,那么用户的安全将有可能遭至威胁,如果你不希望Chrome浏览器隐藏URL的HTTP.HTTPS及WWW前 ...

  9. CentOS7编译安装MySQL5.7.24

    目录 安装依赖 安装boost 编译安装MySQL 配置 登录MySQL,修改密码 安装依赖 (1)cmake是新版MySQL的编译工具 sudo yum install gcc gcc-c++ pc ...

  10. CSS3实现背景透明文字不透明

    最近遇到一个需求,如下图,input框要有透明效果 首先想到的方法是CSS3的 opacity属性,但事实证明我想的太简单了 这个属性虽然让input框有透明效果,同时文字和字体图标也会有透明效果,导 ...