Http协议——基本概念
一、浏览网页的过程
用户输入一个url,浏览器根据url给web服务器发送一个Request,web服务器接收到Request后进行处理,并返回浏览器一个Response,可以响应一个静态页面或者图片进行页面跳转,JSP脚本,servlets,ASP脚本,服务端脚本或者其他一些服务端技术。浏览器解析Response中的HTML内容,呈现给用户。也可能浏览器发送的Request要过代理服务器(proxy),最后才到达web服务器。打开一个网页可能需要发送多次请求,如:当我们发送一次请求后,web服务器返回Response,但是浏览器分析该Response中的HTML后发现其中引用了许多其他的文件,比如css ,js,图片等,浏览器会再次发出请求,等所有文件都被下载成功后,页面才被展现出来。
Web服务器:windows:IIS
Linux/Unix: Apache Nginx
代理服务器的作用:
1、提高访问速度,大多数的代理服务器都有缓存功能。
2、突破限制,翻墙。
3、隐藏身份。
URL:
schema://host[:port#]/path/.../[?query-string][#anchor]
scheme指定低层使用的协议(例如:http, https, ftp)
host HTTP服务器的IP地址或者域名
port# HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/ 默认 HTTP的端口号为80,HTTPS的端口号为443。
path 访问资源的路径
query-string 发送给http服务器的数据
anchor- 锚
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff
Schema: http
host: www.mywebsite.com
path: /sj/test/test.aspx
Query String: name=sviergn&x=true
Anchor: stuff
二、HTTP协议
HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候,就成了我们常说的HTTPS。

HTTP消息的结构
Request:
包含三部分,第一部分Request Line,第二部分Request Header,第二部分后有一个空行,第三部分Request Body

如下为请求百度主页面:

第一行为Request Line,第二行至末尾为Request Header,没有空行间隔,所以无第三部分Request Body。
下图请求博客园主页面(包含Request Body):

Response:
消息结构也分三部分,与Request基本相似。

请求百度首页的Response:

第一行Response Line,第二行至第一个空行为Response Header,剩余部分Response Body。
GET与POST:
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET(查),POST(改),PUT(增),DELETE(删)。GET主要用于查询资源信息,他是安全的(主要用于获取信息而不更改信息)和幂等的(对同一个url的多个请求应该返回相同的结果,对实时新闻的多次请求,尽管返回内容不同,但是也认为是幂等的,因为为改变资源信息)。POST用于更新资源信息。后面两个不常用。
区别:
- 一般在浏览器中直接输入url访问资源都是通过GET方式;在Form提交中,可以通过Method指定提交方式GET或者POST,默认为GET。
- GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456&verify=%E4%BD%A0 %E5%A5%BD. url采用ASCII码编码格式,Unicode格式需要编码再传输。POST方法是把提交的数据放在HTTP包的RequestBody中。
- 传输大小的限制。GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。因此对于GET提交时,传输数据就会受到URL长度的限制。POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。
- 安全性:POST安全级别要比GET高。 因为GET提交用户名和密码时,都会明文显示在url中,如果页面被缓存,则较不安全。
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
Response 消息中的第一行叫做状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
状态码:
HTTP客户端可以通过状态码了解HTTP服务器是否产生了预期的Response.
HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1XX 提示信息 - 表示请求已被成功接收,继续处理
2XX 成功 - 表示请求已被成功接收,理解,接受
3XX 重定向 - 要完成请求必须进行更进一步的处理
4XX 客户端错误 - 请求有语法错误或请求无法实现
5XX 服务器端错误 - 服务器未能实现合法的请求
Request Header
Request Header中包含许多域,如下图的Cache、Client、Cookies/Login等。同理Response Header也包含许多域。

HTTP协议是无状态的。
无状态是指协议对于事务处理没有记忆功能。服务器不知道客户端的状态,无法知道连续的两次的请求是否来自于同一个客户端。需要借助于Cookie和Session或服务端API记录这些信息。
- 优点:服务器不用为每个客户端连接分配内存来记忆大量状态。也不用在客户端断开连接时清理内存,提高了web业务效率。
- 缺点:客户端每次都要提交相应参数,服务器需要处理这些参数。
HTTP Connection:Keep-Alive。
Http协议——基本概念的更多相关文章
- (转载)OC学习篇之---协议的概念和用法
在前一篇文章中我们介绍了OC中类的延展,这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Jav ...
- OC中协议的概念以及用法
OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字更形象点,因为我们在学习 ...
- OC学习篇之---协议的概念和用法
这一篇文章我们在来看一下OC中协议的概念以及用法,协议也是OC中的一个重点,Foundation框架以及我们后面在写代码都会用到. OC中的协议就是相当于Java中的接口(抽象类),只不过OC中的名字 ...
- HTTP 协议基础概念和报文结构
基础概念 1.WWW(World Wide Web,万维网)构建技术有3项: (1)把SGML(Standard Generalized Markup Language,标准通用标记语言)作为页面的文 ...
- 【TCP/IP】二、协议的概念
一.概念 1.tcp/ip是通信协议的统称. 2.协议就是计算机与计算机之间通过网络实现通信时,事先达成的一种约定.这种约定,使那些不同厂商的设备,不同的CPU以及不同的操作系统组成的计算机之间,只要 ...
- HTTP协议的概念作用和特点
Web交互的基本流程 请求:客户端根据服务器地址把数据发送给服务器的过程叫请求. 相应:服务器将请求的处理结果发送给浏览器的过程叫响应. 什么是HTTP? 概念:超文本传输协议. HTTP有什么作用? ...
- SMGP3.0协议的概念知识
该项目主页在https://code.google.com/archive/p/smgp/,可以使用VPN进去看看,该项目是开源的,根据SMGP3.0协议写的API,我们要用的话直接调用就好了,这里主 ...
- JAVAEE 和项目开发(第一课:浏览器和服务器的交互模式和HTTP协议的概念和介绍)
互联网的发展非常迅速,但是万变不离其宗.学习 web 开发,需要我们对互 联的交互机制有一定的了解.为了更好的理解并掌握 Servlet,在正式学习 Servlet之前需要对 web 开发中客户端和服 ...
- TCP协议基本概念
TCP协议最主要的特点 TCP是面向连接的运输层协议.这就是说,应用程序在使用TCP协议之前,必须要建立TCP连接,且在传输完毕后,还要断开连接. 每一条TCP连接只能有两个端点,每一条TCP连接只能 ...
随机推荐
- dynomite:高可用多数据中心同步
https://github.com/Netflix/dynomite Dynomite, inspired by Dynamo whitepaper, is a thin, distributed ...
- Java 多线程概念
1.为什么要使用多线程: 更多的处理器核心. 更快的响应时间. 更好的变成模型. 2.线程的优先级: 现代操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个的时间片,线程会分配到若干时间片 ...
- datatables后台分页例子(可直接复制代码)
1.head表签引用 这两个文件即可 2.复制下面的代码到webform中的head标签中 <script> $(function () { //提示信息 var lang = { &qu ...
- EF 记录执行的sql语句
最近做了个中等的项目,数据不会很多,开发时间比较紧迫,所以用了EF的框架. 在使用过程中,发现有时候执行的结果不如预期,想看看执行的sql语句为何,遍查找资料,在网上找到了相关辅助类,拿来使用,部署到 ...
- Unity3d发布apk文件并在Android虚拟机中运行的操作流程
总的流程分为以下6个步骤: 1.安装java_jdk 2.配置java环境变量 3.更新android的sdk 4.从Unity3d中发布出apk文件 5.创建android虚拟机并运行 6.将apk ...
- (转载)23种设计模式的uml图表示及通俗介绍
转载自: https://www.cnblogs.com/ningskyer/articles/3615312.html 0.分类 创建型模式 1.FACTORY2.BUILDER3.FACTORY ...
- 学JS的书籍
1.JavaScript DOM 编程艺术 [说明] 这本书最大的特点就是简明易懂,循序渐进,适合初学者,非常容易上手. 计划:三天读完 读书总结:待写 2.Javascript权威指南 特点是权威. ...
- 字符串在forEach方法里面可以使用include函数
今天在写项目的时候,发现了一个问题,使用forEach函数,arr数组里面的字符串可以调用include方法,我查阅了很多地方,string里面没有这个方法. 但是在forEach函数里面确实可以这样 ...
- Hybrid框架安全隐患分析
Hybrid框架安全隐患分析 目前我司移动端项目中各种app如雨后春笋般生根发芽层出不穷.而利用Hybrid框架确实可以减轻一部分移动端压力.并且做到灵活发版.但是其中的安全问题往往让人忽略. 针对A ...
- webservice、soap、wsdl
搜集了一些关于webservice.soap.wsdl的基本知识,解决工作中遇到的疑问 一 .什么是webservice(用你的话描述webservice)?在什么时候用webservice(webs ...