javascript - 浏览器收到 Websocket 输出,提示 "Invalid UTF-8 sequence in header value "

标签 javascript http-headers websocket go

当我在浏览器中加载页面时,页面可以正确提供。当 JavaScript 执行时,Chrome 的控制台输出显示:

Invalid UTF-8 sequence in header value 

我已经搜索了该字符串,但找不到任何关于 golang 的提及。

如何告诉 golang 不要将 unicode 字符写入 Web 套接字?

我认为这是问题的原因,因为“网络”选项卡仅显示一个空的请求和响应。


CCSE:

main.go:

package main

import (
  "fmt"
  "net/http"
  "log"
  "code.google.com/p/go.net/websocket"
  //"github.com/garyburd/go-websocket/websocket"
)

const listenAddress = "localhost:9999"

func wsHandler(webSck *websocket.Conn) {
  fmt.Fprint(webSck, "Rpy")
  fmt.Println("Sent \"Rpy\" to web socket", webSck)
  //more code here
}

func main() {
  http.Handle("/", http.FileServer(http.Dir("./static")))
  http.Handle("/ws", websocket.Handler(wsHandler))
  err := http.ListenAndServe(listenAddress, nil)
  if err != nil {
    log.Fatal(err)
  }
}

静态/main.js

var socket = new WebSocket("ws://localhost:9999/ws");
socket.onopen = function() {
  socket.onmessage = function(m) {
    console.log("Received: " + m);
  };
  socket.send("Req\n");
};

编辑:

根据@Intermernet的建议,我设置了Sec-WebSocket-Protocol header 。无济于事,仍然得到 header 值中的无效 UTF-8 序列

另请注意,我需要执行 webSck.Config().Header = make(http.Header) 的原因是它是 nil - 由日志确认关于 webSck.Config() 的声明。继续讨论另一个问题——为什么我必须这样做?我是否在某个地方错过了初始化步骤?

func wsHandler(webSck *websocket.Conn) {
  webSck.Config().Header = make(http.Header)
  webSck.Config().Header.Add("Sec-WebSocket-Protocol", "chat")
  fmt.Printf("ws.Config()  %#v\n", webSck.Config())
  var buf []byte;
  buf = []byte("Rpy")
  _, err := webSck.Write(buf)
  if err != nil {
    fmt.Println("Error:", err)
  } else {
    fmt.Printf("Sent \"Rpy\" to web socket  %#v\n", webSck)
  }
}

最佳答案

此问题是否与 code.google.com/p/go.net/websocket 的最新更改有关?

https://code.google.com/p/go/source/detail?r=1e65ca1b2499c473ec267ca1d6759b3dc920a599&repo=net

关于javascript - 浏览器收到 Websocket 输出,提示 "Invalid UTF-8 sequence in header value ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16507595/

相关文章:

NGINX 仅为 `api` 子域设置 CORS header

c# - Response.Redirect 剥离 header 引荐来源网址 - 可以将其添加回去吗?

javascript - 共享 SockJS 连接

asp.net - 在 ASP.net C# 中伪造浏览器请求

websocket - 如何从服务器重新连接到客户端

javascript - 是否可以使用 Spring-WebSockets 通过 WebSockets 通过 STOMP 发送二进制数据?

javascript - 无法使用目标 ="_blank"在新选项卡上打开 PDF

javascript - jQuery 单击/更改事件在 IE7/8 中无法正常工作

php - 如何在不重新加载页面的情况下运行php函数

javascript - 如何让 Javascript 时钟根据按钮点击而增加