BS通信

解析HTTP协议

基本的Web应用程序的组成部分:

  • web服务器:接收客户端请求,然后向客户端返回一些结果
  • web客户端浏览器:允许用户请求服务器上的某个资源,并且向用户显示请求的结果
  • HTTP协议:web客户端和服务器之间通信所用的协议
  • 静态HTML文件:用于告诉浏览器怎样想用户显示内容

HTTP协议是一种超文本传输协议(HyperText Transfer Protocol),是一套计算机在网络中通信的规则。

浏览Web时,浏览器通过HTTP协议与WEB服务器交换信息,Web服务器向web浏览器返回的文件都有与之相关的类型,这些信息类型的格式有MIME(Multipurpose Internet Mail Extensions)定义

MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开

发送请求信息

一旦建立了TCP连接,Web浏览器就会想Web服务器发送请求命令。HTTP协议将来自客户端的请求信息封装成HTTP请求,它包括请求行、请求头、消息体、以及分隔请求头和消息体的一个空行

1) 请求行

请求行是一个ACALL文本行,由三个标记组成:请求的HTTP方法、请求的URL、HTTP版本,中间用空格分开。例如:GET /lovobook/index.html HTTP/1.0

在HTTP版本1.1中定义了有八种可能的HTTP请求方法

  • GET:用于向服务器检索资源
  • POST:用于向服务器发送数据,并要求指定的URI处理
  • HEAD:与GET方法相同,服务器值返回状态行和头标,并不返回请求文档
  • PUT:请求服务器保存请求数据作为指定URI新内容
  • DELETE:请求服务器删除URI中命名的资源
  • OPTIONS:请求关于服务器支持的请求方法信息
  • TRACE:请求Web服务器反馈HTTP请求和其头标
  • CONNECT:已文档化当当前未实现的一个方法,预留做隧道处理

在这些方法中我们最常用的是GET和POST方法,其它几种方法对于Web开发者来说不是很有用。GET方法用于向服务器检索信息,它可以以查询字符串的形式提供有限长度的数据。但是,GET方法却不能发送大量的信息。很多WEB服务器会限制完整URL的长度为255个字符,超过这个长度的信息通常被忽略了。因此,GET方法适合发送我们不介意在URL中可见的少量信息。此外,GET方法只能用在一个Web应用程序中执行查询,而不能用于执行更新。

以下方式的HTTP请求为GET方法

  • 在浏览器地址栏输入URL
  • 在当前网页点击HTML链接
  • 在HTML表单中设置表单的method=’get’,并提交表单:
  • 在HTML表单中没有设置表单的method属性,提交表单(不设置method属性,默认为get方法)

POST方法用于向服务器发送数据,并要求制定的URI处理。与GET方法类似,POST方法也可以有查询字符串,但是POST方法用完全不同的机制传递信息。POST方法可以将无限制数量的数据作为HTTP请求的一部分,通过套接字连接发送。数据不会作为URL的一部分出现,而且只发送一次。因此,POST方法通常被用于发送敏感信息或者上传文件。如果一个应用程序需要修改数据或添加数据,并且通过HTTP发送请求,那么就应该使用POS法

2)请求头

HTTP协议使用HTTP头来传递请求的元信息。HTTP头是一个用冒号分隔的名称/值对,冒号前面是HTTP头的名称,后面是HTTP头的值。常见的请求头有用户代理资料、可以接受的格式、语言以及内容编码,这些信息用于告诉服务器客户端是什么,客户端想要得到什么格式的回馈信息等

3)空行

发送回车符合退行,通知服务器不在有请求头

4)消息体

HTTP请求中带有查询字符串时,如果是GET方法,查询字符串或表单数据附在请求行中,那么消息体中就没有内容;如果是POST方法,查询字符串或表单数据就添加在消息体中

回应响应消息

Web服务器解析请求,定位并读取指定的资源,将文件以及其他信息组成HTTP响应返回到客户端。HTTP响应包括:状态行、响应头、消息体以及分隔消息头个响应头的一个空行。

1) 状态行

每个HTTP响应以一个状态行开头。状态行由HTTP协议版本,响应状态码和响应描述组成,三者之间用空格隔开

响应状态码是一个三位的数字,它分为如下几个组:

  • 1xx:信息,请求收到,继续处理。
  • 2xx:成功,行为被成功地接受、理解和采纳。
  • 3xx:重定向,为了完成请求,必须进一步执行的动作
  • 4xx:客户端错误,请求包含的语法错误或者请求无法实现
  • 5xx:服务器错误,服务器不能实现一种明显无效的请求

每一个响应状态码都有相关联的字符串响应描述。我们经常看到的响应状态码是200,它 表明成功执行,我们得到了一个有效的响应。

2)响应头

响应头与请求头一样,也是一个用冒号分开的名称/值对,冒号前面是HTTP头的名称,后面是HTTP头的值。典型的响应头包括内容类型描述,内容长度,时间邮戳,服务器信息,内容最后一次响应时间。这些新兴县帮助客户端得到发送过来的的内容是什么,内容的大小、数据是否比前一次响应更新。

在响应头中,最重要的HTTP头是Content-type,它指定MIME类型。MIME类型告诉浏览器要接收的数据是什么类型,这样浏览器才知道如何显示这些数据。这个值通常与HTTP请求头中的Accpt相关

3)空白行

最后一个响应头之后是一个空行,发送回车符合退行,表明以下不再有响应头

4)消息体

要发送会客户端的HTML文档或其他要显示的内容等。Web服务器把要发送给客户端的文档信息放在消息体中

时间: 2024-10-20 03:44:03

BS通信的相关文章

web表达三剑客之html

一.web入门之html 1.html小试牛刀 电脑做client,浏览器做server,进行bs通信:原理与之前的电脑自建client和server相似,server和client进行cs通信. import socket def main(): sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.bind(('localhost',8080)) sock.listen(5) while True: connection,a

BS网站在线升级(服务器通信)

背景:日前公司需要将客户企业站增加在线升级功能.即客户登录自身网站管理后台后台,发生请求到我公司门户网站,如果存在新版本则提示用户更新.客户从我们公司买到的空间.数据库.和网站代码后可以直接根据智能提示完成webconfig配置,后期客户可以从我们手中购买网站模版实现个性化风格主题的网站设置.我们所有客户的网站结构是一模一样的.因为前台客户浏览的页面均为代码自动生成的静态页,所以更新过程不影响访客浏览. 分析:BS架构项目不同与CS架构——通过请求检测版本更新后返回更新包,根据本地安装目录即可完

前端Vue框架 04 路由:逻辑跳转、路由传参 项目组件的数据局部化处理data(){ return{} } 组件的声明周期 组件间通信 各种第三方插件(vuex,axios,element-ui,(jq+bs))

项目初始化 """ 1)根组件:App.vue <template> <div id="app"> <router-view /> </div> </template> 2)路由配置:router/index.js const routes = [ { path: '/', name: 'Home', component: Home } ]; 3)组件:views和components文件夹 i)

集群通信应用开发吐槽(2014年)

在集群通信行业两家公司开发PC应用六年了,但在对开发的理解的道路上感觉还是挺孤独的,于是想写点东西发泄下郁闷,没想到只想了一两小时就写了几十条提纲.好话说在前面,文中的提到的现象可能不全面,甚至是误会的,文中的观点更是需要审视的看待. 产品越复杂(越多硬件)越能卖出好价钱 产品便携易用,越能解决客户问题,越给客户创造价值,才越值钱.产品成本和产品价值没有直接关系,iphone的成本如果只有1元钱,就没人花45千买了? 性能问题需要测试数据来证明 在讨论某个功能的整体设计时,做嵌入式开发的常常随意

C#版 Socket编程(最简单的Socket通信功能)

原文://http://blog.csdn.net/linybo/article/details/51141960 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别. 第一步:用指定的端口号和服务器的ip建立一个EndPoint对像: 第二步:建立一个Socket对像: 第三步:用socket对像的Bind()方法绑定EndPo

java netty socket库和自定义C#socket库利用protobuf进行通信完整实例

之前的文章讲述了socket通信的一些基本知识,已经本人自定义的C#版本的socket.和java netty 库的二次封装,但是没有真正的发表测试用例. 本文只是为了讲解利用protobuf 进行C# 和 java的通信.以及完整的实例代码 java 代码 svn 地址,本人开发工具是NetBeans 8.0.2 使用 maven 项目编译 http://code.taobao.org/svn/flynetwork_csharp/trunk/BlogTest c# 代码 svn 地址 使用的是

转载:C#:Socket通信

原文地址:http://www.cnblogs.com/s380774061/archive/2012/10/15/2725297.html 之前一直想自己搞把C#的Socket代码,一直没有下手,今晚终于实践了一把.现把流程编写出来,以备后用. 很简单的源码. 工具:Vs2010 建立项目:C# 控制台应用程序 Server代码 using System; using System.Collections.Generic; using System.Linq; using System.Tex

C# SOCKE通信

目录 1.socket简介 2.socket编程一般流程 3.C#socket类介绍 4.编程实例 1.socket简介  socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作.Socket就是该模式的一个实现,   socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭). 说白了Socket是应用层与TCP/IP协议族通信的中间软件抽

java socket报文通信(二)报文的封装

昨天我们谈了怎么建立socket通信的服务端和客户端,今天我们就来谈一谈怎么封装报文. 什么是报文这里我就不在阐述了,不清楚的朋友可以自己去查资料.我们今天要谈的报文主要友以下几个部分组成: 3位同步校验位+8位报文长度+报文头+报文体+32位MD5校验位 基本格式如下: 0X110X120X1300000232<?xml version="1.0" encoding="GBK"?><ROOT><Code>0204</Cod