HTTP请求:

  • 一、请求行:
  • 二、请求头:
  • 三、响应头:
  • 四、请求正文:
  • 五、扩展:
    • 1、请求方式:
    • 2、If-Modified-Since和Last-Modified:
    • 3、响应状态码:
    • 4、GET和POST的区别:
    • 302 + location和Referer:
    • 注意:
  • 六、参考博文:

一、请求行:

请求行由请求格式:
方法字段、URL字段和HTTP协议版
本字段3个字段组成,它们用空格分隔。
例如:GET /index.html HTTP/1.1。

请求格式 方法字段 URL字段 HTTP协议版
例如 GET /index.html HTTP/1.1

二、请求头:

字段 含义
Accept 告诉服务器,客户端支持的数据类型
Accept-Charset 告诉服务器,客户端采用的编码。
Accept-Encoding 告诉服务器,客户机支持的数据压缩格式。
Accept-Language 告诉服务器,客户机的语言环境
Host 客户机通过这个头告诉服务器,想访问的主机名。
If-Modified-Since: 客户机通过这个头告诉服务器,资源的缓存时间。(好多请求中不显示)
Referer 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
User-Agent: 客户机通过这个头告诉服务器,客户机的软件环境
Cookie 客户机通过这个头告诉服务器,可以向服务器带数据
Connection 客户机通过这个头告诉服务器,请求完后是关闭还是保持链接
Date 客户机通过这个头告诉服务器,客户机当前请求时间。

三、响应头:

字段 含义
Location 这个头配合302状态码使用,告诉用户端找谁。
Server 服务器通过这个头,告诉浏览器服务器的类型
Content-Encoding 服务器通过这个头,告诉浏览器数据采用的压缩格式。
Content-Length 服务器通过这个头,告诉浏览器回送数据的长度。
Content-Language 服务器通过这个头,告诉服务器的语言环境。
Content-Type 服务器通过这个头,回送数据的类型
Last-Modified 服务器通过这个头,告诉浏览器当前资源的缓存时间。
Refresh 服务器通过这个头,告诉浏览器隔多长时间刷新一次。
Content-Disposition 服务器通过这个头,告诉浏览器以下载的方式打开数据。
Transfer-Encoding 服务器通过这个头,告诉浏览器数据的传送格式。
ETag 与缓存相关的头。
Expires 服务器通过这个头,告诉浏览器把回送的数据缓存多长时间。-1或0不缓存。
Cache-Control和Pragma 服务器通过这个头,也可以控制浏览器不缓存数据。
Connection 服务器通过这个头,响应完是保持链接还是关闭链接
Date 告诉客户机,返回响应的时间。

四、请求正文:

1、请求头和请求正文之间有一空格(很重要),代表请求头的结束。
2、不一定什么时候有:
1)、在http请求中,如果是GET请求:
那么请求的数据会在请求的路径后面
GET /index.html?username=tom&password=123
2)、在http请求中,如果是POST请求:
那么请求的数据会
在请求的正文中

五、扩展:

1、请求方式:

根据HTTP标准,HTTP请求可以使用多种请求方法:
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
get请求参数在 请求行中
请求参数在请求体中

2、If-Modified-Since和Last-Modified:

1、Last-Modified 与If-Modified-Since都是用来记录页面的最后修改时间。
当客户端访问页面时,服务器会将页面最后修改时间通过 Last-Modified 标识由服务器发往客户端,客户端记录修改时间。
2、 再次请求本地存在的cache页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的最后修改时间戳发送回去,服务器端通过这个时间戳判断客户端的页面是否是最新的。
3、如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的。
4、于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担

3、响应状态码:

分类 分类描述
1** (正确响应)信息,服务器收到请求,需要请求者继续执行操作(服务器什么都没有做)
2** 成功,操作被成功接收并处理
3** (正确响应)重定向,需要进一步的操作以完成请求 (服务器做了一部分, 后续还要做)
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误

更加详细的可以参考菜鸟教程
常见的响应状态码:
200 OK:
你最希望看到的,即处理成功!

301 redirect:
301 代表永久性转移(Permanently Moved)

302 redirect:
302 代表暂时性转移(Temporarily Moved )

303 See Other:
我把你redirect到其它的页面,目标的URL通过响应报文头的Location告诉你。

304 Not Modified:
告诉客户端,你请求的这个资源至你上次取得后,并没有更改,你直接用你本地的缓存吧,我很忙哦,你能不能少来烦我啊!(走缓存)

404 Not Found:
你最不希望看到的,即找不到页面。如你在google上找到一个页面,点击这个链接返回404,表示这个页面已经被网站删除了,google那边的记录只是美好的回忆。

500 Internal Server Error:
看到这个错误,你就应该查查服务端的日志了,肯定抛出了一堆异常,别睡了,起来改BUG去吧!

4、GET和POST的区别:

  1、  在客户端,Get方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放在HTTP包的body中。2、 GET方式提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST则没有此限制。3、安全性问题。正如在(1)中提到,使用 Get 的时候,参数会显示在地址栏上,而 Post 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 get;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 post为好。4.、服务器取值方式不一样。GET方式取值,如php可以使用$_GET来取得变量的值,而POST方式通过$_POST来获取变量的值。

302 + location和Referer:

1、重定向:302 + location------->response
定义两个Servlet分别为:ServeltFrist.java和ServeltSecond.java

public class ServeltFrist extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置状态码为302response.setStatus(302);//设置响应头的location值为:http://lcoalhost/day03_4/secondresponse.setHeader("location", "http://localhost/day03_4/second");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
//--------------------------------------------------------------------------------------------
public class ServeltSecond extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");response.getWriter().write("我是重定向得到的");}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}

2、Referer(防盗链)
一个index.html页面有一个超链接。链接到Servlet的RefererTest.java:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
双十一抢购苹果手机:<br>
<a href="/day03_4/referer">点击进行iphone X抢购</a></body>
</html>
//------------------------------------------------------------------------------------------------(仅用于分开)
public class RefererTest extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");String referer = request.getHeader("Referer");if ("http://localhost/day03_4/index.html".equals(referer)) {response.getWriter().write("恭喜你抢购成功");} else {response.getWriter().write("你正在进行非法访问");}}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}

下面附上没人用的破防盗链(仅用于自己有个印象)

public class PoReferer {public static void main(String[] args) throws IOException {// 得到抢购链接URL url = new URL("http://localhost/day03_4/referer");// 表示得到远程连接的对象URLConnection conn = url.openConnection();conn.addRequestProperty("Referer", "http://localhost/day03_4/index.html");conn.connect();// 得到远程了解资源的流对象BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));// 打印流对象String line = br.readLine();System.out.println(line);}
}

注意:

1、POST请求有请求体,故与GET请求相比,请求头中多了Content-Length和Content-Type属性。
2、在响应中:响应行和响应行都是有浏览器内部解析的;而只有响应体才是展示在我们所看到的(页面源码);响应正文内容由浏览器进行解析显示在页面上

六、参考博文:

http请求头和响应头含义

常见的响应状态码参考自

HTTP请求和请求头的详解相关推荐

  1. ios php 表单提交图片上传,axios发送post请求提交图片表单步骤详解

    这次给大家带来axios发送post请求提交图片表单步骤详解,axios发送post请求提交图片表单的注意事项有哪些,下面就是实战案例,一起来看一下. DOME 接口const userUploadA ...

  2. HTTP协议的头信息详解

    HTTP协议的头信息详解 http://blog.csdn.net/guoguo1980/archive/2008/07/14/2649658.aspx HTTP协议的头信息详解 HTTP(Hyper ...

  3. HTTP协议的头信息详解 1

    HTTP协议的头信息详解 我用抓包软件抓了http的包,发现accept大多数有两种情况. # l8 X" o; I5 e# t9 y第一种:Accept: image/gif, image ...

  4. linux语言的说明顺序有哪些,(linux常用头文件详解.doc

    (linux常用头文件详解 linux常用头文件详解 POSIX标准定义的头文件??????? 目录项 ???????? 文件控制 ??? 文件名匹配类型 ??? 路径名模式匹配类型 ??????? ...

  5. linux 常用头文件,(常用头文件详解.doc

    (常用头文件详解 linux常用头文件详解 POSIX标准定义的头文件??????? 目录项 ???????? 文件控制 ??? 文件名匹配类型 ??? 路径名模式匹配类型 ??????? 组文件 ? ...

  6. strcpy没有声明 c++头文件详解

    strcpy没有声明 c++头文件详解 2010-10-23 12:19 4971人阅读 评论(0) 收藏 举报 c++stringiostreamcmath.h语言 协议分发程序程序在公司机器上编译 ...

  7. string头文件详解

    string头文件详解 头文件 #include<string> using namespace std; 访问字符串 string str="abcd"; for(i ...

  8. http请求头类型详解

    [TOC] Content-type的几种常见类型 简介 是Http的实体首部字段,用于说明请求或返回的消息主体是用何种方式编码,在request header和response header里都存在 ...

  9. http常用请求头与响应头字段详解

    请求头 Accept: 例: Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/ ...

最新文章

  1. 写给Linux系统运维的朋友
  2. [JLOI2012]时间流逝
  3. linux存储--共享内存机制shm(十三)
  4. 今日新鲜事python_今日新鲜事励志的句子致自己
  5. 枚举当前环境中打开的所有IE
  6. vue检测不到data里数组里面元素的变化
  7. shell与python相互赋值
  8. “赢在幻灯片”有奖征文启事
  9. Mongoose的增删改查
  10. 文本文件和二进制文件的差异和区别
  11. 知更鸟php,PHP编辑器:phpDesigner
  12. MINA、Netty、Twisted一起学(十二):HTTPS
  13. 2023年核桃仁行业产业布局:全球核桃仁产量稳步增长
  14. 用七段数码管显示学号python_用七段数码管显示学号python
  15. request.getContextPath详解
  16. 67. Add Binary 二进制加法leetcode
  17. 360手机怎样更新系统版本android,360手机推出新系统更新 N5的安卓7.X测试版发布...
  18. 解决vue重复点击路由报错问题:Uncaught (in promise) NavigationDuplicated
  19. 进程控制块pcb详解
  20. MySQL慢查询日志分析

热门文章

  1. 华为鸿蒙和yunos,阿里的YunOS跟华为的鸿蒙差距大么?
  2. [技巧]新版gitbook导出pdf电子书
  3. Windows上安装Nessus
  4. 读取xslx文件(一)
  5. 查询字符串中不含重复的最长子串
  6. mysql auto increment 插入_MySQL里AUTO_INCREMENT表里插入0值的问题
  7. 使用Xtext/Xtend 实现域专用语言DSL(2)
  8. 地磅系统——车辆识别系统的自动化管理
  9. matlab 二次函数图像
  10. 高中计算机操作题frontpage步骤,一级计算机操作题步骤——Frontpage操作.docx