㈠ 在网页上用websocket播放RTSP实时流 性能优化 进阶方案
最近发现有的网站上,显示的视频流很丝滑,而且在多路情况下不会出现页面卡死。 总结了一下所使用的技术。
后端推消息,把数据转为json字符串,通过websocket推给前端, 图片使用base64编码
{
"channel": "camera_1",
"url": "data:image/png;base64,iV"
}
前端接收到数据后,解码,使用img 标签展示 图片base64
客户端的传输方式改为 ArrayBuffer方式。将channel、图片文件流等信息拼接为二进制数据。 通过websocket推送给前端
举例:
channel频道: camera_1 占两个字节;
图片: file文件流 占128字节
字节顺序 Little-endian
前端读取为ArrayBuffer, 通过视图操作,取出图片的二进制流,生成Blob对象
读取blob对象, 返回 URL格式的字符串(base64编码)以表示所读取文件的内容
前端img 标签 src 赋值为 base64 字符串,显示视频流图片。
㈡ 根据Url地址得到网页的html源码的编码问题
一般的服务器标头中都有内容编码,先取这个值作为编码。如果没有,就把所有内容读成字节数组,先用UTF8先读取一下网页内容,并查找下有没有meta标签指定编码,找到的话就使用找到的编码重新读取字节数组,否则就使用默认编码读取。
㈢ 工程师职位描述与岗位职责
工程师职位描述与岗位职责
在我们平凡的日常里,越来越多地方需要用到岗位职责,岗位职责是一个具象化的工作描述,可将其归类于不同职位类型范畴。我们该怎么制定岗位职责呢?以下是我精心整理的工程师职位描述与岗位职责,供大家参考借鉴,希望可以帮助到有需要的朋友。
工程师职位描述与岗位职责1
工作职责 :
1、负责商业变现相关系统的方案设计和实施;
2、负责持续改善已有服务,优化系统薄弱点;
3、完善基础组件支持,更好地支撑业务迭代;
4、培养新人的编码、架构、解决问题的能力。
任职要求 :
1、3年以上工作经验,良好的算法与数据结构基础,扎实的编程能力,对服务端开发和网络服务有深刻的认识;
2、熟悉Mysql。 Memcached。 Redis。消息队列,nginx等常用WEB组件,能按场景优化使用;
3、有在线大流量服务设计和实现经验优先,有广告相关业务经验优先;
4、有python或golang开发经验者优先。
工程师职位描述与岗位职责2
职位描述 :
岗位职责 :
1、负责公司单片机、DSP、FPGA等嵌入式系统开发;
2、负责制定嵌入式系统技术的整体方案;
3、分析并解决产品在实际运行中出现的问题;
4、独立负责产品硬件开发、调试、测试;
5、总结项目产品研发经验,持续改进产品性能;
6、有巡检车、AGV等开发经验者优先;
7、认真做好公司领导交办的其它工作任务;
任职要求 :
1、本科5年或硕士3年以上嵌入式系统软硬件研发工作经验(精通嵌入式系统软件开发);
2、有良好的分析和解决问题能力,逻辑思维清晰严谨;
3、精通51/AVR/STM32等常见MCU,精通KEIl、IAR、CCS、AD;
4、动手能力强、熟悉个各种驱动接口设计,如CAN、I2C,SPI,UART等;
5、善于沟通,工作细心,责任心强,工作主动性强,具有较强的抗压及应变能力;
6、具备团队管理能力;
工程师职位描述与岗位职责3
工作职责 :
1、负责广告风控与审核相关平台建设,推动公司相关业务接入
2、参与搭建机器审核平台,支持每天千万级别广告素材审核,保障安全
3、与各业务线配合推动风控策略,建立健全的风险防控机制与体系
任职要求 :
1、热爱编程,扎实的编程能力,良好的数据结构和算法功底
2、精通python、php、c++、java、golang中的至少一门语言
3、责任心强,积极主动,有良好的沟通能力和团队合作能力
4、有很好的产品意识,对业务流程有良好的抽象和总结能力
工程师职位描述与岗位职责4
岗位要求 :
1、负责服务器产品BIOS/BMC开发过程的全流程管控。项目过程中输入输出交付件的进度管理和质量管理。
2、负责BIOS/BMC版本生命周期管理,版本质量担当。
3、根据项目范围、质量、时间与成本的综合因素的考虑,制定固件开发的总体计划与阶段计划,对于项目需求进行任务分解,并组织资源完成各项任务。
4、负责定制项目组内外的沟通计划,保证固件团队与项目组各环节的目标明确,理解一致,沟通顺畅。
5、负责组织服务器/存储产品生产过程及市场反馈的BIOS/BMC问题处理,进展跟踪反馈,问题复盘,跟踪改进措施落地。
6、负责定期发出项目状态报告,对于项目风险需要及时评估,并积极准备相应的`应对措施。
任职要求 :
1、大学本科以上学历,有服务器行业或Linux软件项目管理经验优先。
2、3年及以上实际软件开发经验,至少两年团队管理经验。
3、有C语言相关技术背景。
4、有较强的沟通协调能力。出色的时间管理、人力管理、风险管理、质量管理能力。以及良好的PPT制作和演讲能力。
5、知识结构全面,并具有良好的快速学习能力和创新能力。能够主动学习新的业务领域知识,形成独立思考的和解决方案能力。
6、有过CMMI经验和通过PMP考试的优先。
工程师职位描述与岗位职责5
职位描述 :
1、负责存储复杂方案(容灾,备份,存储虚拟化,数据迁移等方案)的现场交付、项目管理、项目培训工作,保障项目实施进度和实施质量。
2、负责浪潮存储产品及方案方案技术支持工作。
3、对典型方案、技术处理思路等进行总结、提炼并发布知识库。
任职要求 :
1、统招大学本科及以上学历,英语CET—4级,2年以上存储项目实施工作经验。
2、熟悉常见的双机高可用软件如MSCS,RHCS,POWER HA等。
3、对EMC,IBM,HDS高端存储熟悉者优先。
4、具备良好的客户服务意识,沟通能力强。
工程师职位描述与岗位职责6
职位描述 :
岗位职责 :
负责流媒体直播架构的设计和优化;
负责流媒体服务端引擎的设计和优化;
任职要求 :
1、熟悉Linux C编程和服务端Lua编程;
2、熟悉TCP/IP协议,掌握Socket编程;
3、有nginx rtmp或srs服务开发经验或者服务端Lua开发经验;
4、有openresty 网关相关的经验优先;
5、较强的学习能力、接受新事物的能力,以及对技术的热情;
工程师职位描述与岗位职责7
岗位职责 :
1、负责美团点评风险评估及风险管理,并推动风险控制措施落地实施;
2、负责美团点评的信息安全策略、制度、流程、指南的制定、编写、推动、运营、审计和优化;
3、支持各类等保、合规、隐私保护、第三方认证、资质等需求的落地。
岗位要求 :
1、熟悉各类安全标准包括但不仅限于ISO2700x,PCI-DSS,NIST,FIPS 140-2,CSA,ITIL等;
2、熟悉安全工程方法论和各种信息安全模型、架构、体系(P2DR、SDL、IT治理模型、风险管理模型、应急响应过程);
3、具有良好的沟通协调能力、较强的团队合作精神、优秀的执行能力;
4、有一定的安全技术背景,有贴近业务的一线安全管理或运营工作经验;
5、良好的文档编写、展示以及跨部门沟通能力;
6、有大型互联网ISMS经验者优先考虑。
工程师职位描述与岗位职责8
岗位职责 :
1、负责用友U9系统实施交付;
2、根据业务部门的要求进行需求调研,与用户沟通并归纳用户需求;
3、根据业务部门需求,结合U9产品功能,规划企业业务蓝图;
4、负责培训业务部门的关键用户;
5、负责系统功能测试及用户操作手册编写工作;
6、负责在上线过程中,辅导业务部门业务人员熟练操作系统;
7、负责业务部门的需求收集并拟出实施方案,并与公司研发人员一起提供解决方案。
任职资格 :
1、本科以上学历,财务、计算机、管理类相关专业背景,有2年以上项目实施经验;
2、有一定的SQL、计算机网络及软件基础;
3、有强烈的责任心,超强的执行力,良好的沟通及问题解决能力;
4、能承受较强的工作压力,具备良好的团队协作能力;
5、属性ERP各个模块的应用,对销售,采购,库存,生产,以及财务有更深的了解;
6、熟悉用友U9软件者优先考虑。
工程师职位描述与岗位职责9
【 职位描述 】:
1、参与公司内部系统研发,负责代码及相关模块的文档维护
2、能够顺畅完成内部协作,并互相帮助提升
3、能同项目经理、团队成员进行有效沟通
4、负责功能模块的设计原型实现、解决系统运行过程中的疑难问题
5、智能设备、物联网软件、微信连接方向
【职位需求】:
1、全日制统招本科以上学历,计算机相关专业,985,211,1年以上研发经验。
2、做事积极主动,细心,有较强责任心和事业心,有团队精神。
3、较强的编程能力,能够独立完成复杂的交互流程设计和实现,较强的文档理解能力。
4、熟悉.Net平台上的开发技术,精通.Net/C#开发,熟悉SQL Server数据库,熟悉Sql语句优化及数据库优化。
5、抗压力强;有专研精神; 结果导向。
6、有互联网研发经验优先、熟悉酒店业务者优先。
【上班地点】:
上海市长宁区虹桥路2451号;
员工福利:
员工餐补、保险、公积金、提供住宿、周年礼物、周年体检、酒店住宿折扣、部门活动
工程师职位描述与岗位职责10
职责描述 :
1.负责客户端相关逻辑的脚本开发;
2.负责游戏客户端调优;
3.负责游戏客户端模块设计和开发。
任职要求 :
1. 1年以上游戏客户端开发经验
2 至少熟悉Python/lua一种脚本语言的优先考虑
3. 至少熟悉Unity3D/Unreal4一款引擎的优先考虑
4. 具有良好的编程能力、代码风格和编程习惯、熟练掌握常用数据结构及算法
5. 热爱游戏,能适应手游开发节奏者优先
工程师职位描述与岗位职责11
工作职责 :
1、负责字节跳动海内外业务线(包括头条、抖音、火山、TikTok等等)安全平台及产品的设计与研发;
2、负责头条、抖音、火山、TikTok等产品的内部通用安全组件的服务端研发;
3、开发和完善后台相关工具、系统和流程建设。
任职要求 :
1、有强烈的求知欲和进取心,追求极致的技术geek甚好;
2、具有扎实的编程功底,良好的设计能力和编程习惯;
3、熟练掌握Python/c/c++中的至少一种;
4、熟悉Django、go语言开发、安全开发经验者优先。
工程师职位描述与岗位职责12
工作职责 :
1、负责字节跳动信息集成与共享平台的前端研发;
2、负责高质量的设计和编码,承担重点、难点的技术攻坚;
3、和产品经理配合,深度参与产品需求讨论,功能定义等;
4、主要前端框架:React、Electron等。
任职要求 :
1、良好的设计和编码品味,热爱写代码,能产出高质量的设计和代码;
2、追求极致和完美,有代码洁癖,善于总结和挖掘事物本质;
3、掌握WEB前端开发技术:JavaScript(含ES6)、HTML、CSS、DOM、协议、安全等;
4、较好的产品意识,愿意将产品效果做为工作最重要的驱动因素;
5、有知名开源作品优先。
工程师职位描述与岗位职责13
工作职责 :
1、参与支持公司相关短视频以及相机类App的跨平台SDK相关功能研发;
2、参与录制、视频编辑、特效处理、编解码等核心功能模块的研发;
3、参与国内、海外市场适配和体验优化。
任职要求 :
1、至少熟悉Android or iOS一端音视频采集录制编辑流程;
2、熟悉OpenGL、C/C++者优先,有跨平台开发经验者优先;
3、对性能精益求精,有移动端CPU / GPU结合的性能优化经验者优先;
4、有Camera优化经验者优先;
5、有海外市场适配和优化经验者优先;
6、熟悉FFMpeg、webrtc、GPUImage等开源多媒体框架者优先;
7、对多媒体开发兴趣浓厚,学习和沟通能力者优先。
工程师职位描述与岗位职责14
工作职责 :
1、负责斗鱼主站后台需求开发;
2、参与后台系统架构、性能、安全、扩展等优化的设计和实现;
3、根据开发进度和任务分配,完成相应模块的文档及代码编写;
任职资格 :
1、1—5年linux服务器端软件开发经验;
2、编程基本功扎实、熟悉常见的数据结构与算法、精通C/C++,熟悉面向对象技术,熟悉常见的设计模式;
3、精通TCP/IP协议相关知识及网络编程;
4、熟悉MySQL数据库,数据库设计、优化、调试、调优;
5、良好的分析问题和解决问题的能力,有高并发Server设计开发经验优先。
工程师职位描述与岗位职责15
工作职责 :
1、负责存储、计算、云平台等基础平台的开发和维护,为海量数据和大规模业务系统提供易用的基础设施
2、能够快速理解业务场景,推动平台化,并对公司内外的用户体验负责
3、高水平小团队,紧密合作,高效工作,做有影响力的事情
任职要求 :
1、对存储、计算、消息队列、集群管理中的一项或多项有理解和认识
2、追求优雅的设计和优秀的代码质量,高标准
3、对问题敏锐,快速行动
4、具备良好的责任心、较强的学习能力、优秀的团队沟通与协作能力
;㈣ 前端怎么弄一个网页在线编码器
前端做网页在线编码器
1.点击右上角的三点,点击更多工具.
2.点击更多工具中的扩展程序.
3.将开发者模式打开.
4.将charset安装插件拖动到界面.
5.点击添加扩展程序.
6.添加成功后,关闭开发者模式.
7.打开一个网页的时候,如果乱码,那么右击网页选择charset,选择对应编码.
8.就会将编码格式纠正.
㈤ python爬虫抓取到的数据用网页打开时是乱码,怎么解决
写爬虫是经常会遇到这样的问题,这种问题很显然是编码问题,解决的方法其实也不难。
你可以用下面的两个方法来解决你的编码问题:
第一种是,通过浏览器打开你写的html之后,找到浏览器中的文字编码修改,将编码改为Unicode编码,即可修复。
第二种方法是修改你的前端代码:在你的代码output_html方法中,规定网页的文字编码即可
㈥ 如何查看fiddler的timeline精确时间
Fiddler2主菜单六个主菜单分别是:文件(File)CaptureTraffic——启用捕获功能,快捷键F12此功能的开启/关闭状态,程序安装后默认是开启的。可以在Fiddler底部状态栏最左侧看到:(开启状态)、(关闭状态)也可以通过鼠标点击状态栏该图标来进行切换。LoadArchive——载入本地保存的Session压缩包Save——保存AllSessions——保存捕获到的全部Session到压缩包SelectedSessions·inArchiveZip——保存当前选定的Session为压缩包·inVisualStudioWebTest——保存当前选定的Session为VisualStudioWebTest·inText——保存当前选定的Session为文本·inText(Headersonly)——保存当前选定的Session为文本(仅Header)Request·EntireRequest——保存当前选定的Session整个请求(包括Header)·RequestBody——保存当前选定的Session请求的内容(不包括Header)Response·EntireResponse——保存当前选定的Session整个响应(包括Header)·ResponseBody——保存当前选定的Session响应的内容(不包括Header)Properties——当前选择Session的属性包括Session状态、响应包的大小,客户端服务器信息(如进程、端口、传输字节数、TTLB、客户端IP、服务器IP、TTFB等),请求各环节的时间情况、WinINET缓存信息等。如下图:TTFB(Time-to-First-Byte)是指:从第一个请求发出到测试工具接收到服务器应答数据的第一个字节之间的平均时间。TTLB(Time-to-Last-Byte)是指:从第一个请求发出到测试工具接收到服务器应答数据的最后一个字节之间的平均时间。Exit——退出Fiddler编辑(Edit)Copy——复制Session——复制整个Session到剪贴板,快捷键Ctrl+CJustUrl——复制Session的URL到剪贴板,快捷键Ctrl+UHeadersOnly——复制Session的Header到剪贴板,快捷键Ctrl+Shift+CFullSummary——复制Session全部摘要到剪贴板TerseSummary——复制Session简单摘要到剪贴板,快捷键Ctrl+Shift+TRemove——移除SelectedSessions——移除所选的Session,快捷键DeleteUnselectedSessions——移除未选择的Session,快捷键Shift+DeleteAllSessions——移除所有Session,快捷键Ctrl+XSelectAll——选择所有SessionMarkRed——将选择的Session标为红色粗体,快捷键Ctrl+1Blue——将选择的Session标为蓝色粗体,快捷键Ctrl+2Gold——将选择的Session标为金色粗体,快捷键Ctrl+3Green——将选择的Session标为绿色粗体,快捷键Ctrl+4Orange——将选择的Session标为橙色粗体,快捷键Ctrl+5Purple——将选择的Session标为紫色粗体,快捷键Ctrl+6Unmark——去除颜色加粗标记,快捷键Ctrl+0FindSession——退出Fiddler规则(Rules)HideImageRequests——隐藏图片请求HideHTTPSCONNECTs——隐藏HTTPS连接AutomaticBreakpoints——自动设置断点BeforeRequests——在请求前设置断点,快捷键F11AfterResponse——在响应后设置断点,快捷键Alt+F11Disabled——不自动设置断点,快捷键Shift+F11IgnoreImages——自动设置断点时忽略图片CustomizeRules——自定义规则RequireProxyAuthentication——需要代理密码验证ApplyGZIPEncoding——应用GZIP压缩RemoveAllEncoding——移除所有编码Hide304s——隐藏所有状态为304(无变更)的请求RequestJapaneseContent——请求日文内容User-Agents——选择用户Web客户端代理类型,包括了目前主流的浏览器Performance——性能SimulateModemspeeds——模拟调制解调器速度DisableCaching——禁止缓存ShowTime-to-Last-Byte——显示TTLBShowResponseTimestamp——显示响应时间戳工具(Tools)FiddlerOptions——Fiddler选项WinINETOptions——IE浏览器WinINET选项ClearWinINETCache——清除WinINET缓存,快捷键Ctrl+Shift+XClearWinINETCookies——清除WinINET缓存TextEncode/Decode——文本编码/解码,快捷键Ctrl+E可以进行文本的Base64编码/解码、UrlEnccode/UrlDecode、十六进制编码、转JS字符串、HTML编码/解码、UTF-7编码/解码CompareSessions——使用MicrosoftWindiff.exe对比选择的Session,快捷键Ctrl+WResetScript——重置脚本Sandbox——沙箱/sandbox/ViewIECache——查看IE缓存文件夹视图(View)SquishSessionList——收缩/Session列表,快捷键F6也可以使用WebSession面板的按钮,详见WebSessions面板介绍StackedLayout——切换面板布局Statistics——Statistics页签,快捷键F7Inspector——Inspector页签,快捷键F8Builder——RequestBuilder页签,快捷键F9MinimizetoTray——缩小为任务栏图标,快捷键Ctrl+MStayonTop——保持在其他窗口前端AutoScrollSessionList——自动滚动Session列表Refresh——刷新,快捷键F5帮助(Help)FiddlerHelp——Fiddler在线帮助FiddlerCommunityDiscussions——Fiddler社区在线讨论HTTPReferences——在线HTTP参考,包括各种HTTP响应状态码CheckforUpdates——检查更新SendFeedback——发送回馈AboutFiddler——关于FiddlerFiddler2工具栏完整工具栏如下图:如果工具栏被关闭,可以通过如下方式开启:主菜单Tools->FiddlerOptions->Appearance->ShowFiddlerToolbar,打勾确认即可。下面逐一讲解各按钮的用途:Comment——给选定的Session增加一个备注,添加后会显示在WebSessions面板的Comments字段中Reissue——重新请求选定的SessionRemoveAll——移除所有Session,快捷键Ctrl+XRemoveImages——移除所有图片请求SessionRemoveCONNECTs——移除所有HTTPS请求SessionRemovenon-200s——移除所有HTTP状态不是200的SessionResumeAll——继续所有此刻在断点被停止的SessionStreaming——开启流模式(StreamingMode),此模式开启的时候,所有断点都被忽略,所有HTTP响应都流化。关于流模式,请点击这里。Find——按条件查找SessionSave——保存选定的SessionLunchIE——在IE中加载选定的SessionURL,如果没选择,就打开about:blankClearCache——清空缓存Encoder——文本编码/解码,与菜单Tools->TextEncode/Decode相同,快捷键Ctrl+ETearoff——将页签浮动MSDNSearch——在MSDN上查找指定关键字Help——打开在线帮助×——隐藏工具栏Fiddler2WebSession面板完整工具栏如下图:此列表显示所有HTTP请求的相关信息,从左到右各列分别代表:[#]——HTTPRequest的顺序,从1开始,按照页面加载请求的顺序递增。[Result]——HTTP响应的状态,可以参考这里。[Protocol]——请求使用的协议(如HTTP/HTTPS/FTP)[Host]——请求地址的域名[URL]——请求的服务器路径和文件名,也包括GET参数[BODY]——请求的大小,以byte为单位[Caching]——请求的缓存过期时间或缓存控制header等值[Content-Type]——请求响应的类型(Content-Type)[Process]——发出此请求的Windows进程及进程ID[Comments]——用户通过脚本或者右键菜单给此session增加的备注[Custom]——用户可以通过脚本设置的自定义值Session列表使用不同的颜色表示不同的HTTP状态(红色表示错误,黄色表示验证要求(authenticationdemands)),通讯类型(灰色表示HTTPS连接),响应类型(紫色表示CSS,蓝色表示HTML,绿色表示脚本,灰色表示图片)。你可使用FiddlerScript来自定义session请求的文本颜色。[#]列中使用不同的图标表示不同响应类型:——请求已被发送到服务器——从服务器下载响应结果——请求在断点处被暂停——响应在断点处被暂停——请求使用HTTPHEAD方法,响应没有内容——请求使用HTTPCONNECT方法,使用HTTPS协议建立连接通道——响应是HTML格式——响应是图片格式——响应是脚本文件——响应是CSS文件——响应是XML文件——普通响应成功——响应是HTTP300/301/302/303/307转向——响应是HTTP304(无变更),使用缓存文件——响应需要客户端验证——响应是服务器错误——请求被客户端、Fiddler或者服务器终止(Aborted)WebSessions右键菜单下列菜单项已经在主菜单中有介绍:[View]AutoScrollSessionList、[Edit]Copy、[Edit]Save、[Edit]Remove、[Edit]Mark、[Tools]Compare、[File]Properties,这里不再复述。DecodeSelectedSessions——如果请求使用了GZIP压缩,就解码Comment——给Session增加备注ReplayReissueRequests——重新请求此地址ReissueUnconditionally——无条件重新请求此地址RevisitinIE——在IE中请求此地址,相当于工具栏的LaunchIESelectParentRequest——选择当前session的父请求,比如图片的父请求就是嵌入它的页面ChildRequests——选择当前session的子请求,比如当前页面的子请求是页面内所有脚本、CSS、图片等DuplicateRequests——选择全部相同地址的请求CloneResponse——克隆Session响应UnlockForEditing——解锁当前session以编辑,只针对文本资源,比如HTML/JS/面板右上角的按钮用于收缩WebSession面板,相当于主菜单View->SquishSessionList
㈦ web前端使用什么开发工具最好
1、编码工具:
记事本之类的编辑器都可以胜任,但我们还是从开发效率和编码体验上面谈谈。
Visual Stuio
如果你用windows,重量级的Visual Stuio 2013虽然很庞大,对硬件要求比较高,但是 用起来绝对方便,比如智能提示、代码格式化,尤其是配合一些拓展插件。界面清爽,项目 管理方便,入手简单。
Sublime
轻量级的话,Sublime绝对是首选,小巧但功能强大,支持主流语言而且跨平台,插件也很多,前端开发很多都用它。
其实你说反了,越是功能简单的编辑器,越考验你的前端编码能力~
2、调试工具
主要是主流浏览器,Chrome、Firefox、IE11、Safari,这些浏览器基本都具备了开发者模式,学会使用后基本轻松应付各种前端调试问题。
㈧ 前端如何更改http协议
HTTP客户请求数据格式
大多数servlet程序都是和浏览器客户以HTTP协议进行通信的,这需要编程人员对程序的基本功能和HTTP协议的具体操作有深入的理解。在学习
servlet和Jsp编程时,有两点值得注意:首先是对HTTP协议的操作过程和数据格式足够熟悉,其次要灵活应用servlet的API中的有关方法
正确高效地处理有关数据。
一、HTTP客户请求的数据格式说明
HTTP请求包括三部分:请求行(Request
Line),头部(Headers)和数据体(Body)。其中,请求行由请求方法(method),请求网址Request-URI和协议
(Protocol)构成,而请求头包括多个属性,数据体则可以被认为是附加在请求之后的文本或二进制文件。
下面这个例子显示了一个HTTP请求的Header内容,这些数据是真正以网络HTTP协议从IE浏览器传递到Tomcat服务器上的。
GET /icwork/? search=proct HTTP/1.1
Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword,*.*
Accept-Language:en-us
Accept-Encoding:gzip,deflate
User-Agent:Mozilla/4.0(compatible;MSIE 5.01;Windows NT 5.0;DigExt)
Host:
Referer:
Connection:Keep-Alive
这段程序使用了6个Header,还有一些Header没有出现。我们参考这个例子具体解释HTTP请求格式。
1.HTTP请求行:请求行格式为Method Request-URI Protocol。在上面这个例子里,逗GET /icwork/? search=pruct HTTP/1.1地是请求行。
2.Accept:指浏览器或其他客户可以接爱的MIME文件格式。Servlet可以根据它判断并返回适当的文件格式。
3.Accept-Charset:指出浏览器可以接受的字符编码。英文浏览器的默认值是ISO-8859-1.
4.Accept-Language:指出浏览器可以接受的语言种类,如en或en-us,指英语。
5.Accept-Encoding:指出浏览器可以接受的编码方式。编码方式不同于文件格式,它是为了压缩文件并加速文件传递速度。浏览器在接收到Web响应之后先解码,然后再检查文件格式。
6.Authorization:当使用密码机制时用来标识浏览器。
7.Cache-Control:设置关于请求被代理服务器存储的相关选项。一般servlet用不到。
8.Connection:用来告诉服务器是否可以维持固定的HTTP连接。HTTP/1.1使用Keep-Alive为默认值,这样,当浏览器需要多个文件时(比如一个HTML文件和相关的图形文件),不需要每次都建立连接。
9.Content-Type:用来表名request的内容类型。可以用HttpServletRequest的getContentType()方法取得。
10.Cookie:浏览器用这个属性向服务器发送Cookie。Cookie是在浏览器中寄存的小型数据体,它可以记载和服务器相关的用户信息,也可以用来实现会话功能。
11.Expect:表时客户预期的响应状态。
12.From:给出客户端HTTP请求负责人的email地址。
13.Host:对应网址URL中的Web名称和端口号。
14.If-Match:供PUT方法使用。
15.If-Modified-Since:客户使用这个属性表明它只需要在指定日期之后更改过的网页。因为浏览器可以使用其存储的文件而不必从服务器请求,这样节省了Web资源。由于Servlet是动态生成的网页,一般不需要使用这个属性。
16.If-None-Match:和If-Match相反的操作,供PUT方法使用。
17.If-Unmodified-Since:和If-Match-Since相反。
18.Pragma:这个属性只有一种值,即Pragma:no-cache,表明如果servlet充当代理服务器,即使其有已经存储的网页,也要将请求传递给目的服务器。
19.Proxy-Authorization:代理服务器使用这个属性,Servlet一般用不到。
20.Range:如果客户有部分网页,这个属性可以请求剩余部分。
21.Referer:表明产生请求的网页URL。如比从网页/icconcept/index.jsp中点击一个链接到网页/icwork
/search,在向服务器发送的GET/icwork/search中的请求中,Referer是
/icconcept/index.jsp。这个属性可以用来跟踪Web请求是从什么网站来的。
22.Upgrage:客户通过这个属性设定可以使用与HTTP/1.1不同的协议。
23.User-Agent:是客户浏览器名称。
24.Via:用来记录Web请求经过的代理服务器或Web通道。
25.Warning:用来由客户声明传递或存储(cache)错误。
补充.Transfer-Encoding:
当不能预先确定报文体的长度时,不可能在头中包含Content-Length域来指明报文体长度,此时就需要通过Transfer-Encoding域来确定报文体长度。
通常情况下,Transfer-Encoding域的值应当为chunked,表明采用chunked编码方式来进行报文体的传输。chunked编码是HTTP/1.1 RFC里定义的一种编码方式,因此所有的HTTP/1.1应用都应当支持此方式。
chunked编码的基本方法是将大块数据分解成多块小数据,每块都可以自指定长度
二、下面是一个分析并显示客户请求的Header信息的servlet(tomcat下测试通过):
java 代码
Code:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.Enumeration;
public class headerinfo extends HttpServlet{
public void doPost(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException
{
/*
Enumeration e = req.getHeaderNames();
while (e.hasMoreElements()) {
String s = (String) e.nextElement();
System.out.println("header: " + s + " " + req.getHeader(s));
}
e = req.getAttributeNames();
while (e.hasMoreElements()) {
String s = (String) e.nextElement();
System.out.println("attribute: " + s + " " + req.getAttribute(s));
}
e = req.getParameterNames();
while (e.hasMoreElements()) {
String s = (String) e.nextElement();
System.out.println("parameter: " + s + " " + req.getParameter(s));
}*/
resp.setContentType("text/html; charset=GBK");
PrintWriter out = resp.getWriter();
out.println("<html><head><title>FormParameterServlet</title></head>");
out.println("<body bgcolor=\"white\">");
out.println("<center><font color=\"#009999\" size=\"4\" face=\"Arial\">");
out.println("<strong>List of all Headers in Servlet Request</strong>");
out.println("</font></center>");
out.println("<hr>");
out.println("<H3>Request Line is:</H3>");
out.println("<b>Method:</b>"+req.getMethod()+"<br>");
out.println("<b>URI:</b>"+req.getRequestURI()+"<br>");
out.println("<b>Protocol</b>"+req.getProtocol()+"<br>");
out.println("<center><h3>Header Name and Values</h3></center>");
out.println("<table border=1 align=center>");
out.println("<tr bgcolor='#99cee6'><th>Name</th><th>value</th></tr>");
Enumeration headernames = req.getHeaderNames();
while(headernames.hasMoreElements()){
String headername = (String)headernames.nextElement();
out.println("<tr><td>"+headername+"</td><td>"+req.getHeader(headername)+"</td></tr>");
}
out.println("</table></body></html>");
out.flush();
}
public void doGet(HttpServletRequest req,HttpServletResponse resp)
throws ServletException,IOException
{
doPost(req,resp);
}
}