使用 PHP 处理HTTP 请求报文

本文详细介绍了HTTP请求类型,包括GET和POST的区别,HTTP请求报文结构,重点讲解了HTTP Request Header的各个部分,如Cache、Client、Cookie/Login、Entity、Miscellaneous和Transport头域。还阐述了PHP如何处理GET和POST请求参数,提供了处理POST Request Body的三种方式,包括_POST、HTTP_RAW_POST_DATA和php://input。最后,文章提到了获取HTTP请求头的方法和注意事项。
摘要由CSDN通过智能技术生成

HTTP请求类型

HTTP协议定义了很多类请求,包括OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT,具体介绍如下:

  • OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*’的请求来测试服务器的功能。
  • HEAD:向服务器索要与GET请求相一致的响应,只不过响应body将不会返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取不包含在响应消息头中的元信息。
  • GET:向特定的资源发出请求。
  • POST:向特定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求body中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
  • PUT:向指定资源位置上传其最新内容。
  • DELETE:请求服务器删除所表示的资源
  • TRACE:回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

我们在实际应用中常用的也就是get和post,其他的请求方式也可以通过get和post间接实现。

GET和POST请求的区别

  • GET提交的数据放在HTTP请求报文的URL中,用?分割URL和传输数据,参数之间以&连接,如/Response/get?key1=value1&key2=value2。 POST把提交的数据放在HTTP请求报文的body中。
  • GET提交的数据大小有限制,而POST方法提交的数据没有限制
  • GET需要使用_GET[“key”],而POST通过使用_POST[“key”]、以及读取php://input流、或者读取HTTP_RAW_POST_DATA常量来实现

HTTP Request 报文结构

HTTP Request 结构如下图所示
这里写图片描述

  • Request Line 包含HTTP 请求类型(GET、POST等), 请求URL, Http版本号
    当使用“GET”方法的时候,body为空

  • HTTP Request Header中包含HTTP请求操作参数. header属性定义了所传输数据的各种特性.

  • HTTP Request Body 包含请求中携带的其他信息

HTTP Request Header

HTTP Request Header包含以下内容:

  • Cache 头域
  • Client 头域
  • Cookie/Login 头域
  • Entity 头域
  • Miscellaneous 头域
  • Transport 头域

Cache 头域

If-Modified-Since

作用: 把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.

例如:If-Modified-Since: Thu, 09 Feb 2012 09:07:57 GMT

If-None-Match

作用: If-None-Match和ETag一起工作,工作原理是在HTTP Response中添加ETag信息。 当用户再次请求该资源时,将在HTTP Request 中加入If-None-Match信息(ETag的值)。如果服务器验证资源的ETag没有改变(该资源没有更新),将返回一个304状态告诉客户端使用本地缓存文件。否则将返回200状态和新的资源和Etag. 使用这样的机制将提高网站的性能

例如: If-None-Match: “03f2b33c0bfcc1:0”

Pragma

作用: 防止页面被缓存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一样
Pargma只有一个用法, 例如: Pragma: no-cache
注意: 在HTTP/1.0版本中,只实现了Pragema:no-cache, 没有实现Cache-Control

Cache-Control

作用: 这个是非常重要的规则。 这个用来指定Response-Request遵循的缓存机制。常用各个指令含义如下:

Cache-Control:Public 可以被任何缓存所缓存
Cache-Control:Private 内容只缓存到私有缓存中
Cache-Control:no-cache 所有内容都不会被缓存

Client 头域

Accept

作用: 浏览器端可以接受的媒体类型,例如: Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)。

通配符 * 代表任意类型

例如 Accept: / 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)

Accept-Encoding

作用: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate),(注意:这不是只字符编码);

例如: Accept-Encoding: gzip, deflate

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值