参考链接:https://www.cnblogs.com/zhangmumu/p/9213871.html

协议: 协议,就是事先的一种约定、规则、规范、标准。

常见协议 :

  • HTTP、HTTPS 超文本传输协议

  • FTP 文件传输协议

  • SMTP 简单邮件传输协议

HTTP协议 :HTTP协议即超文本传输协议, 是一个 [浏览器端] 和 [服务器端] 请求和响应的标准

  • 常用请求方法 GET, POST
  • 基于TCP/IP、一种网络应用层协议、超文本传输协议(HyperText Transfer Protocol)
  • 工作方式:客户端请求服务端应答的模式
  • 快速:无状态连接,灵活:可以传输任意对象,对象类型由Content-Type标记
  • 客户端请求request消息包括以下格式:请求行(request line)、请求头部(header)、空行、请求数据

服务端响应response也由四个部分组成,分别是:状态行、消息报头、空行、响应正文

请求报文和响应报文

请求/请求报文 :请求由客户端发起,其规范格式为:请求行、请求头、请求主体。

响应/响应报文 :响应由服务器发出,其规范格式为:状态行、响应头、响应主体。

get请求的请求报文详解

//--------------------------请求行--------------------------------
// GET  请求方式
// /day02/01.php?username=pp&password=123456    请求路径+参数(注意点)
// HTTP/1.1 HTTP的版本号
GET /day02/01.php?username=pp&password=123456 HTTP/1.1//--------------------------请求头--------------------------------
// Host:主机地址
Host: www.study.com
// HTTP1.1版本默认开启,建立过连接后,TCP连接不会断开,下次连接可以继续使用(底层,不用管)
Connection: keep-alive
//chrome浏览器自己增加的,不用管
Upgrade-Insecure-Requests: 1
//浏览器的代理字符串(版本信息)
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
//浏览器端可以接受的类型。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,`*/*`;q=0.8
//从哪个页面发出的请求
Referer: http://www.study.com/day02/01-login.html
//检查浏览器支持的压缩方式
Accept-Encoding: gzip, deflate, sdch
//浏览器支持的语言,优先中文。
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6//----------------------------请求主体-------------------------------------
//get请求没有请求体,因为要传递的数据已经拼接到了请求主头中

POST请求的请求报文

//-----------------------请求行---------------------------------------------
POST /day02/01.php HTTP/1.1//-----------------------请求头--------------------------------------------
Host: www.study.com
Connection: keep-alive
//传递的参数的长度。
Content-Length: 29
Cache-Control: max-age=0
Origin: http://www.study.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36
//内容类型:表单数据,如果是post请求,必须指定这个属性。
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,`*/*`;q=0.8
Referer: http://www.study.com/day02/01-login.html
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6//------------------------请求体------------------------------------------
username=pp&password=123456

GET请求与POST请求的对比

  • 请求缓存:GET 会被缓存,而POST不会,除非手动设置
  • 收藏书签:GET可以,而POST不能
  • 保留浏览器历史记录:GET可以,而POST不能
  • 用处:get常用于取回数据,post用于提交数据
  • 安全性:post比get安全
  • 请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制
  • GET请求只能进行url编码,而POST支持多种编码方式
  • GET参数通过URL传递,POST放在Request body中

误区一:“用处:get常用于取回数据,post用于提交数据”

曾听到过这样一种说法:get替换post来优化网站性能,虽然这种说法没错,也的确get常被用于取回数据,但是post也被一些ui框架使用于取回数据,比如kendo ui中的grid,就是用post来接受数据的。所以结论是get、post用途也是因地制宜。如果你有使用过kendo UI,会发现分页、过滤、自定义的参数都包含在form data里面。

误区二:“请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制”

这句话看上去实在没毛病啊,菜鸟教程也是这样说的啊。虽然字面意思上没有错误,但是理解一定要正确。我想说的是GET方法提交的url参数数据大小没有限制,在http协议中没有对url长度进行限制(不仅仅是querystring的长度),这个限制是特定的浏览器及服务器对他的限制。

下面就是对各种浏览器和服务器的最大处理能力做一些说明.

  • IE浏览器对URL的最大限制为2083个字符。
  • Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符。
  • Safari (Browser):URL最大长度限制为 80,000个字符。
  • Opera (Browser):URL最大长度限制为190,000个字符。
  • Google (chrome):URL最大长度限制为8182个字符。
  • Apache (Server):能接受最大url长度为8,192个字符。
  • Microsoft Internet Information Server(IIS):能接受最大url的长度为16,384个字符。

所以为了符合所有标准,url的最好不好超过最低标准的2083个字符(2k+35)。当然在做客户端程序时,url并不展示给用户,只是个程序调用,这时长度只受web服务器的影响了。对于中文的传递,一个汉字最终编码后的字符长度是9个字符。

最常见的form表单,浏览器默认的form表单,默认的content-type是application/x-www-form-urlencoded,提交的数据会按照key value的方式,jquery的ajax默认的也是这种content-type。当然在post方式中添加querystring一定是可以接收的到,但是在get方式中加body参数就不一定能成功接收到了。

误区三:“post比get安全性要高”

这里的安全是相对性,并不是真正意义上的安全,通过get提交的数据都将显示到url上,页面会被浏览器缓存,其他人查看历史记录会看到提交的数据,而post不会。另外get提交数据还可能会造成CSRF攻击。

误区四:“GET产生一个TCP数据包;POST产生两个TCP数据包。”

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

1). GET与POST都有自己的语义,不能随便混用。

2). 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

3). 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

常见的http状态码

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

2XX 成功
2XX 的响应结果表明请求被正常处理了

200 OK
表示从客户端发来的请求在服务器端被正常处理了

204 No Content
该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用

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

3XX 重定向
3XX 响应结果表明浏览器需要执行某些特殊的处理以正确处理请求。

301 Moved Permanently
永久性重定向。该状态码表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI。也就是说,如果已经把资源对应的 URI保存为书签了,这时应该按 Location 首部字段提示的 URI 重新保存。像下方给出的请求 URI,当指定资源路径的最后忘记添加斜杠“/”,就会产生 301 状态码。http://example.com/sample

302 Found
临时性重定向。该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。和 301 Moved Permanently 状态码相似,但 302 状态码代表的资源不是被永久移动,只是临时性质的。换句话说,已移动的资源对应的URI 将来还有可能发生改变。比如,用户把 URI 保存成书签,但不会像 301 状态码出现时那样去更新书签,而是仍旧保留返回 302 状态码的页面对应的 URI

303 See Other
该状态码表示由于请求对应的资源存在着另一个 URI,应使用 GET方法定向获取请求的资源。303 状态码和 302 Found 状态码有着相同的功能,但 303 状态码明确表示客户端应当采用 GET 方法获取资源,这点与 302 状态码有区别。

304 Not Modified
该状态码表示客户端发送附带条件的请求 (GET 方法的请求报文中包含 If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since 中任一首部)时,服务器端允许请求访问资源,但未满足条件的情况。304 状态码返回时,不包含任何响应的主体部分。304 虽然被划分在 3XX 类别中,但是和重定向没有关系。

307 Temporary Redirect
临时重定向。该状态码与 302 Found 有着相同的含义。尽管 302 标准禁止 POST 变换成 GET,但实际使用时大家并不遵守。
307 会遵照浏览器标准,不会从 POST 变成 GET。但是,对于处理响应时的行为,每种浏览器有可能出现不同的情况。

4XX 客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在

400 Bad Request
该状态码表示请求报文中存在语法错误。当错误发生时,需修改请求的内容后再次发送请求。另外,浏览器会像 200 OK 一样对待该状态码。

401 Unauthorized
该状态码表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST 认证)的认证信息。另外若之前已进行过 1 次请求,则表示用 户认证失败。返回含有 401 的响应必须包含一个适用于被请求资源的 WWWAuthenticate首部用以质询(challenge)用户信息。当浏览器初次接收到 401 响应,会弹出认证用的对话窗口。

403 Forbidden
该状态码表明对请求资源的访问被服务器拒绝了。服务器端没有必要给出拒绝的详细理由,但如果想作说明的话,可以在实体的主体部分对原因进行描述,这样就能让用户看到了。未获得文件系统的访问授权,访问权限出现某些问题(从未授权的发送源 IP 地址试图访问)等列举的情况都可能是发生 403 的原因

404 Not Found
该状态码表明服务器上无法找到请求的资源。除此之外,也可以在服务器端拒绝请求且不想说明理由时使用。

5XX 服务器错误
5XX 的响应结果表明服务器本身发生错误。

500 Internal Server Error
该状态码表明服务器端在执行请求时发生了错误。也有可能是 Web应用存在的 bug 或某些临时的故障。

503 Service Unavailable
该状态码表明服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。如果事先得知解除以上状况需要的时间,最好写入RetryAfter 首部字段再返回给客户端。

状态码和状况的不一致
不少返回的状态码响应都是错误的,但是用户可能察觉不到这点。比如 Web 应用程序内部发生错误,状态码依然返回 200 OK,这种情况也经常遇到。

请求方法,http请求可以使用多种请求方法。

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

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

PHP基础知识5——HTTP协议+GET请求+POST请求相关推荐

  1. 上传文件到tftp服务器,网络基础知识:TFTP协议之上传文件

    原标题:网络基础知识:TFTP协议之上传文件 上传文件指的是客户端将本地上的文件上传到TFTP服务器上.下面介绍客户端如何进行文件上传,以及上传时所涉及的各类型数据包. 1.工作流程 客户端会向TFT ...

  2. 计算机网络基础知识--TCP/IP协议、IP分组、TCP传输

    转 计算机网络基础知识--TCP/IP协议.IP分组.TCP传输 2017年12月08日 08:35:09 孔维昊 阅读数 1820 查看全文 http://www.taodudu.cc/news/s ...

  3. web基础知识(3)--HTTP协议与web框架与其他

    一.HTTP协议 HTTP(Hyper Text Transfer Protocol 超文本传输协议 )协议是基于TCP/IP协议的用于传递数据的协议,其默认端口为80/TCP,简单来说就是客户端与服 ...

  4. Web基础知识之HTTP协议

    HTTP协议 HTTP协议概述 计算机网络体系结构分层 TCP/IP 通信传输流 利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信.发送端从应用层往下走,接收端则从链路层往上走. ...

  5. 存储基础知识二 主要协议SCSI、FC、iSCSI

    一.SCSI SCSI是小型计算机系统接口(Small Computer System Interface)的简称,于1979首次提出,是为小型机研制的一种接口技术,现在已完全普及到了小型机,高低端服 ...

  6. 3、以太网基础知识——ARP地址解析协议原理

    返回目录 上一篇 下一篇 概述 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议.网络层以上的协议用IP地址来标识网络 ...

  7. 网络基础知识-TCP/IP协议各层详解

    TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...

  8. 【网络】网络的基础知识--TCP/IP协议、IP分组、TCP传输

    1.OSI参考模型: OSI(Open System Interconnect),即开放式系统互联.一般都称为OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互联模型.该体系结构标 ...

  9. Web基础知识之TCP_IP协议

    TCP/IP协议 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别.OSI 参考模型注重"通信协议必要的功能是什么",而 TCP/IP 则更强调&q ...

最新文章

  1. 两个数组的交集 II
  2. java linux download
  3. MyBatis 缓存详解-一级缓存的不足
  4. java反汇编_Java虚拟机学习总结(3)——JDK内置工具(jps、jstack、jmap、jstat)使用详解...
  5. Visual Studio Code compile error - launch.json must be configured...
  6. mysql创建图书馆书库表格,mysql图书馆管理系统的数据库
  7. Typecho插件之飘雪插件
  8. cocoa touch框架
  9. DGraphDTA训练部分源码解读分析(一)2021SC@SDUSC
  10. UE-战斗无止境的复刻
  11. Decal的另类用法
  12. 高校学生学科竞赛获奖水平影响因素分析 ---以湘潭大学为例
  13. XX nm制造工艺是什么概念?实现7nm制程工艺为什么这么困难?
  14. 4、外部中断(STM32)
  15. 对ROS局部运动规划器Teb的理解
  16. JAVA动态代理Porxy
  17. Ubuntu 16.04通过无线网卡使用桥接模式上网
  18. 计算机类中级职称论文,计算机中级职称论文.docx
  19. Babylongjs-高度图,天空盒,图片精灵及K帧动画
  20. Maven的配置、安装及测试可用

热门文章

  1. 【python脚本】-刷CSDN博客流量
  2. 实战 | 1——python爬取某动漫网站(2)
  3. RLL in data sharing
  4. 佳能Canon PIXMA MX538 打印机驱动
  5. 解决typescrip使用xml2js库报错:Module not found: Error: Can‘t resolve ‘timer‘ in ‘‘
  6. <DataWhale>- 语义分割 - RLE编码
  7. 实例7-1 SR锁存器延迟模型
  8. split方法可以实现同时使用多个分隔符劈开字符串方法(分隔sql条件)
  9. 大圣轮回服务器维护,《大圣轮回》关服公告
  10. 圣诞节到了,让我们用 Python 画几棵圣诞树,玩玩~