第2章--HTTP协议简介

HTTP协议简介

Abstract: HTTP协议的特性,HTTP请求/响应的过程,HTTP请求/响应的报文格式等知识,最后会演示如何通过Chrome提供的开发者工具,去跟踪调试一次HTTP请求。

HTTP protocol: 请求响应式协议:

client -->  server : HTTP 请求

client <--  server : HTTP 响应

一个HTTP请求和一个HTTP响应 -->  一次HTTP事务

任意两次HTTP事务都是independent的 --> 无状态

协议分层:不同的协议完成不同的功能

多种分层模型:TCP/IP协议栈分层模型,OSI分层模型(七层),etc.

TCP/IP分层模型:

(Application Layer) 应用层协议:i.e HTTP protocol(HTTP请求和响应)

(Transport Layer) 传输层协议:i.e TCP protocol(保证通讯数据有序可靠的协议)-- 端口号(默认80)

(Network Layer)网络层协议:定位(i.e IP地址 e.g. 93.184.216.34) --不好记-> 对应域名:baidu.com

域名到IP之间的解析:由DNS (Domain Name System) Server(域名解析服务器)来完成

通过域名对应到IP地址,加上端口号 可以定位唯一服务

(Host-to-network Layer) 数据链路层 & 物理传输层:数据传输

浏览网页的过程模拟:

域名:example.com

--> DNS服务器

IP地址:93.184.216.34

浏览器端connect to服务器端(IP地址已知):TCP连接

连接建立成功

浏览器端可以向服务器端发起HTTP请求

服务器端可以做出对应的HTTP响应

浏览器端渲染并展示HTML文件

HTTP请求和响应的报文:

在浏览器地址栏输入域名:http://www.example.com:80/blahblah...

http://   -- 协议(浏览器默认为http协议,可省略)

www.example.com   --  域名

:80     --  端口号(默认为:80,可省略)

/blahblah...   --  资源路径

使用抓包工具抓到的HTTP请求包:(报文)

HTTP请求行:GET / HTTP/1.1 \r\n

GET  ---  请求方法:GET, POST, HEAD, PUT, OPTIONS, DELETE, TRACE, CONNECT

/  ---  资源路径

HTTP/1.1   ---   HTTP协议版本(目前常用1.1)

\r\n  ---   文本结尾(换行)

HTTP请求头:从Host到最后一行

格式:key: value \r\n

e.g.:

Host:域名,主机名,虚拟主机

Connection:使用keep-alive 一个连接可以发多个请求,请求结束可以不disconnect

User-Agent:发起请求的应用程序(服务器端决定返回的版本(pc or phone))

HTTP请求体:此例为简单的GET请求,故无请求体

HTTP响应(报文格式):

状态行   ---   HTTP/1.1 200 OK \r\n

HTTP/1.1   ---   协议版本

200   ---   状态码:表示HTTP响应的状态

OK   ---   原因

常见状态码:

200 OK:请求成功(一般以2开头的都是表示请求成功)

304 Not Modified:(请求码与缓存相关:如果浏览器端有缓存时,在请求服务器对应资源时,服务器不用再次返回);

(一般以3开头的都是与重定向和缓存相关的)

404 Not Found:(服务器端找不到资源)

500 Internal Server Error:(服务器端在请求时出错了)(一般5开头表示服务器端内部的错误)

\r\n   ---   结束符

响应头   ---   从Accept-Ranges到Content-Length

格式与请求头的格式差不多

e.g.:

Server:服务器端使用什么应用程序来返回响应

Content-Type:资源内容的类型(如HTML, 音频,视频等)

Content-Length:内容长度(如果一条连接上有多个请求的话,需要指定一个资源长度来找边界)

响应体   ---   响应头之后的部分

响应头和响应体的分隔符:空行(\r\n)

响应体可以是文本或二进制,一般情况下大小由Content-Length响应头来指定

通过Chrome来跟踪响应的过程:

打开developer-->tools 开发者工具

进入www.example.com

得到一个HTTP请求的过程

(www.example.com的状态码是304;若勾选Disable cache,则状态码会为200)

点击www.example.com查看details

HTTP协议单元测验:https://my.oschina.net/iwinder/blog/779717

HTTP协议单元作业:https://my.oschina.net/hava/blog/734416

Java开发工程师(Web方向) - 01.Java Web开发入门 - 第2章.HTTP协议简介的更多相关文章

  1. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第6章.蜂巢

    第6章--蜂巢 蜂巢简介 网站开发完,就需要测试.部署.在服务器上运行. 网易蜂巢: 采用Docker容器化技术的云计算平台 https://c.163.com 容器管理:容器可被视作为云主机的服务器 ...

  2. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第5章.Git

    第5章--Git 版本控制简介 VCS (version control system) 版本控制系统:记录若干文件的修订记录的系统,帮助查阅/回到某个历史版本 LVCS本地 CVCS集中式(Cent ...

  3. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第4章.Maven

    第4章--Maven Maven实战 Java Web应用的部署: 手动式: 编译:javac -cp $CATALINA_HOME/lib/servlet-api.jar web-inf/class ...

  4. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第3章.Tomcat

    第3章--Tomcat Tomcat安装与运行 Tomcat:目前最常用的基于java的web应用服务器 本课程中所有的Java代码最终都需要部署到Tomcat中运行 Tomcat的配置文件是XML的 ...

  5. Java开发工程师(Web方向) - 01.Java Web开发入门 - 第1章.Web应用开发概述

    第1章--Web应用开发概述 Web应用开发概述 浏览器-服务器架构(BS-architecture) browser/ App    ---- request ---->    server ...

  6. Java后端开发工程师是否该转大数据开发?

    撰写我对java后端开发工程师选择方向的想法,写给在java后端选择转方向的人 背景 看到一些java开发工程师,对java后端薪酬太悲观了.认为换去大数据领域就会高工资.觉得java后端没有前途.我 ...

  7. Java软件工程师面试题:Java运行时异常与一般异常有什么不一样?

    异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误.java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕 ...

  8. 【转】测试开发工程师必备软硬能力&高级测试开发工程师需要具备什么能力?

    对于测试的基本知识,可以查看软件测试相关书籍 对于在公司成为一位优秀的测试开发工程师,我觉得下面这篇文章涉及到的是我们需要的,稍微进行改动https://blog.csdn.net/sinat_210 ...

  9. Android开发工程师面试题总结。android开发面试经验

    1:Android中五种数据存储方式分别是什么?他们的特点?     (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQ ...

随机推荐

  1. 讲一个关于RSA加密算法的故事

    有甲乙两个人,甲有两把钥匙,一把叫做甲的公钥,另一把叫做甲的私钥.乙同样有两把钥匙,一把叫做乙的公钥,另一把叫做乙的私钥. 某一天,甲乙成为了好朋友,甲想向乙发送一份保密数据,这份保密数据要求只有甲乙 ...

  2. 【luogu P1825 [USACO11OPEN]玉米田迷宫Corn Maze】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1825 带有传送门的迷宫问题 #include <cstdio> #include <cst ...

  3. Jmeter--随机生成浮点数

    post接口中需要随机生成目标对象的地理位置: 所以就使用了javaScript函数,如下所示: { "Location": { "Altitude": ${_ ...

  4. NopCommerce 3.4省市联动

    做法有两种,一种是在StateProvince表里面加个字段,另一种是新建两个表,用来存市.县的数据,表结构完全按照StateProvince走就好了.我这里用的是第二种做法,菜鸟一枚,代码写的比较烂 ...

  5. jQuery获取所有父级元素及同级元素及子元素的方法

    jQuery获取所有父级元素及同级元素及子元素的方法 1.获取父级元素 $("#id").parent() 获取其父级元素 $("#id").parents() ...

  6. window 下创建软链接 mklink

    软链接是一种文件共享方式. 命令:mklink /d "C:\d" "C:\e" 有哪些坑: 1.此命名必须以管理员方式在cmd运行 2.文件必须不存在..通过 ...

  7. OS--lab0+lab1+lab4+lab5+lab6+lab7

    URL:https://github.com/Chasssser/MytestOR(Linux) git clone https://github.com/Chasssser/Mytest

  8. 前端的字符串时间如何自动转换为后端Java的Date属性,介绍springMVC中如何解决时间转换问题

    平常在开发过程中,前端选择时间一般都要使用时间选择插件,但是这种插件选出来的时间都是字符串类型,我们该怎么转换为后端的Date呢?/? 前端效果如下(笔者用的是layDate5.0插件): 修改前的后 ...

  9. Django templates加载css/js/image等静态资源

    配置步骤: 1.首先在应用下面创建static目录 2.将静态资源拷贝进去 3.在应用的settings.py文件中添加 import os BASE_PATH = os.path.dirname(o ...

  10. B/S与C/S架构简介

    概念: C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境 ...