HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码
(请求行的)请求方法 包括:
GET,POST,HEAD,PUT,TRACE,DELETE,OPTIONS
注意:这些请求方法虽然是 HTTP 协议规定的,但是 Web Server 未必允许或支持这些方法。
HEAD 和 GET 基本一致,只是不返回内容,比如只是确认一个内容还正常存在,不需要返回具体内容。演示:
GET:
HEAD:
HEAD 方法只返回了响应的头信息。
PUT,往服务器上的资源传输内容:
服务器未必支持 HTTP 协议所规定的方法。
TRACE, 例如使用了代理上网(例如访问 news.163.com),可以使用 TRACE 查看代理有没有修改 HTTP 请求(163.com 的服务器就会把最后收到的请求返回):
同样 Not Allowed,对方的服务器不允许使用 TRACE 方法。
OPTIONS,返回服务器可用的请求方法:
OPTIONS 也不被允许。
用自己的本地服务器测试:
(响应行的)状态码、状态文字
状态码是用来反应服务器的响应情况;
状态文字是用来描述状态码的。
状态码 | 定义 | 说明 |
1XX | 信息 | 接收到请求,继续处理 |
2XX | 成功 | 操作成功地收到,理解和接受 |
3XX | 重定向 | 为了完成请求,必须采取进一步措施 |
4XX | 客户端错误 | 请求的语法有错误,或者不能完全被满足 |
5XX | 服务端错误 | 服务器无法完成明显有效地请求 |
常见的状态码
200 OK:服务器成功返回网页;
301 / 302:永久 / 临时 跳转,例:
301 重定向:
运行 redirect.php
<?php //301永久重定向 header('Location:http://www.baidu.com', true, 301);
302 重定向:
运行 redirect.php
<?php //302临时重定向 header('Location:http://www.baidu.com');
注意:当 post 数据发送到 a.php,a.php(header("Location:b.php");) 重定向到了 b.php(print_r($_POST);),导致的结果是 b.php 接受到的数据是 Array ()。
原因:从表单到 a.php 是 post 请求,从 a.php 到 b.php 变成了 get 请求(从 f12 开发人员工具中可以看出)
解决方案:
如果想保持 post 请求,可以使用 307 :重定向中保持原有数据。a.php:
<?php header("Location:b.php", true, 307);
即可。此时 a.php 到 b.php 仍然是 post 请求。
例:
test.html
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="a.php" method="post"> username: <input type="text" name="usernam"> <input type="submit" value="提交"> </form> </body> </html>
a.php
<?php header('Location:b.php');
b.php
<?php error_reporting(0); print_r($_POST);
修改 b.php
<?php header('Location:b.php', true, 307);
304 Not Modified:未修改(浏览器缓存),例如
当第一次访问一个页面:
当刷新几次页面:
客户端(Chrome)告诉服务我有这张图片,并且告诉服务器该图片时间上的编号(If-Modified-Since 和 If-None-Match),询问服务器该图片是否过期,如果过期则传给我最新的图片;服务器告诉浏览器(ETag 和 Last-Modified),这张图片没有进行修改过,因此浏览器就从缓存中取出这张图片,减小了服务器传输的压力。
使用 telnet 进行缓存的测试,正常 GET 请求图片:
返回二进制的图片信息;
加上以下信息:
If-Modified-Since:Sun, 02 Nov 2014 13:46:57 GMT
If-None-Match:"1860000000012c5-9d39-506e076b8dbb5"
返回:
失败的状态码:
404:请求的网页不存在;
503:服务器暂时不可用;
500:服务器内部错误
相关文章
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- Bootstrap响应式导航栏的学习和如何清除汉堡按钮(.navbar-toggler)点击后的黑边框
- Android Button响应事件两种实现方法及优劣比较
- 使用Bootstrap 3开发响应式网站实践02,轮播
- iOS 11开发教程(二十一)iOS11应用视图美化按钮之实现按钮的响应(1)
- win10 音频服务未响应的解决方法
- 《响应式Web图形设计》一7.1 使用Illustrator
- 《高性能响应式Web开发实战》一第2章 响应式中要面对的问题
- 响应式编程学习记录
- 异步编程的本质:怎么处理异步请求(事件)与响应的关系
- JMeter学习-041-响应数据中文乱码解决方法
- 面试官:说说Vue响应式原理
- Vue3响应式原理
- SVN提交时响应很慢,我是这样解决的。
- 蚂蚁金服安全应急响应中心上线 用户可提交漏洞
- WEB前端大作业-旅游企业营销宣传响应式网站模板(HTML+CSS+JavaScript)
- 电脑l浏览器提示DNS服务器未响应怎么办
- 单页面响应式模板:血色圆月
- 3D Slicer Modify Mouse Event 修改3D Slicer中的鼠标响应事件
- Qt 按钮事件不响应
- vue的响应式都用它来实现,js中强大的Object.defineProperty()方法