• HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。
  • 一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。
  • 一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。
  • HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。
  • 一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

一、HTTP工作原理

HTTP消息结构:
一个HTTP请求报文由请求行(request line)请求头(header)空行请求数据四部分构成

  1. 请求行由请求方法字段,URL字段和HTTP协议版本字段3个字段构成。
    例如:GET /index.html HTTP/1.1
    根据HTTP标准,HTTP请求可以使用多种请求方法。
    HTTP1.0 定义了三种请求方法:GET,POST和HEAD方法。
    HTTP1.1新增五种请求方法:OPTIONS,PUT,DELETE,TRACE和CONNECT方法

Get方法

常见的一种请求方式,当客户端要从服务器中读取文档时,当点击网页上的链接或者通过浏览器的地址栏输入网址来浏览网页,使用的都是GET方式。GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(?)代表URL的结尾与请求参数的开始,传递参数长度受限制地址中的’?’之后的部分就是通过GET发送的请求数据,我们可以在地址栏中清楚看到,各个数据之间用&符号分开,显然,这种方式不适合传送私密数据,另外,由于不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,如果需要传送大量数据的时候,也不适合GET请求。

POST请求

Post方法可以允许客户端给服务器提供信息较多。POST方法将请求参数封装在HTTP请求数据中,以名称/值的形式出现,可以传输大量数据,这样POST方式对传送的数据大小没有限制,也不会显示在URL中。

HEAD

HEAD就像GET,只不过服务端接收到HEAD请求后只返回响应头,而不会发送响应内容,当我们只需要查看某个页面的状态时,使用HEAD是非常高效的,因为在传输的过程中省略了页面内容。

  1. 请求头
    请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号:分隔。请求头部通知服务器关于客户端请求的信息,典型的请求头有:
    User-Agent:产生请求的浏览器类型
    Accept: 客户端可识别的内容类型列表
    Host: 请求的主机名,允许多个域名同处一个IP地址,即虚拟主机

  2. 空行
    最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头

  3. 请求数据
    请求数据不在GET方法中使用,而是在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最长使用的请求头Content-Type和Content-Length。

HTTP响应消息

http响应也有三部分构成,分别是状态行响应头空行响应正文

  1. 状态行
    状态行通过状态码来说明所请求的资源情况

HTTP状态码的因为HTTP Status Code。状态码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
1xx : 指示信息 – 表示请求已接收,继续处理
2xx : 成功 – 表示请求已被成功接收,理解
3xx : 重定向 – 要完成请求必须进行更进一步的操作
4xx : 客户端错误 – 请求有语法错误或请求无法实现
5xx : 服务器端错误 – 服务器未能实现合法的请求
常见状态码状态描述
200 OK : 客户端请求成功
400 Bad Request:客户端请求有语法错误,不能被服务器解析
401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden:服务器收到请求,但是拒绝服务
404 Not Found:请求资源不存在。例如:输入错误的URL
500 Internal Server Error :服务器发生不可预期的错误
503 Server Unavaliable : 服务器当前不能处理客户端的请求,一段时间后可能恢复等其他状态码。
2. 响应头

Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些Asp网页点击的结果却是下载到的一个文件或一张图片的原因。

三、关于HTTP请求GET和POST的区别(面试重点)

GET----获取资源
GET 方法一般用来从服务器上获取资源的方法。服务器端接到 GET 请求后,就会明白客户端是要从服务器端获取相应的资源,然后就会根据请求报文中相应的参数,将需要的资源返回给客户端。使用 GET 方式的请求,传输的参数是拼接在 URL上的。
POST----数据提交
POST 方法一般用于表单提交,将客户端的数据塞到请求体中发送给服务器端。

可以总结为:

  1. get 请求无消息体,只能携带少量数据;post 请求有消息体,可以携带大量数据
  2. get 请求将数据放在 url 地址中;post 请求将数据放在消息体中
  3. GET 请求请提交的数据放置在 HTTP 请求协议头中,而 POST 提交 的数据则放在实体数据中;GET 方式提交的数据最多只能有 1024 字节,而 POST 则没有此限制
  4. 安全性
    POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。上面“安全”的含义仅仅是不作数据修改,而这里安全的含义是真正的Security的含义,比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了

Http简介(关于HTTP请求GET和POST的区别)相关推荐

  1. ID3、C4.5、CART树算法简介,这几个算法有什么区别?对于异常值和分类值有什么需要注意的?

    ID3.C4.5.CART树算法简介,这几个算法有什么区别?对于异常值和分类值有什么需要注意的? 目录

  2. 请求转发与重定向的区别和执行流程

    请求转发与重定向的区别和执行流程 文章目录 请求转发与重定向的区别和执行流程 1 请求转发与重定向区别 2 现实生活的例子 2.1 重定向 2.2 请求转发 3 重定向-流程图.代码.结果 3.1 流 ...

  3. 网络请求get和post的区别

    网络请求get和post的区别 其实本文更应该放在HTTP相关的分类,但是目前我并没有开设这一个分类专栏,so临时储存在HTML分类吧 Get和post是HTTP请求的两种基本方式 get是从服务器上 ...

  4. 请求转发和重定向的区别_WEB之重定向和请求转发的区别

    一次重定向的过程 我的代码里面已经写好了,redirectAndFoward.jsp页面上有一个表单,表单重定向到redirectAndFowardTarget.jsp,那么这一次的重定向过程为: 1 ...

  5. 请求转发和重定向的区别以及什么时候使用

    请求转发和重定向的区别以及什么时候使用 转发过程(不改变网址) 客户浏览器发送http请求-->web服务器接受此请求-->调用内部的一个方法在容器内部完成请求处理和转发动作-->将 ...

  6. 跟我一起学.NetCore之中间件(Middleware)简介和解析请求管道构建

    前言 中间件(Middleware)对于Asp.NetCore项目来说,不能说重要,而是不能缺少,因为Asp.NetCore的请求管道就是通过一系列的中间件组成的:在服务器接收到请求之后,请求会经过请 ...

  7. cookie、Session、Token、sessionStorage、localStorage简介__Token放在 cookie, sessionStorage 和 localStorage中区别

    cookie.Session.Token.sessionStorage.localStorage简介 cookie 是一个非常具体的东西,只得是浏览器里永久存储的一种数据,是浏览器实现的一种数据存储功 ...

  8. JSP中的重定向和请求转发以及它们的区别

    我们先硬着头皮看一下重定向的定义: 重定向(Redirect): 客户端浏览器向Web应用服务器端发送一个请求,Web服务器端使用HttpServletResponse的sendRedirect()方 ...

  9. 关于HTTP请求GET和POST的区别

    1.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中),以?分割URL和传输数据,多个参数用&连接;例如:login.actio ...

最新文章

  1. mysqlsla slow-query常用用法
  2. php interface exists,43、面向对象方法get_object_vars、is_subclass_of、interface_exists
  3. 【渝粤题库】国家开放大学2021春4010渠道管理答案
  4. mysql6位数货币大写,生成数字+英文字母大小写彩虹字符集(6位),共有62^6种可能_MySQL...
  5. Node.js相关——CommonJS规范
  6. Java学习笔记(2)----散列集/线性表/队列/集合/图(Set,List,Queue,Collection,Map)
  7. Win8应用法律声明
  8. vue中index.html文件为什么可以使用模板语法
  9. 如何利用kali暴力破解WiFi密码
  10. 支付宝接口对接指南(四、回调通知对接:websoket方式)【保姆级】
  11. 抢票软件开发(二) 模拟登录
  12. 移动互联网精彩语录:悟透一句话,改变你一生!
  13. 什么是泛型中的限定通配符和非限定通配符 ?
  14. 微信小程序布局快速入门
  15. 详解CorelDRAW X7的多种视图显示模式
  16. 客户服务呼叫中心解决方案
  17. Sql语句——删除表数据drop、truncate和delete的用法
  18. 终端(terminal)打印彩色文字
  19. 微型计算机代表性机型,微型计算机原理及应用技术
  20. 【JNU】网络配置大题详解(E口与G口两种类型)

热门文章

  1. 20175227张雪莹 2018-2019-2 《Java程序设计》第八周学习总结
  2. 阿里面试官问我Mybatis,我怂了吗?
  3. Java注解annotation invalid type of annotation member
  4. k8s学习一:centos7单机安装k8s
  5. ava web开发 高并发处理
  6. 域名限制注册有哪些原因?
  7. 春节送礼经济学:绕不开的礼尚往来,怎么送礼最有效?
  8. Kylin Docker 无法启动的问题 EXITED 139
  9. 【Please, upgrade your dependencies to the actual version of cor问题】
  10. tvOS游戏开发系列(SpriteKit)之新建tvOS游戏项目(二)