介绍:
HTTP是超文本传输协议,其定义了客户端和服务器端之间文本传输的规范。HTTP默认使用80端口,这个端口指的是服务器端的端口,而客户端的端口是动态分配的。当我们没有指定端口访问时,浏览器会默认帮我们添加80端口。我们也可以自己指定访问端口。需要注意的是,现在大多数访问使用HTTPS协议,而HTTPS的默认端口为443,如果使用80端口访问,HTTPS协议的服务器可能会被拒绝。

HTTP请求的方法:
HTTP/1.1协议中共定义了八种方法,来表明Request-URL指定的资源不同的操作方式。
HTTP/1.0定义了三种请求方法:GET、POST、和HEAD方法
HTTP/1.1新增了五种方法:OPTIONS,PUT,CONNECT,DELETE和TRACE方法。

方法 描述
GET 请求指定的页面内容,并返回实体主体
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据包含在请求体中。POST请求可能会导致新的资源的建立或者已有资源的修改。
PUT 从客户端向服务器传送的数据取代指定的文档的内容
DELETE 请求服务器删除指定的页面
CONNECT HTTP1.1协议中预留给能够将连接方式改为管道方式的代理服务器
OPTIONS 允许客户端查看服务器的性能
TRACE 回显服务器收到的请求,主要用于测试或诊断

HTTP工作原理
HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求行(请求的方法、URL、协议的版本、)请求头部、空行和请求数据。 服务器以一个状态行作为响应,响应的内容包含状态行(协议的版本,成功或者错误代码,服务器信息),响应头部、空行和响应数据。

HTTP请求/响应的步骤: 客户端连接到Web服务器—>发送Http请求(一个请求报文由请求行、请求头部、空行和请求数据4部分组成。)—>服务器接受请求并返回HTTP响应(一个响应由状态行、响应头部、空行和响应数据4部分组成。)—>释放TCP连接—>客户端浏览器解析HTML内容

1、客户端连接到Web服务器
一个http客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立TCP套接字连接
2、发送http请求
通过http套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行,请求头部,空行,请求数据4部分组成。
3、服务器接受请求并返回http响应
Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个状态响应由状态行,响应头部,空行和响应数据4部分组成。
4、释放TCP连接
若connection模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection模式为keep-alive,则该连接会保持一段时间,在该时间内可以继续接收请求。
5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

HTTP请求消息requset (客户端发送给服务器的报文)
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行,请求头部,空行,请求数据四部分组成


第一部分:请求行,用来说明请求类型,要访问的资源以及所使用的HTTP版本
GET /562f25980001b1b106000338.jpg HTTP/1.1
GET说明请求类型为GET,[/562f25980001b1b106000338.jpg]为要访问的资源,该行的最后一部分说明使用的是HTTP1.1版本。

第二部分:请求头部,紧接着请求行之后的部分,用来说明服务器要使用的附加信息

第三部分:空行,请求头部后面的部分必须是空行,即使第四部分的数据为空,也必须要有空行

第四部分:请求数据也叫主体,可以添加任意的其他数据

HTTP请求消息Response(服务器返回给客户端的响应消息)
HTTP响应由状态行,消息报头(响应头部),空行,响应数据4部分组成

例子:
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

< html >
< head>< /head>
< body>

< /body>
< /html>

第一部分:状态行,由HTTP版本号,状态码,状态消息三部分组成
第一行为状态行,(HTTP/1.1)表明HTTP版本为1.1版本,状态码为200,状态消息为(ok)
第二部分:消息报头,用来说明客户端要使用的一些附加信息
第三部分:空行,消息报头后面的空行是必须的
第四部分:响应正文,服务器返回给客户端的文本信息。

GET与POST:
GET方法提交的数据会直接填充在请求报文的URL上,如“ https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1 ” ,‘?’划分域名和GET提交的参数,A=B只中的A是参数名,B是参数值,多个参数之间用&分割。一般来说,浏览器处理的URL最大限度长度为1024B,所以GET方法提交参数的长度由限制。

“post”方法提交的数据会附在正文上,一般请求正文的长度是没有限制的,但表单中所能处理的长度一般为100k(不同协议不同浏览器不一样),而且需要考虑下层报文的传输效率,不推荐过长。

所以GET方法可以用来传输一些可以公开的参数信息,解析也比较方便,如百度的搜索的关键词,而POST方法可以用来提交一个用户的敏感信息(如果不使用HTTPS加密,报文正文仍旧是明文,容易被人截获读取

比较GET与POST

1、HTTP 只有POST和GET 两种命令模式;
2、 POST 是被设计用来向上放东西的,而GET是被设计用来从服务器取东西的,GET也能够向服务器传送较少的数据,而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.POST的信息作为HTTP 请求的内容,而GET是在HTTP 头部传输的;
3、POST与GET在HTTP 中传送的方式不同,GET的参数是在HTTP 的头部传送的,而Post的数据则是在HTTP 请求的内容里传送;
4、POST传输数据时,不需要在URL中显示出来,而GET方法要在URL中显示;
5、 GET方法由于受到URL长度的限制,只能传递大约1024字节;POST传输的数据量大,可以达到2M;

HTTP请求方式中的8种请求方式相关推荐

  1. PHP中的6种加密方式

    PHP中的6种加密方式 1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str  --  原始字符串. raw ...

  2. java用户输入解析_Java中的3种输入方式实现解析

    Java中的3种输入方式实现解析 发布于 2020-8-8| 复制链接 摘记: 这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学 ...

  3. link linux 跨设备,Linux中的两种link方式

    Linux系统中包括两种链接方式:硬链接(hard link)和符号链接(symbolic link),其中符合链接就是所谓的软链接(soft link),那么两者之间到底有什么区别呢? inode ...

  4. python请输入_python中的三种输入方式

    python中的三种输入方式 python2.X python2.x中以下三个函数都支持: raw_input() input() sys.stdin.readline() raw_input( )将 ...

  5. @AspectJ中的几种通知方式详解

    本文来详细说下@AspectJ中的几种通知方式 文章目录 概述 通知方式说明 一个例子 本文小结 概述 当Spring 2.0发布以后,Spring AOP增加了新的使用方式,Spring AOP集成 ...

  6. java一行输入多个数据类型_Java中的3种输入方式实现解析

    这篇文章主要介绍了Java中的3种输入方式实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.从键盘读取char类型数据 char ch = ...

  7. IPC机制(三)--->Android中的几种IPC方式

    目录 1.每日一句 2. 作者简介 3. Android中的几种IPC方式 3.1 使用Bundle 3.2 使用文件共享 3.3 使用Messenger 3.4  使用AIDL 3.4.1 服务端 ...

  8. JavaScript中的几种继承方式及优缺点,你知道多少呢?

    原文连接:JavaScript中的几种继承方式及优缺点,你知道多少呢? 继承也是前端里面的重要的一个知识点,在实际工作中或者面试中也会经常的遇到,那么通过这篇文章我们详细的了解一下继承的几种方式以及各 ...

  9. Map集合中的两种取出方式keySet和entrySet

    /*map集合中的两种取出方式:1.Set<k> keySet:将map集合中所有的键存入到Set集合,因为Set具备迭代器.所有可用迭代方式取出所有的键,再根据get方法,获取每一个键对 ...

最新文章

  1. 利用OpenCV、Python和Ubidots构建行人计数器程序(附完整代码)
  2. IntelliJ IDEA安装主题详细步骤
  3. ASP.net mvc开发中使用纯html如何创建FCKeditor编辑器的使用
  4. net-snmp交叉编译出现 undefined reference to dlopen,dlsym,dlclose错误
  5. 嵌入式笔录(2)-电阻串联与并联
  6. centos7配置不开启浏览器执行基于python+selenium的功能自动化脚本
  7. Java数据结构习题_算法分析
  8. 70条程序员编程的专业名言,你认可几条?
  9. cocos2dx在不同安卓机型下scrollview裁剪失败
  10. c语言5-34答案,C语言答案第5章.doc
  11. 正式环境docker部署hyperf_HyperLedger/Fabric SDK使用Docker容器镜像快速部署上线
  12. PHP正则提取超链接地址及标题,PHP正则表达式提取超链接及其标题
  13. EDA技术实用教程 | 复习一 | IP核的概念和分类
  14. css的鼠标手势总结
  15. 第九届蓝桥杯快速排序java
  16. 北京大学C语言学习第8天
  17. 我国网络营销发展的现状、障碍与对策
  18. CF-133A - HQ9+
  19. list数据比对与list对象比对
  20. java有声小说如何开发_怎么才能做有声小说播音?有声书主播如何训练?

热门文章

  1. 均衡教育计算机功能室,中小学教育均衡发展评估功能室设置的规范要求(DOC 79页)...
  2. 天虹 项目支付宝开发
  3. 网络编程-------初学者入门
  4. 做亚马逊难吗?无货源模式开店很简单
  5. linux下载命令wget命令详解
  6. @Autowired用法详解
  7. stdin、stdout
  8. 基于OpenWrt的PPTP服务器
  9. 推特确认540万账户数据泄露,涉及手机号、位置、URL等信息
  10. Python绝技:运用Python成为顶级黑客笔记及心得体会[1]